diff --git a/README.md b/README.md
index 075146a4cb0ac01f5e58a25ff1f64718db803781..d88c851df0e42011cb185053bba899c9d85c5cc8 100644
--- a/README.md
+++ b/README.md
@@ -134,4 +134,9 @@ instead of returning Result(data), the paginator needs to be used again so it ca
 return paginator.get_paginated_response(serializer.data)
 ```
 
-This function already returns a fully valid Response, so it can be directly returned.
\ No newline at end of file
+This function already returns a fully valid response, so it can be directly returned.
+
+
+## Our Handling of REST Standards
+
+In our usecase of the Admin Frontend, we either explicitly work on objects we chose from a list of given objects, or we create a new object all together. Because of these circumstances, it is not relevant for the PUT request to create new objects entirely, since we know that all objects currently being edited exist. This means that the PUT implementations in `views.py` do not create new objects if called with an unknown primary key. Instead, they are similar to PATCH, but require all fields to be sent along instead of just a portion of them as PATCH does.
\ No newline at end of file
diff --git a/unisportomat/quiz/migrations/0013_auto_20210628_1751.py b/unisportomat/quiz/migrations/0013_auto_20210628_1751.py
new file mode 100644
index 0000000000000000000000000000000000000000..4035eed73d5d5e03b4a51a0f179838c877f3dafe
--- /dev/null
+++ b/unisportomat/quiz/migrations/0013_auto_20210628_1751.py
@@ -0,0 +1,52 @@
+# Generated by Django 3.2 on 2021-06-28 17:51
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("quiz", "0012_merge_20210627_2254"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="GreetingEndTexts",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "greeting",
+                    models.TextField(default="Willkommen zum Uni-Sport-O-Mat!"),
+                ),
+                (
+                    "greeting_de",
+                    models.TextField(
+                        default="Willkommen zum Uni-Sport-O-Mat!", null=True
+                    ),
+                ),
+                (
+                    "greeting_en",
+                    models.TextField(
+                        default="Willkommen zum Uni-Sport-O-Mat!", null=True
+                    ),
+                ),
+                ("end", models.TextField(default="Wähle deinen Sport!")),
+                ("end_de", models.TextField(default="Wähle deinen Sport!", null=True)),
+                ("end_en", models.TextField(default="Wähle deinen Sport!", null=True)),
+            ],
+        ),
+        migrations.AlterField(
+            model_name="sport",
+            name="last_used",
+            field=models.DateField(default=django.utils.timezone.localdate),
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0014_auto_20210628_1850.py b/unisportomat/quiz/migrations/0014_auto_20210628_1850.py
new file mode 100644
index 0000000000000000000000000000000000000000..de98942795110aa6175d146d46e3a856af9a0da9
--- /dev/null
+++ b/unisportomat/quiz/migrations/0014_auto_20210628_1850.py
@@ -0,0 +1,60 @@
+# Generated by Django 3.2 on 2021-06-28 18:50
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("quiz", "0013_auto_20210628_1751"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="EndText",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("text", models.TextField(default="Wähle deinen Sport!")),
+                ("text_de", models.TextField(default="Wähle deinen Sport!", null=True)),
+                ("text_en", models.TextField(default="Wähle deinen Sport!", null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name="GreetingText",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("text", models.TextField(default="Willkommen zum Uni-Sport-O-Mat!")),
+                (
+                    "text_de",
+                    models.TextField(
+                        default="Willkommen zum Uni-Sport-O-Mat!", null=True
+                    ),
+                ),
+                (
+                    "text_en",
+                    models.TextField(
+                        default="Willkommen zum Uni-Sport-O-Mat!", null=True
+                    ),
+                ),
+            ],
+        ),
+        migrations.DeleteModel(
+            name="GreetingEndTexts",
+        ),
+    ]
diff --git a/unisportomat/quiz/models.py b/unisportomat/quiz/models.py
index 665645168d675284d4d66894a3d610243ae644b3..a1ae9d0a6e2bdb50207f811b9fdf5d0c14b2f1d3 100644
--- a/unisportomat/quiz/models.py
+++ b/unisportomat/quiz/models.py
@@ -301,3 +301,27 @@ class QuestionOrderEntry(models.Model):
 
     def __str__(self):
         return f"Entry {self.order_id}: {self.type_of_slot}"
+
+
+class GreetingText(models.Model):
+    """
+    Database with only one row (if everything is done right)
+    Includes start text as column
+    """
+
+    text = models.TextField(default="Willkommen zum Uni-Sport-O-Mat!")
+
+    def __str__(self):
+        return f"{self.text}"
+
+
+class EndText(models.Model):
+    """
+    Database with only one row (if everything is done right)
+    Includes end text as column
+    """
+
+    text = models.TextField(default="Wähle deinen Sport!")
+
+    def __str__(self):
+        return f"{self.text}"
diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py
index 11d0e3a52049e9691c895d6bde03de731c54f967..7ff977894fb8ce4c0a50967f40b55a351648d329 100644
--- a/unisportomat/quiz/serializers.py
+++ b/unisportomat/quiz/serializers.py
@@ -204,3 +204,21 @@ class CriteriaSerializer(serializers.BaseSerializer):
             criteria_list.append(criterion_dict)
 
         return criteria_list
+
+
+class GreetingEndSerializer(serializers.BaseSerializer):
+    """
+    Serializer for GreetingText and EndText
+    """
+
+    def to_representation(self, obj):
+        """
+        Represents the object with German and English text
+        """
+
+        json_obj = {
+            "text_de": obj.text_de,
+            "text_en": obj.text_en,
+        }
+
+        return json_obj
diff --git a/unisportomat/quiz/tests.py b/unisportomat/quiz/tests.py
index 099751d5fbfafb44bf19edcec577c8b231bd7d23..e6eef13f33c3ccd6078f35f493ccd923652d006c 100644
--- a/unisportomat/quiz/tests.py
+++ b/unisportomat/quiz/tests.py
@@ -1,6 +1,7 @@
 """ This module tests all our quiz models"""
 
 import os
+import re
 import shutil
 import tempfile
 
@@ -549,6 +550,60 @@ class APITest(APITestCase):
 
         self.assertEqual(response.data["currently_active"], False)
 
+    def test_greeting_view(self):
+        """
+        Test whether the greeting behaves correctly
+        """
+
+        response = self.client.get(reverse("greeting"))
+
+        self.assertEqual(response.data["text_de"], "Willkommen zum Uni-Sport-O-Mat!")
+        self.assertEqual(response.data["text_de"], response.data["text_en"])
+
+        # Test whether new Values change correctly
+
+        data = {"text_de": "Hallo", "text_en": "Hi"}
+
+        response = self.client.post(reverse("greeting"), format="json", data=data)
+
+        response = self.client.get(reverse("greeting"))
+
+        self.assertEqual(response.data["text_de"], "Hallo")
+        self.assertEqual(response.data["text_en"], "Hi")
+
+        # If the object is deleted, the default values are returned again
+        response = self.client.delete(reverse("greeting"))
+
+        self.assertEqual(response.data["text_de"], "Willkommen zum Uni-Sport-O-Mat!")
+        self.assertEqual(response.data["text_de"], response.data["text_en"])
+
+    def test_end_view(self):
+        """
+        Test whether the end behaves correctly
+        """
+
+        response = self.client.get(reverse("end"))
+
+        self.assertEqual(response.data["text_de"], "Wähle deinen Sport!")
+        self.assertEqual(response.data["text_de"], response.data["text_en"])
+
+        # Test whether new values change correctly
+
+        data = {"text_de": "Hallo", "text_en": "Hi"}
+
+        response = self.client.post(reverse("end"), format="json", data=data)
+
+        response = self.client.get(reverse("end"))
+
+        self.assertEqual(response.data["text_de"], "Hallo")
+        self.assertEqual(response.data["text_en"], "Hi")
+
+        # If the object is deleted, the default values are returned again
+        response = self.client.delete(reverse("end"))
+
+        self.assertEqual(response.data["text_de"], "Wähle deinen Sport!")
+        self.assertEqual(response.data["text_de"], response.data["text_en"])
+
 
 class QuestionOrderEntry_Test(TestCase):
     """
diff --git a/unisportomat/quiz/translation.py b/unisportomat/quiz/translation.py
index 99f4681c570903c200e2a751ec518209868b2ed7..4d8b8adab122620933396be8bf9db3e78642d435 100644
--- a/unisportomat/quiz/translation.py
+++ b/unisportomat/quiz/translation.py
@@ -4,7 +4,7 @@ Here, every Model which needs translation fields is registered.
 
 
 from modeltranslation.translator import register, TranslationOptions
-from .models import Question, CallToMove, KnowledgeSnack
+from .models import Question, CallToMove, KnowledgeSnack, GreetingText, EndText
 
 
 @register(Question)
@@ -41,3 +41,21 @@ class KnowledgeSnackTranslationOptions(TranslationOptions):
     fields = ("text",)
     required_languages = ("de",)
     fallback_values = ("No Translation for this Field",)
+
+
+@register(GreetingText)
+class GreetingTextTranslationOptions(TranslationOptions):
+    """
+    Translation options for GreetingText.
+    """
+
+    fields = ("text",)
+
+
+@register(EndText)
+class EndTextTranslationOptions(TranslationOptions):
+    """
+    Translation options for EndText.
+    """
+
+    fields = ("text",)
diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py
index f2cf26e015a1212903b954ac57e479224db34ad5..0098ce623019185823fdc4b327cb153c036d6c65 100644
--- a/unisportomat/quiz/views.py
+++ b/unisportomat/quiz/views.py
@@ -18,8 +18,9 @@ from .serializers import (
     SingleSportSerializer,
     CriteriaSerializer,
     IncompleteSportSerializer,
+    GreetingEndSerializer,
 )
-from .models import Sport, Criterion, Question
+from .models import Sport, Criterion, Question, GreetingText, EndText
 
 # Create your views here.
 
@@ -281,3 +282,127 @@ class CriteriaView(APIView):
         response = CriteriaSerializer(data)
 
         return Response(response.data)
+
+
+class GreetingEndView(APIView):
+    """
+    View for handling the beginning sentence
+    """
+
+    given_object = None
+
+    def post(self, request):
+        """
+        api/greeting POST
+        Creates a new object if none exist, otherwise forwards to PUT
+        """
+
+        if self.given_object.objects.count() > 0:
+            return self.put(request)
+
+        sentence = self.given_object()  # pylint: disable=not-callable
+
+        if "text_de" in request.data.keys():
+            sentence.text_de = request.data["text_de"]
+
+        if "text_en" in request.data.keys():
+            sentence.text_en = request.data["text_en"]
+
+        sentence.save()
+
+        return Response(GreetingEndSerializer(sentence).data)
+
+    def get(self, request):
+        """
+        api/greeting GET
+        Sends out the greeting
+        """
+
+        sentence = self.given_object.objects.all()
+
+        if sentence.count() == 0:
+            sentence = self.given_object()  # pylint: disable=not-callable
+        else:
+            sentence = sentence.first()
+
+        return Response(GreetingEndSerializer(sentence).data)
+
+    def put(self, request):
+        """
+        api/greeting PUT
+        Overwrites German and English beginning
+        """
+
+        sentence = self.given_object.objects.all()
+
+        if sentence.count() == 0:
+            return Response(status=404)
+
+        sentence = sentence.first()
+
+        sentence.text_de = request.data["text_de"]
+        sentence.text_en = request.data["text_en"]
+
+        sentence.save()
+
+        return Response(GreetingEndSerializer(sentence).data)
+
+    def patch(self, request):
+        """
+        api/greeting PATCH
+        Overwrites German and/or English beginning, if they exist
+        """
+
+        sentence = self.given_object.objects.all()
+
+        if sentence.count() == 0:
+            return Response(status=404)
+
+        sentence = sentence.first()
+
+        if "text_de" in request.data.keys():
+            sentence.text_de = request.data["text_de"]
+        if "text_en" in request.data.keys():
+            sentence.text_en = request.data["text_en"]
+
+        sentence.save()
+
+        return Response(GreetingEndSerializer(sentence).data)
+
+    def delete(self, request):
+        """
+        api/greeting DELETE
+        Deletes the object so default values are reinstated
+        """
+
+        sentence = self.given_object.objects.all()
+
+        if sentence.count() == 0:
+            return Response(status=404)
+
+        sentence = sentence.first()
+
+        sentence.text_de = self.given_object._meta.get_field("text").get_default()
+        sentence.text_en = self.given_object._meta.get_field("text").get_default()
+
+        sentence.save()
+
+        return Response(GreetingEndSerializer(sentence).data)
+
+
+class GreetingView(GreetingEndView):
+    """
+    View for the greeting strings
+    Inherited CRUD from GreetingEndView
+    """
+
+    given_object = GreetingText
+
+
+class EndView(GreetingEndView):
+    """
+    View for the end strings
+    Inherited CRUD from GreetingEndView
+    """
+
+    given_object = EndText
diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py
index 388d94e57dc1440659c8320eca2485f5bd78fee9..b83056ca42a46937eb4fdb2739d54ba30def99d7 100644
--- a/unisportomat/unisportomat/urls.py
+++ b/unisportomat/unisportomat/urls.py
@@ -33,4 +33,6 @@ urlpatterns = [
         name="incomplete",
     ),
     path("api/admin/criteria/", views.CriteriaView.as_view(), name="criteria"),
+    path("api/admin/greeting/", views.GreetingView.as_view(), name="greeting"),
+    path("api/admin/end/", views.EndView.as_view(), name="end"),
 ]