diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
index 3f7ac4543d1affb8daf256f4661f36cad4169742..fab84d7b72e4d3e4f82be558a89fa199924710cf 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
@@ -8,9 +8,10 @@ msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-05-21 19:54+0200\n"
-"PO-Revision-Date: 2021-05-21 15:58+0000\n"
+"PO-Revision-Date: 2021-05-21 18:38+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
-"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis/de/>\n"
+"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis/"
+"de/>\n"
 "Language: de_DE\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -148,31 +149,31 @@ msgid "You need at least one recipient."
 msgstr "Sie benötigen mindestens einen Empfänger."
 
 #: aleksis/core/forms.py:414
-#, fuzzy
-#| msgid "Account"
 msgid "Account data"
-msgstr "Konto"
+msgstr "Kontodaten"
 
 #: aleksis/core/forms.py:416
 msgid "Consents"
-msgstr ""
+msgstr "Zustimmungen"
 
 #: aleksis/core/forms.py:421
 msgid "Password"
-msgstr ""
+msgstr "Passwort"
 
 #: aleksis/core/forms.py:427
 msgid "Password (again)"
-msgstr ""
+msgstr "Passwort wiederholen"
 
 #: aleksis/core/forms.py:436
 #, python-brace-format
 msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them."
 msgstr ""
+"Ich habe die <a href='{privacy_policy}'>Datenschutzerklärung</a> gelesen und "
+"stimme ihr zu."
 
 #: aleksis/core/forms.py:460
 msgid "You must type the same password each time."
-msgstr ""
+msgstr "Sie müssen zweimal das gleiche Passwort eingeben."
 
 #: aleksis/core/forms.py:605
 msgid "No valid selection."
@@ -213,7 +214,7 @@ msgstr "Anmelden"
 #: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
-msgstr ""
+msgstr "Registrieren"
 
 #: aleksis/core/menus.py:24
 msgid "Dashboard"
@@ -251,7 +252,7 @@ msgstr "2FA"
 #: aleksis/core/templates/account/password_reset_from_key_done.html:5
 #: aleksis/core/templates/account/password_reset_from_key_done.html:6
 msgid "Change password"
-msgstr ""
+msgstr "Passwort ändern"
 
 #: aleksis/core/menus.py:79
 msgid "Me"
@@ -263,10 +264,8 @@ msgid "Preferences"
 msgstr "Einstellungen"
 
 #: aleksis/core/menus.py:97
-#, fuzzy
-#| msgid "Persons and accounts"
 msgid "Social accounts"
-msgstr "Personen und Konten"
+msgstr "Soziale Konten"
 
 #: aleksis/core/menus.py:106
 msgid "Authorized tokens"
@@ -985,14 +984,12 @@ 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:220
-#, fuzzy
-#| msgid "Allow users to edit their dashboard"
 msgid "Allow users to change their passwords"
-msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten"
+msgstr "Erlaube Benutzern, ihr Passwort zu ändern"
 
 #: aleksis/core/preferences.py:228
 msgid "Enable signup"
-msgstr ""
+msgstr "Registrierung aktivieren"
 
 #: aleksis/core/preferences.py:237
 msgid "Available languages"
@@ -1157,23 +1154,14 @@ msgstr ""
 
 #: aleksis/core/templates/account/account_inactive.html:5
 #: aleksis/core/templates/account/account_inactive.html:6
-#, fuzzy
-#| msgid "Account Security"
 msgid "Account inactive"
-msgstr "Kontosicherheit"
+msgstr "Konto inaktiv"
 
 #: aleksis/core/templates/account/account_inactive.html:13
-#, fuzzy
-#| msgid "Account Security"
 msgid "Account inactive."
-msgstr "Kontosicherheit"
+msgstr "Konto inaktiv."
 
 #: aleksis/core/templates/account/account_inactive.html:15
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            This page is currently unavailable. If this error persists, contact your site administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "            This account is currently inactive. If you think this is an\n"
@@ -1181,14 +1169,13 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Diese Seite ist aktuell nicht erreichbar. Wenn dieser Fehler bestehen bleibt, kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
+"            Dieses Konto ist aktuell inaktiv. Wenn Sie denken,\n"
+"dass dies ein Fehler ist, kontaktieren Sie einen der Administratoren:\n"
 "          "
 
 #: aleksis/core/templates/account/email/base_message.txt:5
-#, fuzzy
-#| msgid "Hello,"
 msgid "Hello!"
