diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po
index 481291cc4af7081e88804d25896eeca0053213f1..639948d3fae74fb482f0919b2d67f3162378c6ee 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,51 +18,51 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 
-#: aleksis/core/apps.py:154
+#: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
 msgstr ""
 
-#: aleksis/core/apps.py:155
+#: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr ""
 
-#: aleksis/core/apps.py:156
+#: aleksis/core/apps.py:168
 msgid "Full home postal address"
 msgstr ""
 
-#: aleksis/core/apps.py:157
+#: aleksis/core/apps.py:169
 msgid "Email address"
 msgstr ""
 
-#: aleksis/core/apps.py:158
+#: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:159 aleksis/core/forms.py:223 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:242
+#: aleksis/core/templates/core/person/full.html:250
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
@@ -91,15 +91,15 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:48 aleksis/core/forms.py:559
+#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
 msgid "Base data"
 msgstr ""
 
@@ -107,7 +107,7 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:54 aleksis/core/forms.py:568
+#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
 msgid "Contact data"
 msgstr ""
 
@@ -123,121 +123,121 @@ msgstr ""
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:135
+#: aleksis/core/forms.py:130
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:139
+#: aleksis/core/forms.py:134
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/models.py:130
+#: aleksis/core/forms.py:151 aleksis/core/models.py:130
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:157
+#: aleksis/core/forms.py:152
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/forms.py:210
+#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
 #: aleksis/core/menus.py:254 aleksis/core/models.py:153
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:159 aleksis/core/forms.py:570
+#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:160 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/forms.py:155 aleksis/core/models.py:206
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:202 aleksis/core/forms.py:205
+#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
 #: aleksis/core/models.py:73
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:203 aleksis/core/forms.py:206
+#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
 #: aleksis/core/models.py:81
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:236
+#: aleksis/core/forms.py:231
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:239
+#: aleksis/core/forms.py:234
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:240
+#: aleksis/core/forms.py:235
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:279
+#: aleksis/core/forms.py:274
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:283
+#: aleksis/core/forms.py:278
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:292
+#: aleksis/core/forms.py:287
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:401
+#: aleksis/core/forms.py:396
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:402
+#: aleksis/core/forms.py:397
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:434
+#: aleksis/core/forms.py:429
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:435
+#: aleksis/core/forms.py:430
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:461
+#: aleksis/core/forms.py:456
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:464
+#: aleksis/core/forms.py:459
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:472
+#: aleksis/core/forms.py:467
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:477
+#: aleksis/core/forms.py:472
 msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
-#: aleksis/core/forms.py:564
+#: aleksis/core/forms.py:559
 msgid "Adress data"
 msgstr ""
 
-#: aleksis/core/forms.py:576
+#: aleksis/core/forms.py:571
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:583
+#: aleksis/core/forms.py:578
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:586
+#: aleksis/core/forms.py:581
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:752
+#: aleksis/core/forms.py:747
 msgid "No valid selection."
 msgstr ""
 
@@ -245,22 +245,20 @@ msgstr ""
 msgid "There are unresolved data problems."
 msgstr ""
 
-#: aleksis/core/health_checks.py:44
-#, python-brace-format
-msgid "Last backup {time_gone_since_backup}!"
+#: aleksis/core/health_checks.py:40
+msgid "Error accessing backup storage: {}"
 msgstr ""
 
-#: aleksis/core/health_checks.py:46
-msgid "No backup found!"
+#: aleksis/core/health_checks.py:50
+msgid "Last backup {}!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:73
-msgid "No backup result found!"
+#: aleksis/core/health_checks.py:52
+msgid "No backup found!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:75
-#, python-brace-format
-msgid "{task.status} - {task.result}"
+#: aleksis/core/health_checks.py:79
+msgid "No backup result found!"
 msgstr ""
 
 #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
@@ -282,7 +280,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -340,7 +338,7 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -398,7 +396,7 @@ msgstr ""
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1075
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
@@ -408,7 +406,7 @@ msgstr ""
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
@@ -468,7 +466,7 @@ msgstr ""
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1044
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr ""
 
@@ -488,7 +486,7 @@ msgstr ""
 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:993
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr ""
 
@@ -524,7 +522,7 @@ msgstr ""
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1238
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr ""
 
@@ -540,7 +538,7 @@ msgstr ""
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 msgid "Short name"
 msgstr ""
 
@@ -560,11 +558,11 @@ msgstr ""
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
 msgid "Mobile phone"
 msgstr ""
 
@@ -580,19 +578,19 @@ msgstr ""
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:231
+#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
 msgid "Guardians / Parents"
 msgstr ""
 
@@ -600,364 +598,368 @@ msgstr ""
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1068
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1045
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:894
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:916
+#: aleksis/core/models.py:896
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:919
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:920
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:969
+#: aleksis/core/models.py:949
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:950
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:971
+#: aleksis/core/models.py:951
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:977
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:958
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:970
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:991
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:992
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1031
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1046 aleksis/core/models.py:1285
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1053
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1067
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1074 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1088
+#: aleksis/core/models.py:1068
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1089
+#: aleksis/core/models.py:1069
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1090
+#: aleksis/core/models.py:1070
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1092
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1094
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1095
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1076
+msgid "Can invite persons"
+msgstr ""
+
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1121
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1153
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1154
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1157
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1145
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1188
+#: aleksis/core/models.py:1169
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1196
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1204
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1212
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1224
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1241
+#: aleksis/core/models.py:1222
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1279
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1289
+#: aleksis/core/models.py:1270
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -993,7 +995,7 @@ msgstr ""
 msgid "Internationalisation"
 msgstr ""
 
-#: aleksis/core/preferences.py:44
+#: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
 
@@ -1001,11 +1003,11 @@ msgstr ""
 msgid "Site description"
 msgstr ""
 
-#: aleksis/core/preferences.py:66
+#: aleksis/core/preferences.py:65
 msgid "Primary colour"
 msgstr ""
 
-#: aleksis/core/preferences.py:78
+#: aleksis/core/preferences.py:77
 msgid "Secondary colour"
 msgstr ""
 
@@ -1013,147 +1015,151 @@ msgstr ""
 msgid "Logo"
 msgstr ""
 
-#: aleksis/core/preferences.py:99
+#: aleksis/core/preferences.py:100
 msgid "Favicon"
 msgstr ""
 
-#: aleksis/core/preferences.py:109
+#: aleksis/core/preferences.py:111
 msgid "PWA-Icon"
 msgstr ""
 
-#: aleksis/core/preferences.py:120
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 msgid "Mail out name"
 msgstr ""
 
-#: aleksis/core/preferences.py:131
+#: aleksis/core/preferences.py:144
 msgid "Mail out address"
 msgstr ""
 
-#: aleksis/core/preferences.py:143
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr ""
 
-#: aleksis/core/preferences.py:155
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr ""
 
-#: aleksis/core/preferences.py:167
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr ""
 
-#: aleksis/core/preferences.py:183
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr ""
 
-#: aleksis/core/preferences.py:195
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr ""
 
-#: aleksis/core/preferences.py:206
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr ""
 
-#: aleksis/core/preferences.py:218
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr ""
 
-#: aleksis/core/preferences.py:227
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
-#: aleksis/core/preferences.py:238
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr ""
 
-#: aleksis/core/preferences.py:249
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr ""
 
-#: aleksis/core/preferences.py:257
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr ""
 
-#: aleksis/core/preferences.py:265
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr ""
 
-#: aleksis/core/preferences.py:273
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr ""
 
-#: aleksis/core/preferences.py:281
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:289
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:300
+#: aleksis/core/preferences.py:314
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:313
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:325
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:336
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:347
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:356
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:365
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:376
+#: aleksis/core/preferences.py:392
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:390
+#: aleksis/core/preferences.py:407
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:403
+#: aleksis/core/preferences.py:421
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:413
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:414
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:424
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:434
+#: aleksis/core/preferences.py:453
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:444
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr ""
 
@@ -1500,7 +1506,7 @@ msgstr ""
 msgid "Privacy Policy"
 msgstr ""
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr ""
 
@@ -2127,19 +2133,11 @@ msgstr ""
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:168
-msgid "home number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:174
-msgid "mobile number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:216
+#: aleksis/core/templates/core/person/full.html:224
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:232
 msgid "Children"
 msgstr ""
 
@@ -2939,23 +2937,23 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr ""
 
@@ -3105,10 +3103,10 @@ msgstr ""
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1445
+#: aleksis/core/views.py:1447
 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 55a1fa4b4213ab34f133746e776138df18c9f6a1..590f5ff9ab6b78cb5ebbc5738c367994cfd58aac 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,18 +18,18 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 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 7e10b607c6a44a740dbef2de325f7e07d669a297..7ac1267b598d22b532de3f641faf79ef365ac68f 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-01-24 19:42+0000\n"
+"POT-Creation-Date: 2022-01-31 17:03+0100\n"
 "PO-Revision-Date: 2022-01-24 20:11+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"
