diff --git a/aleksis/apps/paweljong/predicates.py b/aleksis/apps/paweljong/predicates.py
index d6c92084f9743934805cd25f213c2c6a9701c98d..9fe8dfb38d03ca12589be0778cb1b85dfee33ba1 100644
--- a/aleksis/apps/paweljong/predicates.py
+++ b/aleksis/apps/paweljong/predicates.py
@@ -38,3 +38,9 @@ def is_organiser(user: User, obj: Union[Event, EventRegistration]) -> bool:
 def is_event_published(user: User, obj: EventRegistration) -> bool:
     """Predicate which checks if the event is published."""
     return obj.published
+
+
+@predicate
+def is_participant(user: User, obj: Event) -> bool:
+    """Predicate which checks if the user is member of the event."""
+    return user in obj.linked_group.members.all()
diff --git a/aleksis/apps/paweljong/rules.py b/aleksis/apps/paweljong/rules.py
index 7683d6d479fcd50828862598e6cab76d1fdd83b6..fa4f9e55e310e2b329b4e8c449dc254ea39545a6 100644
--- a/aleksis/apps/paweljong/rules.py
+++ b/aleksis/apps/paweljong/rules.py
@@ -8,7 +8,7 @@ from aleksis.core.util.predicates import (
 )
 
 from .models import Event, EventRegistration, Terms, Voucher
-from .predicates import is_event_published, is_organiser, is_own_registration, is_own_voucher
+from .predicates import is_event_published, is_organiser, is_own_registration, is_own_voucher, is_participant
 
 ## Vouchers
 
@@ -231,3 +231,6 @@ rules.add_perm("paweljong.view_menu", can_view_menu_predicate)
 
 can_retract_registration_predicate = has_person & (is_organiser)
 rules.add_perm("paweljong.can_retract_registration_rule", can_retract_registration_predicate)
+
+can_view_tos_predicate = has_person & (is_participant)
+rules.add_perm("paweljong.can_view_tos_rule", can_view_tos_predicate)
diff --git a/aleksis/apps/paweljong/templates/paweljong/event/tos.html b/aleksis/apps/paweljong/templates/paweljong/event/tos.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d63b8f417f2f45ffc252dd966e83671ee0b7925
--- /dev/null
+++ b/aleksis/apps/paweljong/templates/paweljong/event/tos.html
@@ -0,0 +1,13 @@
+{% extends "core/base.html" %}
+{% load material_form i18n any_js %}
+
+{% block page_title %}{% blocktrans %}Terms and conditions{% endblocktrans %}{% endblock %}
+{% block browser_title %}{% blocktrans %}Terms and conditions{% endblocktrans %}{% endblock %}
+
+{% block content %}
+
+  {% for term in obj.terms.all %}
+    {{ term }}
+  {% endfor %}
+
+{% endblock %}
diff --git a/aleksis/apps/paweljong/urls.py b/aleksis/apps/paweljong/urls.py
index d046e0506d6be8905b11e3b530bf83bf01b15e70..6935adeca3e8e536242624166b857dd2673f1cf8 100644
--- a/aleksis/apps/paweljong/urls.py
+++ b/aleksis/apps/paweljong/urls.py
@@ -37,6 +37,7 @@ account_conditions = {
 
 urlpatterns = [
     path("event/<slug:slug>/edit", views.EditEventView.as_view(), name="edit_event_by_slug"),
+    path("event/<slug:slug>/tos", views.ViewToS.as_view(), name="view_event_tos_by_slug"),
     path(
         "event/<slug:slug>/register",
         views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict),
diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py
index 7065c2aeb253fcc1ed5b8e9f75d7788631a24506..9c8ae2455bcda36b32b3bd6a9f4a52af44a6bea2 100644
--- a/aleksis/apps/paweljong/views.py
+++ b/aleksis/apps/paweljong/views.py
@@ -952,3 +952,13 @@ class PersonGroupView(PermissionRequiredMixin, FormView):
 
     def get_success_url(self):
         return reverse("add_persons_to_group", kwargs={"pk": self.kwargs["pk"]})
+
+class ViewToS(PermissionRequiredMixin, FormView):
+
+    template_name = "paweljong/event/tos.html"
+    permission_required = "paweljong.can_view_tos_rule"
+    model = Event
+    slug_field = "slug"
+
+    def get_queryset(self):
+        return Event.objects.all()