-msgstr "Hallo,"
+msgstr "Hallo!"
 
 #: aleksis/core/templates/account/email/base_message.txt:9
 #: aleksis/core/templates/templated_email/notification.email:22
@@ -1199,45 +1186,43 @@ msgstr "Ihr AlekSIS-Team"
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
-#, fuzzy
-#| msgid "Configuration"
 msgid "Confirm"
-msgstr "Konfiguration"
+msgstr "Bestätigen"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
 msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
 msgstr ""
+"Bitte bestätigen Sie, dass <a href=\"mailto:%(email)s\">%(email)s</a> eine E"
+"-Mail-Adresse für den Benutzer %(user_display)s ist."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
 msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
 msgstr ""
+"Dieser E-Mail-Bestätigungslink ist abgelaufen oder nicht gültig. Bitte <a "
+"href=\"%(email_url)s\">fragen Sie eine neue E-Mail-Bestätigung an</a>."
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot your current password? Click here to reset it:"
 msgstr ""
+"Haben Sie Ihr aktuelles Passwort vergessen? Klicken Sie hier, um es "
+"zurückzusetzen:"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot Password?"
-msgstr ""
+msgstr "Passwort vergessen?"
 
 #: aleksis/core/templates/account/password_change_disabled.html:5
 #: aleksis/core/templates/account/password_change_disabled.html:6
 msgid "Changing of password disabled"
-msgstr ""
+msgstr "Passwortänderung deaktiviert"
 
 #: aleksis/core/templates/account/password_change_disabled.html:13
 msgid "Changing of password disabled."
-msgstr ""
+msgstr "Passwortänderung deaktiviert."
 
 #: aleksis/core/templates/account/password_change_disabled.html:15
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            If you think this is an error in AlekSIS, please contact your site\n"
-#| "            administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
@@ -1245,8 +1230,9 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
-"     Systemadministratoren:\n"
+"            Benutzer dürfen ihre eigenen Passwörter nicht ändern. Wenn Sie "
+"denken, \n"
+"dass dies ein Fehler ist, kontaktieren Sie bitte einen der Administratoren:\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset.html:5
@@ -1257,30 +1243,28 @@ msgstr ""
 #: aleksis/core/templates/account/verification_email_required.html:6
 #: aleksis/core/templates/two_factor/core/login.html:100
 msgid "Reset password"
-msgstr ""
+msgstr "Passwort zurücksetzen"
 
 #: aleksis/core/templates/account/password_reset.html:17
 msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
 msgstr ""
+"Passwort vergessen? Geben Sie Ihre E-Mail-Adresse hier ein und wir werden "
+"Ihnen eine E-Mail zum Zurücksetzen des Passwortes schicken."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
 "Please contact one of your site administrators, if you\n"
 "        have any trouble resetting your password:"
 msgstr ""
+"Bitte kontaktieren Sie einen der Administratoren, \n"
+"wenn Sie irgendwelche Probleme beim Zurücksetzen des Passwortes haben:"
 
 #: aleksis/core/templates/account/password_reset_done.html:15
 msgid "Password reset mail sent"
-msgstr ""
+msgstr "E-Mail zum Zurücksetzen des Passwortes versendet"
 
 #: aleksis/core/templates/account/password_reset_done.html:18
 #: aleksis/core/templates/account/verification_email_required.html:16
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            If you think this is an error in AlekSIS, please contact your site\n"
-#| "            administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "            We have sent you an e-mail. Please contact one of your site\n"
@@ -1288,15 +1272,14 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
-"     Systemadministratoren:\n"
+"            Wir haben Ihnen eine E-Mail gesendet. Bitte kontaktieren Sie "
+"einen der Administratoren,\n"
+"wenn Sie diese nicht innerhalb weniger Minuten erhalten.\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:15
-#, fuzzy
-#| msgid "Backup Tokens"
 msgid "Bad token"
-msgstr "Backup-Token"
+msgstr "Ungültiges Token"
 
 #: aleksis/core/templates/account/password_reset_from_key.html:19
 #, python-format
@@ -1306,14 +1289,14 @@ msgid ""
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
+"\n"
+"              Der Link zum Zurücksetzen des Passwortes war falsch, "
+"wahrscheinlich, weil er bereits benutzt wurde. Bitte starten Sie eine neue "
+"Anfrage <a href=\"%(passwd_reset_url)s\"              class=\"blue-text text-"
+"lighten-2\">zum Zurücksetzen des Passwortes</a>.\n"
+"            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            If you think this is an error in AlekSIS, please contact your site\n"
-#| "            administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "              If this issue persists, please contact one of your site\n"
@@ -1321,69 +1304,59 @@ msgid ""
 "            "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