@@ -40,30 +39,30 @@ msgid "Home and mobile phone"
 msgstr "Festnetz- und Mobilfunknummer"
 
 #: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 #: aleksis/core/templates/core/person/full.html:250
 msgid "Groups"
 msgstr "Gruppen"
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr "Problem ignorieren"
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr "Lösungsoption \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
 msgstr "Dashboard-Widget deaktivieren"
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr "Sicherstellen, dass es keine kaputten Dashboard-Widgets gibt."
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr "Das Dashboard-Widget wurde automatisch als kaputt gemeldet."
 
@@ -92,11 +91,11 @@ msgstr "Berechtigung"
 msgid "Content type"
 msgstr "Inhaltstyp"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr "Benutzer"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr "Gruppe"
 
@@ -152,7 +151,7 @@ msgid "Additional data"
 msgstr "Zusätzliche Datne"
 
 #: aleksis/core/forms.py:155 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr "Foto"
 
@@ -281,7 +280,7 @@ msgstr "Einladung akzeptieren"
 msgid "Dashboard"
 msgstr "Dashboard"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -339,7 +338,7 @@ msgstr "Autorisierte Anwendungen"
 msgid "Admin"
 msgstr "Admin"
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -397,7 +396,7 @@ msgstr "OAuth2-Anwendungen"
 msgid "People"
 msgstr "Leute"
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1042
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
@@ -407,7 +406,7 @@ msgstr "Gruppentypen"
 msgid "Groups and child groups"
 msgstr "Gruppen und Kindgruppen"
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
@@ -467,7 +466,7 @@ msgstr "Text (mehrzeilig)"
 msgid "URL / Link"
 msgstr "URL / Link"
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1011
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr "Name"
 
@@ -487,7 +486,7 @@ msgstr "Das Startdatum muss vor dem Enddatum liegen."
 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:960
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr "Person"
 
@@ -523,7 +522,7 @@ msgstr "weiblich"
 msgid "male"
 msgstr "männlich"
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1206
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr "Verknüpfter Benutzer"
 
@@ -539,7 +538,7 @@ msgstr "Nachname"
 msgid "Additional name(s)"
 msgstr "Zusätzliche Namen"
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 msgid "Short name"
 msgstr "Kurzname"
 
@@ -579,15 +578,15 @@ msgstr "Geburtsort"
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr "Bild/Avatar anzeigen"
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr "Dies ist ein Bild oder ein Avatar für die öffentliche Darstellung."
 
@@ -599,368 +598,368 @@ msgstr "Erziehungsberechtigte / Eltern"
 msgid "Primary group"
 msgstr "Primärgruppe"
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1035
+#: 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
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr "Feldtitel"
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr "Feldtyp"
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 msgid "Addtitional field for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 msgid "Addtitional fields for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr "Kann Kindgruppen zu Gruppen zuordnen"
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 msgid "Can view statistics about group."
 msgstr "Kann Statistiken über Gruppen sehen."
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 msgid "Long name"
 msgstr "Langname"
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr "Mitglieder"
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr "Leiter/-innen"
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr "Ãœbergeordnete Gruppen"
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titel"
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr "Anwendung"
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr "Aktivität"
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr "Aktivitäten"
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr "Absender"
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr "Empfänger"
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1012
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr "Link"
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr "Gelesen"
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr "Versandt"
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 msgid "Notification"
 msgstr "Benachrichtigung"
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr "Link zur detaillierten Ansicht"
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr "Datum und Uhrzeit des Anzeigestarts"
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr "Anzeigezeitraum"
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 msgid "Announcement"
 msgstr "Ankündigung"
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 msgid "Announcement recipient"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 msgid "Announcement recipients"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:881
+#: aleksis/core/models.py:894
 msgid "Widget Title"
 msgstr "Widget-Titel"
 
-#: aleksis/core/models.py:882
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr "Widget aktivieren"
 
-#: aleksis/core/models.py:883
+#: aleksis/core/models.py:896
 msgid "Widget is broken"
 msgstr "Widget ist kaputt"
 
-#: aleksis/core/models.py:886
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr "Größe auf Mobilgeräten"
 
-#: aleksis/core/models.py:887
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 px, 12 Spalten"
 
-#: aleksis/core/models.py:892
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr "Größe auf Tablets"
 
-#: aleksis/core/models.py:893
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr "> 600px, 12 Spalten"
 
-#: aleksis/core/models.py:898
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr "Größe auf Desktopgeräten"
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr "> 992 px, 12 Spalten"
 
-#: aleksis/core/models.py:904
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr "Größe auf großen Desktopgeräten"
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 px, 12 Spalten"
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:949
 msgid "Can edit default dashboard"
 msgstr "Kann Standarddashboard bearbeiten"
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:950
 msgid "Dashboard Widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:951
 msgid "Dashboard Widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/models.py:944
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:945
+#: aleksis/core/models.py:958
 msgid "Icon URL"
 msgstr "Symbol-URL"
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr "Externer-Link-Widget"
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr "Externer-Link-Widgets"
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:970
 msgid "Dashboard widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:962
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: aleksis/core/models.py:963
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr "Teil des Standarddashboards"
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:991
 msgid "Dashboard widget order"
 msgstr "Reihenfolge der Dashboard-Widgets"
 
-#: aleksis/core/models.py:979
+#: aleksis/core/models.py:992
 msgid "Dashboard widget orders"
 msgstr "Reihenfolgen der Dashboard-Widgets"
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr "Menü-ID"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr "Benutzerdefiniertes Menü"
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr "Benutzerdefinierte Menüs"
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr "Menü"
 
-#: aleksis/core/models.py:1013 aleksis/core/models.py:1253
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Symbol"
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr "Benutzerdefiniertes Menüelement"
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr "Benutzerdefinierte Menüelemente"
 
-#: aleksis/core/models.py:1034
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr "Titel des Typs"
 
-#: aleksis/core/models.py:1041 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1068
 msgid "Can view system status"
 msgstr "Kann Systemstatus sehen"
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1069
 msgid "Can manage data"
 msgstr "Kann Daten verwalten"
 
-#: aleksis/core/models.py:1057
+#: aleksis/core/models.py:1070
 msgid "Can impersonate"
 msgstr "Kann sich verkleiden"
 
-#: aleksis/core/models.py:1058
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr "Kann Suche benutzen"
 
-#: aleksis/core/models.py:1059
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr "Kann Konfiguration ändern"
 
-#: aleksis/core/models.py:1060
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr "Kann Einstellungen einer Person verändern"
 
-#: aleksis/core/models.py:1061
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr "Kann Einstellungen einer Gruppe verändern"
 
-#: aleksis/core/models.py:1062
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr "Kann die PDF-Generierung testen"
 
-#: aleksis/core/models.py:1063
+#: aleksis/core/models.py:1076
 msgid "Can invite persons"
 msgstr "Kann Personen einladen"
 
-#: aleksis/core/models.py:1099
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr "Zugehörige Datenprüfungsaufgabe"
 
-#: aleksis/core/models.py:1107
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr "Problem gelöst"
 
-#: aleksis/core/models.py:1108
+#: aleksis/core/models.py:1121
 msgid "Notification sent"
 msgstr "Benachrichtigung gesendet"
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr "Datenprüfungsergebnis"
 
-#: aleksis/core/models.py:1122
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr "Datenprüfungsergebnisse"
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr "Kann Datenprüfungen ausführen"
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr "Kann Datenprüfungsprobleme lösen"
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1145
 msgid "E-Mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1169
 msgid "Owner"
 msgstr "Leiter"
 
-#: aleksis/core/models.py:1160
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr "Datei abgelaufen am"
 
-#: aleksis/core/models.py:1162
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr "Generierte HTML-Datei"
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr "Generierte PDF-Datei"
 
-#: aleksis/core/models.py:1171
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/core/models.py:1172
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr "PDF-Dateien"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr "Task-Ergebnis"
 
-#: aleksis/core/models.py:1180
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr "Task-Benutzer"
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr "Task-Benutzer-Zuordnung"
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr "Task-Benutzer-Zuordnungen"
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1222
 msgid "Additional attributes"
 msgstr "Zusätzliche Attribute"
 
-#: aleksis/core/models.py:1247
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr "Erlaubte Scopes, die ein Client anfordern kann"
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1270
 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."
 
@@ -1024,139 +1023,143 @@ msgstr "Favicon"
 msgid "PWA-Icon"
 msgstr "PWA-Icon"
 
-#: aleksis/core/preferences.py:122
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 msgid "Mail out name"
 msgstr "Ausgangsmailname"
 
-#: aleksis/core/preferences.py:133
+#: aleksis/core/preferences.py:144
 msgid "Mail out address"
 msgstr "E-Mail-Ausgangsadresse"
 
-#: aleksis/core/preferences.py:146
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr "Link zur Datenschutzerklärung"
 
-#: aleksis/core/preferences.py:158
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr "Link zum Impressum"
 
-#: aleksis/core/preferences.py:169
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr "Namensformat für Anreden"
 
-#: aleksis/core/preferences.py:186
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr "Aktivierte Benachrichtungskanäle"
 
-#: aleksis/core/preferences.py:198
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr "Regulärer Ausdruck um Primärgruppen zu finden, z. B.  '^Class .*'"
 