-"     Systemadministratoren:\n"
-"          "
+"              Wenn dieser Fehler bestehen bleibt,\n"
+"kontaktieren Sie bitte einen der Administratoren:\n"
+"            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:56
 #: aleksis/core/templates/account/password_reset_from_key_done.html:15
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "              Updated by %(person)s\n"
-#| "            "
 msgid ""
 "\n"
 "            Your password is now changed!\n"
 "          "
 msgstr ""
 "\n"
-"              Aktualisiert von %(person)s\n"
-"            "
+"            Ihr Password wurde geändert!\n"
+"          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:61
-#, fuzzy
-#| msgid "Back to Profile"
 msgid "Back to login"
-msgstr "Zurück zum Profil"
+msgstr "Zurück zur Anmeldung"
 
 #: aleksis/core/templates/account/password_reset_from_key_done.html:13
 msgid "Password changed!"
-msgstr ""
+msgstr "Passwort geändert!"
 
 #: aleksis/core/templates/account/password_set.html:5
 #: aleksis/core/templates/account/password_set.html:6
 #: aleksis/core/templates/account/password_set.html:12
 msgid "Set password"
-msgstr ""
+msgstr "Password setzen"
 
 #: aleksis/core/templates/account/signup.html:5
 #: aleksis/core/templates/account/signup.html:6
 #: aleksis/core/templates/socialaccount/signup.html:5
 #: aleksis/core/templates/socialaccount/signup.html:6
 msgid "Signup"
-msgstr ""
+msgstr "Registrierung"
 
 #: aleksis/core/templates/account/signup.html:12
 #, python-format
 msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
 msgstr ""
+"Haben Sie bereits ein Konto? Dann <a href=\"%(login_url)s\">melden Sie sich "
+"bitte an</a>."
 
 #: aleksis/core/templates/account/signup_closed.html:5
 #: aleksis/core/templates/account/signup_closed.html:6
 msgid "Signup closed"
-msgstr ""
+msgstr "Registrierung geschlossen"
 
 #: aleksis/core/templates/account/signup_closed.html:13
 msgid "Signup closed."
-msgstr ""
+msgstr "Registrierung geschlossen."
 
 #: aleksis/core/templates/account/signup_closed.html:15
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            This page is currently unavailable. If this error persists, contact your site administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "            This sign up is currently closed. If you think this is an\n"
@@ -1391,23 +1364,23 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Diese Seite ist aktuell nicht erreichbar. Wenn dieser Fehler bestehen bleibt, kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
+"            Die Registrierung ist aktuell geschlossen. Wenn Sie denken, dass "
+"dies ein Fehler ist,\n"
+" kontaktieren Sie bitte einen Ihrer Systemadministratoren.\n"
 "          "
 
 #: aleksis/core/templates/account/verification_email_required.html:14
 msgid "Password reset mail sent!"
-msgstr ""
+msgstr "E-Mail zum Zurücksetzen des Passwortes versendet!"
 
 #: aleksis/core/templates/account/verification_sent.html:5
 #: aleksis/core/templates/account/verification_sent.html:6
-#, fuzzy
-#| msgid "E-mail address"
 msgid "Verify your email address"
-msgstr "E-Mail-Adresse"
+msgstr "Verifizieren Sie Ihre E-Mail-Adresse"
 
 #: aleksis/core/templates/account/verification_sent.html:14
 msgid "Verify your email!"
-msgstr ""
+msgstr "Verifizieren Sie Ihre E-Mail!"
 
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
@@ -1416,6 +1389,12 @@ msgid ""
 "            For this purpose, we require that you verify ownership of your e-mail address.\n"
 "          "
 msgstr ""
+"\n"
+"            Dieser Teil der Anwendung setzt voraus, dass wir verifizieren, "
+"dass Sie die Person sind, die sie vorgeben, zu sein.\n"
+"Zu diesem Zweck setzen wir voraus, dass Sie die Inhaberschaft Ihrer E-Mail-"
+"Adresse bestätigen.\n"
+"          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
 msgid ""
@@ -1425,11 +1404,19 @@ msgid ""
 "            contact us if you do not receive it within a few minutes.\n"
 "          "
 msgstr ""
+"\n"
+"            Wir haben Ihnen eine E-Mail zur Verifizierung geschickt.\n"
+"Bitte klicken Sie auf den Link in dieser E-Mail.\n"
+"Bitte kontaktieren Sie uns, wenn Sie diese nicht binnen weniger Minuten "
+"erhalten.\n"
+"          "
 
 #: aleksis/core/templates/account/verification_sent.html:30
 #, python-format
 msgid "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your e-mail address</a>"
 msgstr ""
+"<strong>Hinweis:</strong> Sie können immer noch <a href=\"%(email_url)s\"> "
+"Ihre E-Mail-Adresse ändern</a>"
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
 #: aleksis/core/templates/core/additional_field/edit.html:7
@@ -2367,19 +2354,13 @@ msgstr "Bitte geben Sie einen Suchausdruck ein."
 #: aleksis/core/templates/socialaccount/authentication_error.html:5
 #: aleksis/core/templates/socialaccount/authentication_error.html:6
 msgid "Social Network Login Failure"
-msgstr ""
+msgstr "Anmeldung über soziales Netzwerk fehlgeschlagen"
 
 #: aleksis/core/templates/socialaccount/authentication_error.html:13
 msgid "Social Network Login Failure."
-msgstr ""
+msgstr "Anmeldung über soziales Netzwerk fehlgeschlagen."
 
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            If you think this is an error in AlekSIS, please contact your site\n"
-#| "            administrators:\n"
-#| "          "
 msgid ""
 "\n"
 "            An error occurred while attempting to login via your social network account.\n"
@@ -2387,34 +2368,35 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
-"     Systemadministratoren:\n"
+"            Beim dem Versuch, die Anmeldung über Ihr soziales Netzwerk "
+"durchzuführen, ist ein Fehler aufgetreten.\n"
+"            Kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/connections.html:5
 #: aleksis/core/templates/socialaccount/connections.html:6
-#, fuzzy
-#| msgid "Actions"
 msgid "Connections"
-msgstr "Aktionen"
+msgstr "Verbindungen"
 
 #: aleksis/core/templates/socialaccount/connections.html:24
 msgid "Remove"
-msgstr ""
+msgstr "Löschen"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no social network accounts connected to this account."
 msgstr ""
+"Sie haben aktuell keine Konten von sozialen Netzwerken mit Ihrem Konto "
+"verbunden."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a 3rd Party Account"
-msgstr ""
+msgstr "Ein Drittanbieterkonto hinzufügen"
 
 #: aleksis/core/templates/socialaccount/login_cancelled.html:5
 #: aleksis/core/templates/socialaccount/login_cancelled.html:6
 #: aleksis/core/templates/socialaccount/login_cancelled.html:13
 msgid "Login cancelled"
-msgstr ""
+msgstr "Login abgebrochen"
 
 #: aleksis/core/templates/socialaccount/login_cancelled.html:15
 #, python-format
@@ -2423,6 +2405,11 @@ msgid ""
 "            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
+"\n"
+"            Sie haben sich entschieden, die Anmeldung mit einem Ihrer "
+"bestehenden Konten bei uns abzubrechen. Wenn dies ein Fehler war, <a href=\""
+"%(login_url)s\">fahren Sie bitte mit dem Login fort</a>.\n"
+"          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
 #, python-format
@@ -2430,36 +2417,31 @@ msgid ""
 "You are about to use your %(provider_name)s account to login to\n"
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
+"Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung bei %(site_name)s "
+"zu nutzen. \n"
+"Als ein letzter Schritt vervollständigen Sie bitte das folgende Formular:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
-#, fuzzy, python-format
-#| msgid ""
-#| "\n"
-#| "              Valid for %(from)s\n"
-#| "            "
+#, python-format
 msgid ""
 "\n"
 "                Login with %(name)s\n"
 "              "
 msgstr ""
 "\n"
-"              Gültig für %(from)s\n"
-"            "
+"                Anmelden mit %(name)s\n"
+"              "
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:21
-#, fuzzy, python-format
-#| msgid ""
-#| "\n"
-#| "              Valid for %(from)s\n"
-#| "            "
+#, python-format
 msgid ""
 "\n"
 "            Login with %(name)s\n"
 "          "
 msgstr ""
 "\n"
-"              Gültig für %(from)s\n"
-"            "
+"            Anmelden mit %(name)s\n"
+"          "
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:30
 msgid ""
@@ -2467,6 +2449,9 @@ msgid ""
 "          No 3rd party account providers available.\n"
 "        "
 msgstr ""