-#: aleksis/core/preferences.py:209
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr "Feld um Primärgruppen zu finden"
 
-#: aleksis/core/preferences.py:221
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr "Erstelle automatisch neue Personen für neue Benutzer"
 
-#: aleksis/core/preferences.py:230
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr "Verknüpfe existierende Personen automatisch mit neuen Personen anhand ihrer E-Mail-Adresse"
 
-#: aleksis/core/preferences.py:241
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr "Sichtbarer Name der Schule"
 
-#: aleksis/core/preferences.py:252
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr "Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist"
 
-#: aleksis/core/preferences.py:260
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr "Erlaube Benutzern, ihr Passwort zu ändern"
 
-#: aleksis/core/preferences.py:268
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr "Registrierung aktivieren"
 
-#: aleksis/core/preferences.py:276
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr "Einladungen aktivieren"
 
-#: aleksis/core/preferences.py:284
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr "Länge des Einladungscodes. (Standard: 3: abcde-acbde-abcde)"
 
-#: aleksis/core/preferences.py:292
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr "Größe der Pakete. (Standard 5: abcde)"
 
-#: aleksis/core/preferences.py:303
+#: aleksis/core/preferences.py:314
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Erlaubte Grant Flows für OAuth-Anwendungen"
 
-#: aleksis/core/preferences.py:317
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr "Verfügbare Sprachen"
 
-#: aleksis/core/preferences.py:330
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr "E-Mails versenden, wenn Datenprüfungen Probleme finden"
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr "E-Mailempfänger für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr "E-Mail-Empfängergruppen für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:361
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr "Zeige Dashboard für Benutzer ohne Login"
 
-#: aleksis/core/preferences.py:370
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten"
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:392
 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:396
+#: aleksis/core/preferences.py:407
 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:410
+#: aleksis/core/preferences.py:421
 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:421
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr "PDF-Datei-Ablaufdauer"
 
-#: aleksis/core/preferences.py:422
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr "in Minuten"
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr "Automatisch das Dashboard und seine Widgets aktualisieren"
 
-#: aleksis/core/preferences.py:442
+#: aleksis/core/preferences.py:453
 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:452
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr "Land für das Einlesen von Telefonnummern"
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr "Englisch"
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr "Deutsch"
 
@@ -1561,7 +1564,7 @@ msgstr "Impressum"
 msgid "Privacy Policy"
 msgstr "Datenschutzerklärung"
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr "Betrieben mit AlekSIS®"
 
@@ -3223,177 +3226,177 @@ msgstr "E-Mail"
 msgid "SMS"
 msgstr "SMS"
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr "Fortschritt: PDF-Datei generieren"
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr "PDF-Datei wird generiert …"
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr "Die PDF-Datei wurde erfolgreich generiert."
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr "PDF herunterladen"
 
-#: aleksis/core/views.py:284
+#: aleksis/core/views.py:285
 msgid "The school term has been created."
 msgstr "Das Schuljahr wurde erstellt."
 
-#: aleksis/core/views.py:296
+#: aleksis/core/views.py:297
 msgid "The school term has been saved."
 msgstr "Das Schuljahr wurde gespeichert."
 
-#: aleksis/core/views.py:413
+#: aleksis/core/views.py:414
 msgid "The child groups were successfully saved."
 msgstr "Die Untergruppen wurden gespeichert."
 
-#: aleksis/core/views.py:432 aleksis/core/views.py:442
+#: aleksis/core/views.py:433 aleksis/core/views.py:443
 msgid "The person has been saved."
 msgstr "Die Person wurde gespeichert."
 
-#: aleksis/core/views.py:492
+#: aleksis/core/views.py:493
 msgid "The group has been saved."
 msgstr "Die Gruppe wurde gespeichert."
 
-#: aleksis/core/views.py:589
+#: aleksis/core/views.py:590
 msgid "The announcement has been saved."
 msgstr "Die Ankündigung wurde gespeichert."
 
-#: aleksis/core/views.py:605
+#: aleksis/core/views.py:606
 msgid "The announcement has been deleted."
 msgstr "Ankündigung wurde gelöscht."
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:674
 msgid "The requested preference registry does not exist"
 msgstr "Das angeforderte Einstellungsregister existiert nicht"
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:693
 msgid "The preferences have been saved successfully."
 msgstr "Die Einstellungen wurde gespeichert."
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:717
 msgid "The person has been deleted."
 msgstr "Die Person wurde gelöscht."
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:731
 msgid "The group has been deleted."
 msgstr "Die Gruppe wurde gelöscht."
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:763
 msgid "The additional_field has been saved."
 msgstr "Das zusätzliche Feld wurde gespeichert."
 
-#: aleksis/core/views.py:796
+#: aleksis/core/views.py:797
 msgid "The additional field has been deleted."
 msgstr "Das zusätzliche Feld wurde gelöscht."
 
-#: aleksis/core/views.py:821
+#: aleksis/core/views.py:822
 msgid "The group type has been saved."
 msgstr "Der Gruppentyp wurde gespeichert."
 
-#: aleksis/core/views.py:851
+#: aleksis/core/views.py:852
 msgid "The group type has been deleted."
 msgstr "Der Gruppentyp wurde gelöscht."
 
-#: aleksis/core/views.py:884
+#: aleksis/core/views.py:885
 msgid "Progress: Run data checks"
 msgstr "Fortschritt: Datenprüfungen ausführen"
 
-#: aleksis/core/views.py:885
+#: aleksis/core/views.py:886
 msgid "Run data checks …"
 msgstr "Datenprüfungen laufen …"
 
-#: aleksis/core/views.py:886
+#: aleksis/core/views.py:887
 msgid "The data checks were run successfully."
 msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
 
-#: aleksis/core/views.py:887
+#: aleksis/core/views.py:888
 msgid "There was a problem while running data checks."
 msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
 
-#: aleksis/core/views.py:903
+#: aleksis/core/views.py:904
 #, 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:913
+#: aleksis/core/views.py:914
 msgid "The requested solve option does not exist"
 msgstr "Die angeforderte Lösungsoption existiert nicht"
 
-#: aleksis/core/views.py:945
+#: aleksis/core/views.py:946
 msgid "The dashboard widget has been saved."
 msgstr "Das Dashboard-Widget wurde gespeichert."
 
-#: aleksis/core/views.py:975
+#: aleksis/core/views.py:976
 msgid "The dashboard widget has been created."
 msgstr "Das Dashboard-Widget wurde erstellt."
 
-#: aleksis/core/views.py:985
+#: aleksis/core/views.py:986
 msgid "The dashboard widget has been deleted."
 msgstr "Das Dashboard-Widget wurde gelöscht."
 
-#: aleksis/core/views.py:1056
+#: aleksis/core/views.py:1057
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1058
+#: aleksis/core/views.py:1059
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1128
+#: aleksis/core/views.py:1129
 #, 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:1219
+#: aleksis/core/views.py:1220
 msgid "We have successfully assigned the permissions."
 msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1230
 msgid "The global user permission has been deleted."
 msgstr "Die globale Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1240
 msgid "The global group permission has been deleted."
 msgstr "Die globale Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1250
 msgid "The object user permission has been deleted."
 msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1260
 msgid "The object group permission has been deleted."
 msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1327
+#: aleksis/core/views.py:1328
 msgid "The requested PDF file does not exist"
 msgstr "Die angeforderte PDF-Datei existiert nicht"
 
-#: aleksis/core/views.py:1336 aleksis/core/views.py:1340
+#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
 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:1378
+#: aleksis/core/views.py:1379
 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:1385
+#: aleksis/core/views.py:1386
 msgid "The third-party account has been successfully disconnected."
 msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
 
-#: aleksis/core/views.py:1444
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr "Person wurde erfolgreich eingeladen."
 
-#: aleksis/core/views.py:1446
+#: aleksis/core/views.py:1447
 msgid "Person was already invited."
 msgstr "Person wurde bereits eingeladen."
 
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
index f408d36477e025333a264786ae5122993426604a..8ff775a37b0165883f3c2b0f3ff393c1478fd510 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,18 +18,18 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Weblate 4.8\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr "Heute"
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr "OK"
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 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 eed24941dfdaf06338ec18052826aae3605eb234..f6af991023e49cc6e460b705e34b730af558f233 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,55 +18,55 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 4.4\n"
 
-#: aleksis/core/apps.py:154
+#: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
 msgstr ""
 
-#: aleksis/core/apps.py:155
+#: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr ""
 
-#: aleksis/core/apps.py:156
+#: aleksis/core/apps.py:168
 msgid "Full home postal address"
 msgstr ""
 
-#: aleksis/core/apps.py:157
+#: aleksis/core/apps.py:169
 #, fuzzy
 #| msgid "Contact details"
 msgid "Email address"
 msgstr "Détails de contact"
 
-#: aleksis/core/apps.py:158
+#: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:159 aleksis/core/forms.py:223 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:242
+#: aleksis/core/templates/core/person/full.html:250
 #, fuzzy
 #| msgid "Group"
 msgid "Groups"
 msgstr "Groupe"
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
@@ -97,15 +97,15 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr "groupe"
 