+"\n"
+"          Keine Drittanbieter verfügbar.\n"
+"        "
 
 #: aleksis/core/templates/templated_email/data_checks.email:4
 msgid "The system detected some new problems with your data."
@@ -2645,11 +2630,6 @@ msgid "Please login to see this page."
 msgstr "Bitte melden Sie sich an, um diese Seite zu sehen."
 
 #: aleksis/core/templates/two_factor/core/login.html:43
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            We are calling your phone right now, please enter the digits you hear.\n"
-#| "          "
 msgid ""
 "\n"
 "                      We are calling your phone right now, please enter the\n"
@@ -2657,15 +2637,11 @@ msgid ""
 "                    "
 msgstr ""
 "\n"
-"            Wir rufen Ihr Telefon jetzt an, bitte geben Sie die Zahlen ein, die Sie hören.\n"
-"          "
+"                      Wir rufen Ihr Telefon jetzt an, \n"
+"            bitte geben Sie die Zahlen ein, die Sie hören.\n"
+"                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:48
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "            We sent you a text message, please enter the tokens we sent.\n"
-#| "          "
 msgid ""
 "\n"
 "                      We sent you a text message, please enter the tokens we\n"
@@ -2673,29 +2649,23 @@ msgid ""
 "                    "
 msgstr ""
 "\n"
-"            Wir haben Ihnen per SMS einen Token geschickt, bitte geben Sie diesen ein.\n"
-"          "
+"                      Wir haben Ihnen per SMS einen Token geschickt, \n"
+"            bitte geben Sie diesen ein.\n"
+"                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:53
-#, fuzzy
-#| msgid ""
-#| "Please enter the tokens generated by your token\n"
-#| "              generator."
 msgid ""
 "\n"
 "                      Please enter the tokens generated by your token\n"
 "                      generator.\n"
 "                    "
 msgstr ""
-"Bitte geben Sie den von Ihrem Token-Generator\n"
-"              generierten Token ein."
+"\n"
+"                      Bitte geben Sie den von Ihrem Token-Generator\n"
+"              generierten Token ein.\n"
+"                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:59
-#, fuzzy
-#| msgid ""
-#| "Use this form for entering backup tokens for logging in.\n"
-#| "            These tokens have been generated for you to print and keep safe. Please\n"
-#| "            enter one of these backup tokens to login to your account."
 msgid ""
 "\n"
 "                    Use this form for entering backup tokens for logging in.\n"
@@ -2703,9 +2673,13 @@ msgid ""
 "                    enter one of these backup tokens to login to your account.\n"
 "                  "
 msgstr ""
-"Nutzen Sie dieses Formular um Ihre Backup-Tokens zum Anmelden einzugeben.\n"
-"                Diese Tokens wurden für Sie generiert, um diese gut aufzubewahren. Bitte\n"
-"                geben Sie einen dieser Tokens ein, um sich einzuloggen."
+"\n"
+"                    Nutzen Sie dieses Formular um Ihre Backup-Tokens zum "
+"Anmelden einzugeben.\n"
+"                Diese Tokens wurden für Sie generiert, um diese gut "
+"aufzubewahren. Bitte\n"
+"                geben Sie einen dieser Tokens ein, um sich einzuloggen.\n"
+"                  "
 
 #: aleksis/core/templates/two_factor/core/login.html:74
 msgid "Or, alternatively, use one of your backup phones:"
diff --git a/aleksis/core/migrations/0007_dashboard_widget_order.py b/aleksis/core/migrations/0007_dashboard_widget_order.py
index b25390d77aa8717e5ca499da7618d52f670d1be8..78c1c8bcb372a8fd9abfa6bd578e88c70e61d01f 100644
--- a/aleksis/core/migrations/0007_dashboard_widget_order.py
+++ b/aleksis/core/migrations/0007_dashboard_widget_order.py
@@ -29,7 +29,6 @@ class Migration(migrations.Migration):
                 'verbose_name_plural': 'Dashboard widget orders',
             },
             managers=[
-                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
             ],
         ),
     ]
diff --git a/docs/dev/01_setup.rst b/docs/dev/01_setup.rst
index 122a9baa14ce942886bd8d1a73fc5584f77cad19..dd3121a822e53c603b21511b790f5ef6950f295a 100644
--- a/docs/dev/01_setup.rst
+++ b/docs/dev/01_setup.rst
@@ -11,22 +11,41 @@ framework and selected apps.
 
 Also, `Yarn`_ is needed to resolve JavaScript dependencies.
 
+For repository management, `myrepos` is required.
+
+Setup database and message broker
+---------------------------------
+
+AlekSIS requires `PostgreSQL`_ (version 13 or newer) as database
+backend. To provide a database names `aleksis` with a user named
+`aleksis` on Debian::
+
+  sudo apt install postgresql-13
+  sudo -u postgres createuser -P aleksis
+  sudo -u postgres createdb -O aleksis aleksis
+
+Additionally, `Redis`_ is used as message broker and for caching.
+The default configuration of the server in Debian is sufficient::
+
+  sudo apt install redis-server
+
 Get the source tree
 -------------------
 
 To download AlekSIS and all officially bundled apps in their
 development version, use Git like so::
 
-  git clone --recurse-submodules https://edugit.org/AlekSIS/AlekSIS
+  git clone https://edugit.org/AlekSIS/official/AlekSIS
 
-If you do not want to download the bundled apps, leave out the
-``--recurse-submodules`` option.
+This first downloads a meta repository that contains a config file for mr.
+To clone the AlekSIS-Core and all official (and onboarding) apps, run::
 
+  mr update
 
 Install native dependencies
 ---------------------------
 
-Some system libraries are required to install AlekSIS::
+Some system libraries are required to install AlekSIS. On Debian, for example, this would be done with::
 
   sudo apt install build-essential libpq-dev libpq5 libssl-dev python3-dev python3-pip python3-venv yarnpkg gettext chromium
 
@@ -36,7 +55,7 @@ Get Poetry
 Make sure to have Poetry installed like described in its
 documentation. Right now, we encourage using pip to install Poetry
 once system-wide (this will change once distributions pick up
-Poetry). On Debian, for example, this would be done with::
+Poetry).::
 
   sudo pip3 install poetry
 
@@ -47,10 +66,15 @@ Install AlekSIS in its own virtual environment
 ----------------------------------------------
 
 Poetry will automatically manage virtual environments per project, so
-installing AlekSIS is a matter of::
+installing AlekSIS is a matter of switching into the Core's directory and running the initial AlekSIS installation::
 
+  cd apps/official/AlekSIS-Core
   poetry install
 
+Now it's recommended to run a shell that uses the newly created venv::
+
+  poetry shell
+
 
 Regular tasks
 -------------
@@ -63,13 +87,13 @@ some maintenance tasks need to be done:
 3. Run database migrations
 
 All three steps can be done with the ``poetry run`` command and
-``manage.py``::
+``aleksis-admin``::
 
-  poetry run ./manage.py yarn install
-  poetry run ./manage.py collectstatic
-  poetry run ./manage.py compilemessages
-  poetry run ./manage.py migrate
-  poetry run ./manage.py createinitialrevisions
+  poetry run aleksis-admin yarn install
+  poetry run aleksis-admin collectstatic
+  poetry run aleksis-admin compilemessages
+  poetry run aleksis-admin migrate
+  poetry run aleksis-admin createinitialrevisions
 
 (You might need database settings for the `migrate` command; see below.)
 
@@ -78,13 +102,13 @@ Running the development server
 
 The development server can be started using Django's ``runserver`` command.
 If you want to automatically start other necessary tools in development,
-like the `Celery` worker and scheduler, use ``runuwsgi`` instead.
+like the `Celery`_ worker and scheduler, use ``runuwsgi`` instead.
 You can either configure AlekSIS like in a production environment, or pass
 basic settings in as environment variable. Here is an example that runs the
 development server against a local PostgreSQL database with password
 `aleksis` (all else remains default) and with the `debug` setting enabled::
 
-  ALEKSIS_debug=true ALEKSIS_database__password=aleksis poetry run ./manage.py runuwsgi
+  ALEKSIS_debug=true ALEKSIS_database__password=aleksis poetry run aleksis-admin runuwsgi
 
 .. figure:: /screenshots/index.png
    :scale: 50%
@@ -96,4 +120,6 @@ development server against a local PostgreSQL database with password
 .. _Poetry: https://poetry.eustace.io/
 .. _Poetry installation methods: https://poetry.eustace.io/docs/#installation
 .. _Yarn: https://yarnpkg.com
+.. _PostgreSQL: https://www.postgresql.org/
+.. _Redis: https://redis.io/
 .. _Celery: https://celeryproject.org/