-#: aleksis/core/forms.py:48 aleksis/core/forms.py:559
+#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
 msgid "Base data"
 msgstr ""
 
@@ -113,7 +113,7 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:54 aleksis/core/forms.py:568
+#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
 #, fuzzy
 #| msgid "Contact details"
 msgid "Contact data"
@@ -133,25 +133,25 @@ msgstr ""
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:135
+#: aleksis/core/forms.py:130
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:139
+#: aleksis/core/forms.py:134
 msgid "This username is already in use."
 msgstr "Cet nom est deja en utilisation."
 
-#: aleksis/core/forms.py:156 aleksis/core/models.py:130
+#: aleksis/core/forms.py:151 aleksis/core/models.py:130
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:157
+#: aleksis/core/forms.py:152
 #, fuzzy
 #| msgid "Contact details"
 msgid "Common data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:158 aleksis/core/forms.py:210
+#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
 #: aleksis/core/menus.py:254 aleksis/core/models.py:153
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
@@ -160,102 +160,102 @@ msgstr "Détails de contact"
 msgid "Persons"
 msgstr "Personne"
 
-#: aleksis/core/forms.py:159 aleksis/core/forms.py:570
+#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:160 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/forms.py:155 aleksis/core/models.py:206
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:202 aleksis/core/forms.py:205
+#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
 #: aleksis/core/models.py:73
 msgid "Date"
 msgstr "Date"
 
-#: aleksis/core/forms.py:203 aleksis/core/forms.py:206
+#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
 #: aleksis/core/models.py:81
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:236
+#: aleksis/core/forms.py:231
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:239
+#: aleksis/core/forms.py:234
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:240
+#: aleksis/core/forms.py:235
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:279
+#: aleksis/core/forms.py:274
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:283
+#: aleksis/core/forms.py:278
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:292
+#: aleksis/core/forms.py:287
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:401
+#: aleksis/core/forms.py:396
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:402
+#: aleksis/core/forms.py:397
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:434
+#: aleksis/core/forms.py:429
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:435
+#: aleksis/core/forms.py:430
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:461
+#: aleksis/core/forms.py:456
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:464
+#: aleksis/core/forms.py:459
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:472
+#: aleksis/core/forms.py:467
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:477
+#: aleksis/core/forms.py:472
 msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
-#: aleksis/core/forms.py:564
+#: aleksis/core/forms.py:559
 msgid "Adress data"
 msgstr ""
 
-#: aleksis/core/forms.py:576
+#: aleksis/core/forms.py:571
 #, fuzzy
 #| msgid "Contact details"
 msgid "Account data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:583
+#: aleksis/core/forms.py:578
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:586
+#: aleksis/core/forms.py:581
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:752
+#: aleksis/core/forms.py:747
 msgid "No valid selection."
 msgstr ""
 
@@ -263,22 +263,20 @@ msgstr ""
 msgid "There are unresolved data problems."
 msgstr ""
 
-#: aleksis/core/health_checks.py:44
-#, python-brace-format
-msgid "Last backup {time_gone_since_backup}!"
+#: aleksis/core/health_checks.py:40
+msgid "Error accessing backup storage: {}"
 msgstr ""
 
-#: aleksis/core/health_checks.py:46
-msgid "No backup found!"
+#: aleksis/core/health_checks.py:50
+msgid "Last backup {}!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:73
-msgid "No backup result found!"
+#: aleksis/core/health_checks.py:52
+msgid "No backup found!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:75
-#, python-brace-format
-msgid "{task.status} - {task.result}"
+#: aleksis/core/health_checks.py:79
+msgid "No backup result found!"
 msgstr ""
 
 #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
@@ -300,7 +298,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -358,7 +356,7 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -416,7 +414,7 @@ msgstr ""
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1075
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -428,7 +426,7 @@ msgstr "Groupe"
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
@@ -490,7 +488,7 @@ msgstr ""
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1044
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr ""
 
@@ -512,7 +510,7 @@ msgstr ""
 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:993
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr "Personne"
 
@@ -560,7 +558,7 @@ msgstr ""
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1238
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr ""
 
@@ -576,7 +574,7 @@ msgstr "Nom de famille"
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
@@ -598,11 +596,11 @@ msgstr ""
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
 msgid "Mobile phone"
 msgstr ""
 
@@ -620,19 +618,19 @@ msgstr "Date d'anniversaire"
 msgid "Sex"
 msgstr "Sexe"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:231
+#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
 msgid "Guardians / Parents"
 msgstr ""
 
@@ -640,380 +638,386 @@ msgstr ""
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1068
+#: 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
 msgid "Description"
 msgstr "Description"
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view statistics about group."
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Nom de famille"
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1045
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:894
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:916
+#: aleksis/core/models.py:896
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:919
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:920
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:969
+#: aleksis/core/models.py:949
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:950
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:971
+#: aleksis/core/models.py:951
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:977
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:958
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:970
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:991
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:992
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1031
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1046 aleksis/core/models.py:1285
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1053
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1067
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1074 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1088
+#: aleksis/core/models.py:1068
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view system status"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1089
+#: aleksis/core/models.py:1069
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1090
+#: aleksis/core/models.py:1070
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can impersonate"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1092
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1094
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1095
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1076
+#, fuzzy
+#| msgid "Contact details"
+msgid "Can invite persons"
+msgstr "Détails de contact"
+
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1121
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1153
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1154
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1157
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1145
 #, fuzzy
 #| msgid "Contact details"
 msgid "E-Mail address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1188
+#: aleksis/core/models.py:1169
 #, fuzzy
 #| msgid "Owners"
 msgid "Owner"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1196
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1204
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1212
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1224
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1241
+#: aleksis/core/models.py:1222
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional attributes"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1279
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1289
+#: aleksis/core/models.py:1270
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1051,7 +1055,7 @@ msgstr ""
 msgid "Internationalisation"
 msgstr ""
 
-#: aleksis/core/preferences.py:44
+#: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
 
@@ -1061,11 +1065,11 @@ msgstr ""
 msgid "Site description"
 msgstr "Description"
 
-#: aleksis/core/preferences.py:66
+#: aleksis/core/preferences.py:65
 msgid "Primary colour"
 msgstr ""
 
-#: aleksis/core/preferences.py:78
+#: aleksis/core/preferences.py:77
 msgid "Secondary colour"
 msgstr ""
 
@@ -1073,151 +1077,155 @@ msgstr ""
 msgid "Logo"
 msgstr ""
 
-#: aleksis/core/preferences.py:99
+#: aleksis/core/preferences.py:100
 msgid "Favicon"
 msgstr ""
 
-#: aleksis/core/preferences.py:109
+#: aleksis/core/preferences.py:111
 msgid "PWA-Icon"
 msgstr ""
 
-#: aleksis/core/preferences.py:120
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 #, fuzzy
 #| msgid "Last name"
 msgid "Mail out name"
 msgstr "Nom de famille"
 
-#: aleksis/core/preferences.py:131
+#: aleksis/core/preferences.py:144
 msgid "Mail out address"
 msgstr ""
 
-#: aleksis/core/preferences.py:143
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr ""
 
-#: aleksis/core/preferences.py:155
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr ""
 
-#: aleksis/core/preferences.py:167
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr ""
 
-#: aleksis/core/preferences.py:183
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr ""
 
-#: aleksis/core/preferences.py:195
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr ""
 
-#: aleksis/core/preferences.py:206
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr ""
 
-#: aleksis/core/preferences.py:218
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr ""
 
-#: aleksis/core/preferences.py:227
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
-#: aleksis/core/preferences.py:238
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr ""
 
-#: aleksis/core/preferences.py:249
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr ""
 
-#: aleksis/core/preferences.py:257
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr ""
 
-#: aleksis/core/preferences.py:265
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr ""
 
-#: aleksis/core/preferences.py:273
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr ""
 
-#: aleksis/core/preferences.py:281
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:289
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:300
+#: aleksis/core/preferences.py:314
 #, fuzzy
 #| msgid "Contact details"
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Détails de contact"
 
-#: aleksis/core/preferences.py:313
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:325
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:336
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:347
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:356
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:365
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:376
+#: aleksis/core/preferences.py:392
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:390
+#: aleksis/core/preferences.py:407
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:403
+#: aleksis/core/preferences.py:421
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:413
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:414
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:424
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:434
+#: aleksis/core/preferences.py:453
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:444
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr ""
 
@@ -1564,7 +1572,7 @@ msgstr ""
 msgid "Privacy Policy"
 msgstr ""
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr ""
 
@@ -2209,19 +2217,11 @@ msgstr ""
 msgid "Contact details"
 msgstr "Détails de contact"
 
-#: aleksis/core/templates/core/person/full.html:168
-msgid "home number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:174
-msgid "mobile number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:216
+#: aleksis/core/templates/core/person/full.html:224
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:232
 msgid "Children"
 msgstr ""
 
@@ -3035,23 +3035,23 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr ""
 
@@ -3201,11 +3201,11 @@ msgstr ""
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1445
+#: aleksis/core/views.py:1447
 #, 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 bc7dfc0233fb5fa726011468c71c4f4b782ac71d..bcaf32c82d64028ea3c98b6a83b591efd6c44e9b 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,18 +18,18 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 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 4f1582caa962701748b4076076a616abcf2a3889..42102a24126b6d5d152efc1b08140f00b93a45f5 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -18,59 +18,59 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Weblate 4.3.2\n"
 
-#: aleksis/core/apps.py:154
+#: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
 msgstr ""
 
-#: aleksis/core/apps.py:155
+#: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr ""
 
-#: aleksis/core/apps.py:156
+#: aleksis/core/apps.py:168
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Full home postal address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/apps.py:157
+#: aleksis/core/apps.py:169
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Email address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/apps.py:158
+#: aleksis/core/apps.py:170
 #, fuzzy
 #| msgid "Mobile phone"
 msgid "Home and mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/apps.py:159 aleksis/core/forms.py:223 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:242
+#: aleksis/core/templates/core/person/full.html:250
 msgid "Groups"
 msgstr "Greges"
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Deactivate DashboardWidget"
 msgstr "Forum"
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
@@ -101,15 +101,15 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr "Grex"
 
-#: aleksis/core/forms.py:48 aleksis/core/forms.py:559
+#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
 msgid "Base data"
 msgstr ""
 
@@ -119,7 +119,7 @@ msgstr ""
 msgid "Address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/forms.py:54 aleksis/core/forms.py:568
+#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
 msgid "Contact data"
 msgstr ""
 
@@ -137,131 +137,131 @@ msgstr ""
 msgid "Create a new account"
 msgstr "Personae et computi"
 
-#: aleksis/core/forms.py:135
+#: aleksis/core/forms.py:130
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:139
+#: aleksis/core/forms.py:134
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/models.py:130
+#: aleksis/core/forms.py:151 aleksis/core/models.py:130
 msgid "School term"
 msgstr "Anus scolae"
 
-#: aleksis/core/forms.py:157
+#: aleksis/core/forms.py:152
 #, fuzzy
 #| msgid "Data management"
 msgid "Common data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/forms.py:158 aleksis/core/forms.py:210
+#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
 #: aleksis/core/menus.py:254 aleksis/core/models.py:153
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "personae"
 
-#: aleksis/core/forms.py:159 aleksis/core/forms.py:570
+#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional data"
 msgstr "addita nomines"
 
-#: aleksis/core/forms.py:160 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/forms.py:155 aleksis/core/models.py:206
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr "Photographia"
 
-#: aleksis/core/forms.py:202 aleksis/core/forms.py:205
+#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
 #: aleksis/core/models.py:73
 msgid "Date"
 msgstr "dies"
 
-#: aleksis/core/forms.py:203 aleksis/core/forms.py:206
+#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
 #: aleksis/core/models.py:81
 msgid "Time"
 msgstr "tempus"
 
-#: aleksis/core/forms.py:236
+#: aleksis/core/forms.py:231
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:239
+#: aleksis/core/forms.py:234
 msgid "Who should see the announcement?"
 msgstr "Quis nuntium videatne?"
 
-#: aleksis/core/forms.py:240
+#: aleksis/core/forms.py:235
 msgid "Write your announcement:"
 msgstr "Scribe nuntium:"
 
-#: aleksis/core/forms.py:279
+#: aleksis/core/forms.py:274
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:283
+#: aleksis/core/forms.py:278
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:292
+#: aleksis/core/forms.py:287
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:401
+#: aleksis/core/forms.py:396
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:402
+#: aleksis/core/forms.py:397
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:434
+#: aleksis/core/forms.py:429
 #, fuzzy
 #| msgid "Who should see the announcement?"
 msgid "Who should get the permission?"
 msgstr "Quis nuntium videatne?"
 
-#: aleksis/core/forms.py:435
+#: aleksis/core/forms.py:430
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:461
+#: aleksis/core/forms.py:456
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:464
+#: aleksis/core/forms.py:459
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:472
+#: aleksis/core/forms.py:467
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:477
+#: aleksis/core/forms.py:472
 msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
-#: aleksis/core/forms.py:564
+#: aleksis/core/forms.py:559
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Adress data"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/forms.py:576
+#: aleksis/core/forms.py:571
 #, fuzzy
 #| msgid "Data management"
 msgid "Account data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/forms.py:583
+#: aleksis/core/forms.py:578
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:586
+#: aleksis/core/forms.py:581
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:752
+#: aleksis/core/forms.py:747
 msgid "No valid selection."
 msgstr ""
 
@@ -271,22 +271,20 @@ msgstr ""
 msgid "There are unresolved data problems."
 msgstr "Scribe nuntium:"
 
-#: aleksis/core/health_checks.py:44
-#, python-brace-format
-msgid "Last backup {time_gone_since_backup}!"
+#: aleksis/core/health_checks.py:40
+msgid "Error accessing backup storage: {}"
 msgstr ""
 
-#: aleksis/core/health_checks.py:46
-msgid "No backup found!"
+#: aleksis/core/health_checks.py:50
+msgid "Last backup {}!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:73
-msgid "No backup result found!"
+#: aleksis/core/health_checks.py:52
+msgid "No backup found!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:75
-#, python-brace-format
-msgid "{task.status} - {task.result}"
+#: aleksis/core/health_checks.py:79
+msgid "No backup result found!"
 msgstr ""
 
 #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
@@ -310,7 +308,7 @@ msgstr "Muta informationes scolae"
 msgid "Dashboard"
 msgstr "Forum"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -372,7 +370,7 @@ msgstr "Nuntii"
 msgid "Admin"
 msgstr "Administratio"
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -438,7 +436,7 @@ msgstr "Nuntii"
 msgid "People"
 msgstr "Personae"
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1075
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -450,7 +448,7 @@ msgstr "Greges"
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 #, fuzzy
@@ -518,7 +516,7 @@ msgstr ""
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1044
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr "Nomen"
 
@@ -538,7 +536,7 @@ msgstr ""
 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:993
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr "Persona"
 
@@ -586,7 +584,7 @@ msgstr "femininum"
 msgid "male"
 msgstr "maskulinum"
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1238
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr ""
 
@@ -602,7 +600,7 @@ msgstr "Secondus nomen"
 msgid "Additional name(s)"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 msgid "Short name"
 msgstr "Breve nomen"
 
@@ -622,11 +620,11 @@ msgstr "Numerus directorius"
 msgid "Place"
 msgstr "Urbs"
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
 msgid "Home phone"
 msgstr "Numerus telephoni domi"
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
 msgid "Mobile phone"
 msgstr "Numerus telephoni mobilis"
 
@@ -644,19 +642,19 @@ msgstr "Dies natalis"
 msgid "Sex"
 msgstr "Genus"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:231
+#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
 msgid "Guardians / Parents"
 msgstr "Parentes"
 
@@ -664,412 +662,418 @@ msgstr "Parentes"
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1068
+#: 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
 msgid "Description"
 msgstr "Descriptio"
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional field for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional fields for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view statistics about group."
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titulus"
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr "Mittens"
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1045
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipient"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipients"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:894
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget Title"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:916
+#: aleksis/core/models.py:896
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget is broken"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:919
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:920
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:969
+#: aleksis/core/models.py:949
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Can edit default dashboard"
 msgstr "Forum"
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:950
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:971
+#: aleksis/core/models.py:951
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widgets"
 msgstr "Forum"
 
-#: aleksis/core/models.py:977
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:958
 #, fuzzy
 #| msgid "Icon"
 msgid "Icon URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:970
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:991
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget order"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:992
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget orders"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1031
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1046 aleksis/core/models.py:1285
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1053
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1067
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1074 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Grex"
 
-#: aleksis/core/models.py:1088
+#: aleksis/core/models.py:1068
 #, fuzzy
 #| msgid "System status"
 msgid "Can view system status"
 msgstr "Status systemae"
 
-#: aleksis/core/models.py:1089
+#: aleksis/core/models.py:1069
 #, fuzzy
 #| msgid "Data management"
 msgid "Can manage data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/models.py:1090
+#: aleksis/core/models.py:1070
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can impersonate"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1092
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1094
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1095
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1076
+#, fuzzy
+#| msgid "Stop impersonation"
+msgid "Can invite persons"
+msgstr "Simulandum aliquem finire"
+
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1121
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification sent"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:1153
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1154
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1157
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1145
 #, fuzzy
 #| msgid "E-mail address"
 msgid "E-Mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1188
+#: aleksis/core/models.py:1169
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1196
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1204
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1212
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1224
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1241
+#: aleksis/core/models.py:1222
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional attributes"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1279
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1289
+#: aleksis/core/models.py:1270
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1111,7 +1115,7 @@ msgstr "Nuntii"
 msgid "Internationalisation"
 msgstr "Simulare aliquem"
 
-#: aleksis/core/preferences.py:44
+#: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr "Titulus paginae"
 