diff --git a/docs/dev/02_install_apps.rst b/docs/dev/02_install_apps.rst
index db3fe87f6ff6407ad0ca0db0aec0177720be70dd..bbfbb9b4007e533c1e910ae829ddf80f382b7d99 100644
--- a/docs/dev/02_install_apps.rst
+++ b/docs/dev/02_install_apps.rst
@@ -4,18 +4,18 @@ Installing apps into development environment
 Officially bundled apps
 -----------------------
 
-Officially bundlede apps are available in the ``apps/official/``
-sub-folder as Git submodules. If you followed the documentation, they
+Officially bundled apps are available in the ``apps/official/``
+sub-folder of the meta repository. If you followed the documentation, they
 will already be checked out in the version required for the bundle you
 are running.
 
-Installing apps into the existing virtual environment is a bit awkward::
+Installing apps into the existing virtual environment of `AlekSIS-Core` can
+be easily done after starting `poetry shell`::
 
-  poetry run sh -c "cd apps/official/AlekSIS-App-Exlibris; poetry install"
-
-This will install the Exlibris app (library management) app by using a
-shell for first ``cd``'ing into the app directory and then using
-poetry to install the app.
+  poetry install
 
 Do not forget to run the maintenance tasks described earlier after
 installing any app.
+
+**Heads up:** This is not suitable for working on the core, because it
+will install the `AlekSIS-Core` version used by the app using `pip` again.
diff --git a/poetry.lock b/poetry.lock
index 61d9e7bf6c8b4a7830a843cec8e81c7322bbe7b6..b5989fdcb97c20819171489c37d17a2e8397ce44 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1124,7 +1124,7 @@ tablib = ["tablib"]
 
 [[package]]
 name = "django-templated-email"
-version = "2.3.0"
+version = "2.4.0"
 description = "A Django oriented templated / transaction email abstraction"
 category = "main"
 optional = false
@@ -1132,7 +1132,6 @@ python-versions = "*"
 
 [package.dependencies]
 django-render-block = ">=0.5"
-six = ">=1"
 
 [[package]]
 name = "django-timezone-field"
@@ -1630,7 +1629,7 @@ zookeeper = ["kazoo (>=1.3.1)"]
 
 [[package]]
 name = "libsass"
-version = "0.20.1"
+version = "0.21.0"
 description = "Sass for Python: A straightforward binding of libsass for Python."
 category = "main"
 optional = false