@@ -1119,11 +1123,11 @@ msgstr "Titulus paginae"
 msgid "Site description"
 msgstr "Descriptio paginae"
 
-#: aleksis/core/preferences.py:66
+#: aleksis/core/preferences.py:65
 msgid "Primary colour"
 msgstr ""
 
-#: aleksis/core/preferences.py:78
+#: aleksis/core/preferences.py:77
 msgid "Secondary colour"
 msgstr ""
 
@@ -1133,155 +1137,159 @@ msgstr ""
 msgid "Logo"
 msgstr "nomen retractare"
 
-#: aleksis/core/preferences.py:99
+#: aleksis/core/preferences.py:100
 msgid "Favicon"
 msgstr ""
 
-#: aleksis/core/preferences.py:109
+#: aleksis/core/preferences.py:111
 #, fuzzy
 #| msgid "Icon"
 msgid "PWA-Icon"
 msgstr "Nota"
 
-#: aleksis/core/preferences.py:120
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 #, fuzzy
 #| msgid "Last name"
 msgid "Mail out name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/preferences.py:131
+#: aleksis/core/preferences.py:144
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Mail out address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/preferences.py:143
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr ""
 
-#: aleksis/core/preferences.py:155
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr ""
 
-#: aleksis/core/preferences.py:167
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr ""
 
-#: aleksis/core/preferences.py:183
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr ""
 
-#: aleksis/core/preferences.py:195
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr ""
 
-#: aleksis/core/preferences.py:206
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr ""
 
-#: aleksis/core/preferences.py:218
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr ""
 
-#: aleksis/core/preferences.py:227
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
-#: aleksis/core/preferences.py:238
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr ""
 
-#: aleksis/core/preferences.py:249
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr "Officialis nomen scolae, e. g."
 
-#: aleksis/core/preferences.py:257
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr ""
 
-#: aleksis/core/preferences.py:265
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr ""
 
-#: aleksis/core/preferences.py:273
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr ""
 
-#: aleksis/core/preferences.py:281
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:289
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:300
+#: aleksis/core/preferences.py:314
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/preferences.py:313
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:325
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:336
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:347
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:356
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:365
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:376
+#: aleksis/core/preferences.py:392
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:390
+#: aleksis/core/preferences.py:407
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:403
+#: aleksis/core/preferences.py:421
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:413
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:414
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:424
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:434
+#: aleksis/core/preferences.py:453
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:444
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr "Britannicus"
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr "Germanus"
 
@@ -1648,7 +1656,7 @@ msgstr ""
 msgid "Privacy Policy"
 msgstr ""
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr ""
 
@@ -2319,23 +2327,11 @@ msgstr "Simulare aliquem"
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:168
-#, fuzzy
-#| msgid "Street number"
-msgid "home number"
-msgstr "Numerus domini"
-
-#: aleksis/core/templates/core/person/full.html:174
-#, fuzzy
-#| msgid "Mobile phone"
-msgid "mobile number"
-msgstr "Numerus telephoni mobilis"
-
-#: aleksis/core/templates/core/person/full.html:216
+#: aleksis/core/templates/core/person/full.html:224
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:232
 msgid "Children"
 msgstr ""
 
@@ -3164,23 +3160,23 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr ""
 
@@ -3332,14 +3328,24 @@ msgstr ""
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1445
+#: aleksis/core/views.py:1447
 msgid "Person was already invited."
 msgstr ""
 
+#, fuzzy
+#~| msgid "Street number"
+#~ msgid "home number"
+#~ msgstr "Numerus domini"
+
+#, fuzzy
+#~| msgid "Mobile phone"
+#~ msgid "mobile number"
+#~ msgstr "Numerus telephoni mobilis"
+
 #, fuzzy
 #~| msgid "Impersonation"
 #~ msgid "Is person active?"
diff --git a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
index db33a52583b3ad2cff7af57a8306fb4a5d4c6117..427b5fbc842fe8bbbc70d795633af5070b404ec7 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -17,18 +17,18 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 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 4580225838ec69c174f44b1fc68987b36034e3c5..249af254d7bb7b5d21874acf1a8e96798066594e 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -17,51 +17,51 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: aleksis/core/apps.py:154
+#: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
 msgstr ""
 
-#: aleksis/core/apps.py:155
+#: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr ""
 
-#: aleksis/core/apps.py:156
+#: aleksis/core/apps.py:168
 msgid "Full home postal address"
 msgstr ""
 
-#: aleksis/core/apps.py:157
+#: aleksis/core/apps.py:169
 msgid "Email address"
 msgstr ""
 
-#: aleksis/core/apps.py:158
+#: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:159 aleksis/core/forms.py:223 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:242
+#: aleksis/core/templates/core/person/full.html:250
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
@@ -90,15 +90,15 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:48 aleksis/core/forms.py:559
+#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
 msgid "Base data"
 msgstr ""
 
@@ -106,7 +106,7 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:54 aleksis/core/forms.py:568
+#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
 msgid "Contact data"
 msgstr ""
 
@@ -122,121 +122,121 @@ msgstr ""
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:135
+#: aleksis/core/forms.py:130
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:139
+#: aleksis/core/forms.py:134
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/models.py:130
+#: aleksis/core/forms.py:151 aleksis/core/models.py:130
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:157
+#: aleksis/core/forms.py:152
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/forms.py:210
+#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
 #: aleksis/core/menus.py:254 aleksis/core/models.py:153
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:159 aleksis/core/forms.py:570
+#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:160 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/forms.py:155 aleksis/core/models.py:206
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:202 aleksis/core/forms.py:205
+#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
 #: aleksis/core/models.py:73
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:203 aleksis/core/forms.py:206
+#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
 #: aleksis/core/models.py:81
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:236
+#: aleksis/core/forms.py:231
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:239
+#: aleksis/core/forms.py:234
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:240
+#: aleksis/core/forms.py:235
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:279
+#: aleksis/core/forms.py:274
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:283
+#: aleksis/core/forms.py:278
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:292
+#: aleksis/core/forms.py:287
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:401
+#: aleksis/core/forms.py:396
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:402
+#: aleksis/core/forms.py:397
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:434
+#: aleksis/core/forms.py:429
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:435
+#: aleksis/core/forms.py:430
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:461
+#: aleksis/core/forms.py:456
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:464
+#: aleksis/core/forms.py:459
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:472
+#: aleksis/core/forms.py:467
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:477
+#: aleksis/core/forms.py:472
 msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
-#: aleksis/core/forms.py:564
+#: aleksis/core/forms.py:559
 msgid "Adress data"
 msgstr ""
 
-#: aleksis/core/forms.py:576
+#: aleksis/core/forms.py:571
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:583
+#: aleksis/core/forms.py:578
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:586
+#: aleksis/core/forms.py:581
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:752
+#: aleksis/core/forms.py:747
 msgid "No valid selection."
 msgstr ""
 
@@ -244,22 +244,20 @@ msgstr ""
 msgid "There are unresolved data problems."
 msgstr ""
 
-#: aleksis/core/health_checks.py:44
-#, python-brace-format
-msgid "Last backup {time_gone_since_backup}!"
+#: aleksis/core/health_checks.py:40
+msgid "Error accessing backup storage: {}"
 msgstr ""
 
-#: aleksis/core/health_checks.py:46
-msgid "No backup found!"
+#: aleksis/core/health_checks.py:50
+msgid "Last backup {}!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:73
-msgid "No backup result found!"
+#: aleksis/core/health_checks.py:52
+msgid "No backup found!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:75
-#, python-brace-format
-msgid "{task.status} - {task.result}"
+#: aleksis/core/health_checks.py:79
+msgid "No backup result found!"
 msgstr ""
 
 #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
@@ -281,7 +279,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -339,7 +337,7 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -397,7 +395,7 @@ msgstr ""
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1075
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
@@ -407,7 +405,7 @@ msgstr ""
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
@@ -467,7 +465,7 @@ msgstr ""
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1044
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr ""
 
@@ -487,7 +485,7 @@ msgstr ""
 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:993
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr ""
 
@@ -523,7 +521,7 @@ msgstr ""
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1238
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr ""
 
@@ -539,7 +537,7 @@ msgstr ""
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 msgid "Short name"
 msgstr ""
 
@@ -559,11 +557,11 @@ msgstr ""
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
 msgid "Mobile phone"
 msgstr ""
 
@@ -579,19 +577,19 @@ msgstr ""
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:231
+#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
 msgid "Guardians / Parents"
 msgstr ""
 
@@ -599,364 +597,368 @@ msgstr ""
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1068
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1045
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:894
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:916
+#: aleksis/core/models.py:896
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:919
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:920
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:969
+#: aleksis/core/models.py:949
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:950
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:971
+#: aleksis/core/models.py:951
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:977
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:958
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:970
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:991
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:992
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1031
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1046 aleksis/core/models.py:1285
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1053
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1067
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1074 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1088
+#: aleksis/core/models.py:1068
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1089
+#: aleksis/core/models.py:1069
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1090
+#: aleksis/core/models.py:1070
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1092
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1094
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1095
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1076
+msgid "Can invite persons"
+msgstr ""
+
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1121
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1153
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1154
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1157
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1145
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1188
+#: aleksis/core/models.py:1169
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1196
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1204
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1212
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1224
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1241
+#: aleksis/core/models.py:1222
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1279
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1289
+#: aleksis/core/models.py:1270
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -992,7 +994,7 @@ msgstr ""
 msgid "Internationalisation"
 msgstr ""
 