@@ -2671,7 +2670,7 @@ s3 = ["boto3", "django-storages"]
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.9"
-content-hash = "ea255c70cdcfee06fa1ba40233d5ddc8cc8f10409ca2f24d1ddb66a5cfae0d51"
+content-hash = "9009e40aa54a752649e5539cba2b0b12dc0580c7e93999d177b19f041bdaf85b"
 
 [metadata.files]
 alabaster = [
@@ -3136,7 +3135,7 @@ django-tables2 = [
     {file = "django_tables2-2.4.0-py2.py3-none-any.whl", hash = "sha256:0f10ecef25708385a9d32d68d7c9478ca8dda31569410cb05a025be3f2c57593"},
 ]
 django-templated-email = [
-    {file = "django-templated-email-2.3.0.tar.gz", hash = "sha256:536c4e5ae099eabfb9aab36087d4d7799948c654e73da55a744213d086d5bb33"},
+    {file = "django-templated-email-2.4.0.tar.gz", hash = "sha256:3bcd95cb806070b13c9919a72fec944b5ce319e30e8828a08180767bb1f84027"},
 ]
 django-timezone-field = [
     {file = "django-timezone-field-4.1.2.tar.gz", hash = "sha256:cffac62452d060e365938aa9c9f7b72d70d8b26b9c60243bce227b35abd1b9df"},
@@ -3289,19 +3288,15 @@ kombu = [
     {file = "kombu-5.0.2.tar.gz", hash = "sha256:f4965fba0a4718d47d470beeb5d6446e3357a62402b16c510b6a2f251e05ac3c"},
 ]
 libsass = [
-    {file = "libsass-0.20.1-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:4a246e4b88fd279abef8b669206228c92534d96ddcd0770d7012088c408dff23"},
-    {file = "libsass-0.20.1-cp27-cp27m-win32.whl", hash = "sha256:697f0f9fa8a1367ca9ec6869437cb235b1c537fc8519983d1d890178614a8903"},
-    {file = "libsass-0.20.1-cp27-cp27m-win_amd64.whl", hash = "sha256:1b2d415bbf6fa7da33ef46e549db1418498267b459978eff8357e5e823962d35"},
-    {file = "libsass-0.20.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1521d2a8d4b397c6ec90640a1f6b5529077035efc48ef1c2e53095544e713d1b"},
-    {file = "libsass-0.20.1-cp36-abi3-macosx_10_14_x86_64.whl", hash = "sha256:2ae806427b28bc1bb7cb0258666d854fcf92ba52a04656b0b17ba5e190fb48a9"},
-    {file = "libsass-0.20.1-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:25ebc2085f5eee574761ccc8d9cd29a9b436fc970546d5ef08c6fa41eb57dff1"},
-    {file = "libsass-0.20.1-cp36-cp36m-win32.whl", hash = "sha256:553e5096414a8d4fb48d0a48f5a038d3411abe254d79deac5e008516c019e63a"},
-    {file = "libsass-0.20.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e64ae2587f1a683e831409aad03ba547c245ef997e1329fffadf7a866d2510b8"},
-    {file = "libsass-0.20.1-cp37-cp37m-win32.whl", hash = "sha256:c9411fec76f480ffbacc97d8188322e02a5abca6fc78e70b86a2a2b421eae8a2"},
-    {file = "libsass-0.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a8fd4af9f853e8bf42b1425c5e48dd90b504fa2e70d7dac5ac80b8c0a5a5fe85"},
-    {file = "libsass-0.20.1-cp38-cp38-win32.whl", hash = "sha256:f6852828e9e104d2ce0358b73c550d26dd86cc3a69439438c3b618811b9584f5"},
-    {file = "libsass-0.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:daa98a51086d92aa7e9c8871cf1a8258124b90e2abf4697852a3dca619838618"},
-    {file = "libsass-0.20.1.tar.gz", hash = "sha256:e0e60836eccbf2d9e24ec978a805cd6642fa92515fbd95e3493fee276af76f8a"},
+    {file = "libsass-0.21.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:06c8776417fe930714bdc930a3d7e795ae3d72be6ac883ff72a1b8f7c49e5ffb"},
+    {file = "libsass-0.21.0-cp27-cp27m-win32.whl", hash = "sha256:a005f298f64624f313a3ac618ab03f844c71d84ae4f4a4aec4b68d2a4ffe75eb"},
+    {file = "libsass-0.21.0-cp27-cp27m-win_amd64.whl", hash = "sha256:6b984510ed94993708c0d697b4fef2d118929bbfffc3b90037be0f5ccadf55e7"},
+    {file = "libsass-0.21.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e25dd9047a9392d3c59a0b869e0404f2b325a03871ee45285ee33b3664f5613"},
+    {file = "libsass-0.21.0-cp36-abi3-macosx_10_14_x86_64.whl", hash = "sha256:12f39712de38689a8b785b7db41d3ba2ea1d46f9379d81ea4595802d91fa6529"},
+    {file = "libsass-0.21.0-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e2b1a7d093f2e76dc694c17c0c285e846d0b0deb0e8b21dc852ba1a3a4e2f1d6"},
+    {file = "libsass-0.21.0-cp36-abi3-win32.whl", hash = "sha256:abc29357ee540849faf1383e1746d40d69ed5cb6d4c346df276b258f5aa8977a"},
+    {file = "libsass-0.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:659ae41af8708681fa3ec73f47b9735a6725e71c3b66ff570bfce78952f2314e"},
+    {file = "libsass-0.21.0.tar.gz", hash = "sha256:d5ba529d9ce668be9380563279f3ffe988f27bc5b299c5a28453df2e0b0fbaf2"},
 ]
 license-expression = [
     {file = "license-expression-1.2.tar.gz", hash = "sha256:7960e1dfdf20d127e75ead931476f2b5c7556df05b117a73880b22ade17d1abc"},
diff --git a/pyproject.toml b/pyproject.toml
index 99f2f3ec5a70246da90c4e4a7d35e79a6b0156b7..ba39d5d1f7f4176ccc9d2b8579c720ce633af173 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -41,7 +41,7 @@ django-menu-generator-ng = "^1.2.3"
 django-tables2 = "^2.1"
 django-phonenumber-field = {version = "<5.2", extras = ["phonenumbers"]}
 django-sass-processor = "^1.0"
-libsass = "^0.20.0"
+libsass = "^0.21.0"
 colour = "^0.1.5"
 dynaconf = {version = "^3.1", extras = ["yaml", "toml", "ini"]}
 django-auth-ldap = { version = "^2.2", optional = true }