-#: aleksis/core/preferences.py:44
+#: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
 
@@ -1000,11 +1002,11 @@ msgstr ""
 msgid "Site description"
 msgstr ""
 
-#: aleksis/core/preferences.py:66
+#: aleksis/core/preferences.py:65
 msgid "Primary colour"
 msgstr ""
 
-#: aleksis/core/preferences.py:78
+#: aleksis/core/preferences.py:77
 msgid "Secondary colour"
 msgstr ""
 
@@ -1012,147 +1014,151 @@ msgstr ""
 msgid "Logo"
 msgstr ""
 
-#: aleksis/core/preferences.py:99
+#: aleksis/core/preferences.py:100
 msgid "Favicon"
 msgstr ""
 
-#: aleksis/core/preferences.py:109
+#: aleksis/core/preferences.py:111
 msgid "PWA-Icon"
 msgstr ""
 
-#: aleksis/core/preferences.py:120
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 msgid "Mail out name"
 msgstr ""
 
-#: aleksis/core/preferences.py:131
+#: aleksis/core/preferences.py:144
 msgid "Mail out address"
 msgstr ""
 
-#: aleksis/core/preferences.py:143
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr ""
 
-#: aleksis/core/preferences.py:155
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr ""
 
-#: aleksis/core/preferences.py:167
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr ""
 
-#: aleksis/core/preferences.py:183
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr ""
 
-#: aleksis/core/preferences.py:195
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr ""
 
-#: aleksis/core/preferences.py:206
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr ""
 
-#: aleksis/core/preferences.py:218
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr ""
 
-#: aleksis/core/preferences.py:227
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
-#: aleksis/core/preferences.py:238
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr ""
 
-#: aleksis/core/preferences.py:249
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr ""
 
-#: aleksis/core/preferences.py:257
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr ""
 
-#: aleksis/core/preferences.py:265
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr ""
 
-#: aleksis/core/preferences.py:273
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr ""
 
-#: aleksis/core/preferences.py:281
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:289
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:300
+#: aleksis/core/preferences.py:314
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:313
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:325
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:336
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:347
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:356
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:365
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:376
+#: aleksis/core/preferences.py:392
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:390
+#: aleksis/core/preferences.py:407
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:403
+#: aleksis/core/preferences.py:421
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:413
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:414
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:424
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:434
+#: aleksis/core/preferences.py:453
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:444
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr ""
 
@@ -1499,7 +1505,7 @@ msgstr ""
 msgid "Privacy Policy"
 msgstr ""
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr ""
 
@@ -2126,19 +2132,11 @@ msgstr ""
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:168
-msgid "home number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:174
-msgid "mobile number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:216
+#: aleksis/core/templates/core/person/full.html:224
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:232
 msgid "Children"
 msgstr ""
 
@@ -2934,23 +2932,23 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr ""
 
@@ -3100,11 +3098,11 @@ msgstr ""
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1445
+#: aleksis/core/views.py:1447
 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 db33a52583b3ad2cff7af57a8306fb4a5d4c6117..427b5fbc842fe8bbbc70d795633af5070b404ec7 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -17,18 +17,18 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 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 f78ef84c77fa4eb24f5423ed5d4b2033998e122d..9437eabc1987ac629a51e68f29b3dcc250179441 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -17,51 +17,51 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: aleksis/core/apps.py:154
+#: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
 msgstr ""
 
-#: aleksis/core/apps.py:155
+#: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr ""
 
-#: aleksis/core/apps.py:156
+#: aleksis/core/apps.py:168
 msgid "Full home postal address"
 msgstr ""
 
-#: aleksis/core/apps.py:157
+#: aleksis/core/apps.py:169
 msgid "Email address"
 msgstr ""
 
-#: aleksis/core/apps.py:158
+#: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:159 aleksis/core/forms.py:223 aleksis/core/menus.py:265
-#: aleksis/core/models.py:449 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
+#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:242
+#: aleksis/core/templates/core/person/full.html:250
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:55
+#: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:184
+#: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:290
+#: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:302
+#: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
@@ -90,15 +90,15 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:675
+#: aleksis/core/filters.py:113 aleksis/core/models.py:688
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:448
+#: aleksis/core/filters.py:135 aleksis/core/models.py:461
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:48 aleksis/core/forms.py:559
+#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
 msgid "Base data"
 msgstr ""
 
@@ -106,7 +106,7 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:54 aleksis/core/forms.py:568
+#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
 msgid "Contact data"
 msgstr ""
 
@@ -122,121 +122,121 @@ msgstr ""
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:135
+#: aleksis/core/forms.py:130
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:139
+#: aleksis/core/forms.py:134
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/models.py:130
+#: aleksis/core/forms.py:151 aleksis/core/models.py:130
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:157
+#: aleksis/core/forms.py:152
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/forms.py:210
+#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
 #: aleksis/core/menus.py:254 aleksis/core/models.py:153
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:159 aleksis/core/forms.py:570
+#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:160 aleksis/core/models.py:206
-#: aleksis/core/models.py:501
+#: aleksis/core/forms.py:155 aleksis/core/models.py:206
+#: aleksis/core/models.py:514
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:202 aleksis/core/forms.py:205
+#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
 #: aleksis/core/models.py:73
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:203 aleksis/core/forms.py:206
+#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
 #: aleksis/core/models.py:81
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:236
+#: aleksis/core/forms.py:231
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:239
+#: aleksis/core/forms.py:234
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:240
+#: aleksis/core/forms.py:235
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:279
+#: aleksis/core/forms.py:274
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:283
+#: aleksis/core/forms.py:278
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:292
+#: aleksis/core/forms.py:287
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:401
+#: aleksis/core/forms.py:396
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:402
+#: aleksis/core/forms.py:397
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:434
+#: aleksis/core/forms.py:429
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:435
+#: aleksis/core/forms.py:430
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:461
+#: aleksis/core/forms.py:456
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:464
+#: aleksis/core/forms.py:459
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:472
+#: aleksis/core/forms.py:467
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:477
+#: aleksis/core/forms.py:472
 msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
-#: aleksis/core/forms.py:564
+#: aleksis/core/forms.py:559
 msgid "Adress data"
 msgstr ""
 
-#: aleksis/core/forms.py:576
+#: aleksis/core/forms.py:571
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:583
+#: aleksis/core/forms.py:578
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:586
+#: aleksis/core/forms.py:581
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:752
+#: aleksis/core/forms.py:747
 msgid "No valid selection."
 msgstr ""
 
@@ -244,22 +244,20 @@ msgstr ""
 msgid "There are unresolved data problems."
 msgstr ""
 
-#: aleksis/core/health_checks.py:44
-#, python-brace-format
-msgid "Last backup {time_gone_since_backup}!"
+#: aleksis/core/health_checks.py:40
+msgid "Error accessing backup storage: {}"
 msgstr ""
 
-#: aleksis/core/health_checks.py:46
-msgid "No backup found!"
+#: aleksis/core/health_checks.py:50
+msgid "Last backup {}!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:73
-msgid "No backup result found!"
+#: aleksis/core/health_checks.py:52
+msgid "No backup found!"
 msgstr ""
 
-#: aleksis/core/health_checks.py:75
-#, python-brace-format
-msgid "{task.status} - {task.result}"
+#: aleksis/core/health_checks.py:79
+msgid "No backup result found!"
 msgstr ""
 
 #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
@@ -281,7 +279,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:721
+#: aleksis/core/menus.py:41 aleksis/core/models.py:734
 #: aleksis/core/preferences.py:29
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
@@ -339,7 +337,7 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:821
+#: aleksis/core/menus.py:141 aleksis/core/models.py:834
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
@@ -397,7 +395,7 @@ msgstr ""
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1075
+#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
@@ -407,7 +405,7 @@ msgstr ""
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:497
+#: aleksis/core/menus.py:298 aleksis/core/models.py:510
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
@@ -467,7 +465,7 @@ msgstr ""
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1044
+#: aleksis/core/models.py:94 aleksis/core/models.py:1024
 msgid "Name"
 msgstr ""
 
@@ -487,7 +485,7 @@ msgstr ""
 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:993
+#: aleksis/core/models.py:152 aleksis/core/models.py:973
 msgid "Person"
 msgstr ""
 
@@ -523,7 +521,7 @@ msgstr ""
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1238
+#: aleksis/core/models.py:178 aleksis/core/models.py:1219
 msgid "Linked user"
 msgstr ""
 
@@ -539,7 +537,7 @@ msgstr ""
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:466
+#: aleksis/core/models.py:188 aleksis/core/models.py:479
 msgid "Short name"
 msgstr ""
 
@@ -559,11 +557,11 @@ msgstr ""
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
 msgid "Mobile phone"
 msgstr ""
 
@@ -579,19 +577,19 @@ msgstr ""
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:505
+#: aleksis/core/models.py:210 aleksis/core/models.py:518
 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:509
+#: aleksis/core/models.py:215 aleksis/core/models.py:522
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:512
+#: aleksis/core/models.py:218 aleksis/core/models.py:525
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:231
+#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
 msgid "Guardians / Parents"
 msgstr ""
 
@@ -599,364 +597,368 @@ msgstr ""
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:679
-#: aleksis/core/models.py:703 aleksis/core/models.py:788
-#: aleksis/core/models.py:1068
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:421
+#: aleksis/core/models.py:434
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:423
+#: aleksis/core/models.py:436
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:430
+#: aleksis/core/models.py:443
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:431
+#: aleksis/core/models.py:444
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:451
+#: aleksis/core/models.py:464
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:452
+#: aleksis/core/models.py:465
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:477
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:474 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:477 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:484 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:505
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:678 aleksis/core/models.py:702
-#: aleksis/core/models.py:787
+#: aleksis/core/models.py:691 aleksis/core/models.py:715
+#: aleksis/core/models.py:800
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:681
+#: aleksis/core/models.py:694
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:687
+#: aleksis/core/models.py:700
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:688
+#: aleksis/core/models.py:701
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:707
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:699
+#: aleksis/core/models.py:712
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:704 aleksis/core/models.py:1045
+#: aleksis/core/models.py:717 aleksis/core/models.py:1025
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:706
+#: aleksis/core/models.py:719
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:720
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:733
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:789
+#: aleksis/core/models.py:802
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:792
+#: aleksis/core/models.py:805
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:795
+#: aleksis/core/models.py:808
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:820
+#: aleksis/core/models.py:833
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:858
+#: aleksis/core/models.py:871
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:859
+#: aleksis/core/models.py:872
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:894
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:895
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:916
+#: aleksis/core/models.py:896
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:919
+#: aleksis/core/models.py:899
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:920
+#: aleksis/core/models.py:900
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:905
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:906
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:911
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:912
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:917
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:918
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:969
+#: aleksis/core/models.py:949
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:950
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:971
+#: aleksis/core/models.py:951
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:977
+#: aleksis/core/models.py:957
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:978
+#: aleksis/core/models.py:958
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:964
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:985
+#: aleksis/core/models.py:965
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:970
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:975
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:976
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:991
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:992
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:998
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1031
+#: aleksis/core/models.py:1011
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1012
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1022
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1046 aleksis/core/models.py:1285
+#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1032
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1053
+#: aleksis/core/models.py:1033
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1067
+#: aleksis/core/models.py:1047
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1074 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1088
+#: aleksis/core/models.py:1068
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1089
+#: aleksis/core/models.py:1069
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1090
+#: aleksis/core/models.py:1070
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1071
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1092
+#: aleksis/core/models.py:1072
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1073
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1094
+#: aleksis/core/models.py:1074
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1095
+#: aleksis/core/models.py:1075
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1076
+msgid "Can invite persons"
+msgstr ""
+
+#: aleksis/core/models.py:1112
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1120
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1121
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1153
+#: aleksis/core/models.py:1134
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1154
+#: aleksis/core/models.py:1135
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1137
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1157
+#: aleksis/core/models.py:1138
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1145
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1188
+#: aleksis/core/models.py:1169
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1173
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1175
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1196
+#: aleksis/core/models.py:1177
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1184
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1204
+#: aleksis/core/models.py:1185
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1209
+#: aleksis/core/models.py:1190
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1212
+#: aleksis/core/models.py:1193
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1224
+#: aleksis/core/models.py:1205
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1206
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1241
+#: aleksis/core/models.py:1222
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1279
+#: aleksis/core/models.py:1260
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1289
+#: aleksis/core/models.py:1270
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -992,7 +994,7 @@ msgstr ""
 msgid "Internationalisation"
 msgstr ""
 
-#: aleksis/core/preferences.py:44
+#: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
 
@@ -1000,11 +1002,11 @@ msgstr ""
 msgid "Site description"
 msgstr ""
 
-#: aleksis/core/preferences.py:66
+#: aleksis/core/preferences.py:65
 msgid "Primary colour"
 msgstr ""
 
-#: aleksis/core/preferences.py:78
+#: aleksis/core/preferences.py:77
 msgid "Secondary colour"
 msgstr ""
 
@@ -1012,147 +1014,151 @@ msgstr ""
 msgid "Logo"
 msgstr ""
 
-#: aleksis/core/preferences.py:99
+#: aleksis/core/preferences.py:100
 msgid "Favicon"
 msgstr ""
 
-#: aleksis/core/preferences.py:109
+#: aleksis/core/preferences.py:111
 msgid "PWA-Icon"
 msgstr ""
 
-#: aleksis/core/preferences.py:120
+#: aleksis/core/preferences.py:121
+msgid "PWA-Icon is maskable"
+msgstr ""
+
+#: aleksis/core/preferences.py:133
 msgid "Mail out name"
 msgstr ""
 
-#: aleksis/core/preferences.py:131
+#: aleksis/core/preferences.py:144
 msgid "Mail out address"
 msgstr ""
 
-#: aleksis/core/preferences.py:143
+#: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
 msgstr ""
 
-#: aleksis/core/preferences.py:155
+#: aleksis/core/preferences.py:169
 msgid "Link to imprint"
 msgstr ""
 
-#: aleksis/core/preferences.py:167
+#: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
 msgstr ""
 
-#: aleksis/core/preferences.py:183
+#: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
 msgstr ""
 
-#: aleksis/core/preferences.py:195
+#: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr ""
 
-#: aleksis/core/preferences.py:206
+#: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
 msgstr ""
 
-#: aleksis/core/preferences.py:218
+#: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
 msgstr ""
 
-#: aleksis/core/preferences.py:227
+#: aleksis/core/preferences.py:241
 msgid "Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
-#: aleksis/core/preferences.py:238
+#: aleksis/core/preferences.py:252
 msgid "Display name of the school"
 msgstr ""
 
-#: aleksis/core/preferences.py:249
+#: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
 msgstr ""
 
-#: aleksis/core/preferences.py:257
+#: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
 msgstr ""
 
-#: aleksis/core/preferences.py:265
+#: aleksis/core/preferences.py:279
 msgid "Enable signup"
 msgstr ""
 
-#: aleksis/core/preferences.py:273
+#: aleksis/core/preferences.py:287
 msgid "Enable invitations"
 msgstr ""
 
-#: aleksis/core/preferences.py:281
+#: aleksis/core/preferences.py:295
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:289
+#: aleksis/core/preferences.py:303
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:300
+#: aleksis/core/preferences.py:314
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:313
+#: aleksis/core/preferences.py:328
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:325
+#: aleksis/core/preferences.py:341
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:336
+#: aleksis/core/preferences.py:352
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:347
+#: aleksis/core/preferences.py:363
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:356
+#: aleksis/core/preferences.py:372
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:365
+#: aleksis/core/preferences.py:381
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:376
+#: aleksis/core/preferences.py:392
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:390
+#: aleksis/core/preferences.py:407
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:403
+#: aleksis/core/preferences.py:421
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:413
+#: aleksis/core/preferences.py:432
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:414
+#: aleksis/core/preferences.py:433
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:424
+#: aleksis/core/preferences.py:443
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:434
+#: aleksis/core/preferences.py:453
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:444
+#: aleksis/core/preferences.py:463
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:518
+#: aleksis/core/settings.py:526
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:519
+#: aleksis/core/settings.py:527
 msgid "German"
 msgstr ""
 
@@ -1499,7 +1505,7 @@ msgstr ""
 msgid "Privacy Policy"
 msgstr ""
 
-#: aleksis/core/templates/core/base_print.html:72
+#: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr ""
 
@@ -2126,19 +2132,11 @@ msgstr ""
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:168
-msgid "home number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:174
-msgid "mobile number"
-msgstr ""
-
-#: aleksis/core/templates/core/person/full.html:216
+#: aleksis/core/templates/core/person/full.html:224
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:232
 msgid "Children"
 msgstr ""
 
@@ -2934,23 +2932,23 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:113
+#: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:114
+#: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/core/util/pdf.py:115
+#: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:116
+#: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/core/util/pdf.py:119
+#: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
 msgstr ""
 
@@ -3100,10 +3098,10 @@ msgstr ""
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1445
 msgid "Person was invited successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1445
+#: aleksis/core/views.py:1447
 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 db33a52583b3ad2cff7af57a8306fb4a5d4c6117..427b5fbc842fe8bbbc70d795633af5070b404ec7 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-01-10 17:26+0100\n"
+"POT-Creation-Date: 2022-01-31 17:03+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"
@@ -17,18 +17,18 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: aleksis/core/static/js/main.js:15
+#: aleksis/core/static/js/main.js:66
 msgid "Today"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:16
+#: aleksis/core/static/js/main.js:67
 msgid "Cancel"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:17
+#: aleksis/core/static/js/main.js:68
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:131
+#: aleksis/core/static/js/main.js:191
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""