diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py
index fb831301e4bae0138026271ecff80581d72cfb81..418686aea991a489558c2aa911149516b6a09335 100644
--- a/aleksis/apps/alsijil/preferences.py
+++ b/aleksis/apps/alsijil/preferences.py
@@ -3,7 +3,7 @@ from django.utils.translation import gettext as _
 from dynamic_preferences.preferences import Section
 from dynamic_preferences.types import BooleanPreference
 
-from aleksis.core.registries import site_preferences_registry
+from aleksis.core.registries import person_preferences_registry, site_preferences_registry
 
 alsijil = Section("alsijil", verbose_name=_("Class register"))
 
@@ -92,3 +92,20 @@ class GroupOwnersCanAssignRolesToParents(BooleanPreference):
     verbose_name = _(
         "Allow group owners to assign group roles to the parents of the group's members"
     )
+
+
+@person_preferences_registry.register
+class ShowGroupRolesInWeekView(BooleanPreference):
+    section = alsijil
+    name = "group_roles_in_week_view"
+    default = True
+    verbose_name = _("Show assigned group roles in week view")
+    help_text = _("Only week view of groups")
+
+
+@person_preferences_registry.register
+class ShowGroupRolesInLessonView(BooleanPreference):
+    section = alsijil
+    name = "group_roles_in_lesson_view"
+    default = True
+    verbose_name = _("Show assigned group roles in lesson view")
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
index 021f227eb261ed757200b485660ee0cd9f23b5c5..24780eba16318c05d925d57aed87637caa9c2a85 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
@@ -64,12 +64,17 @@
     <div class="row">
       <div class="col s12">
         <ul class="tabs">
-          <li class="tab col s6">
+          <li class="tab col">
             <a class="active" href="#week-overview">{% trans "Lesson documentations" %}</a>
           </li>
-          <li class="tab col s6">
-            <a class="active" href="#personal-notes">{% trans "Personal notes" %}</a>
+          <li class="tab col">
+            <a href="#personal-notes">{% trans "Personal notes" %}</a>
           </li>
+          {% if group_roles %}
+            <li class="tab col">
+              <a href="#group-roles">{% trans "Group roles" %}</a>
+            </li>
+          {% endif %}
         </ul>
       </div>
       <div class="col s12" id="week-overview">
@@ -283,6 +288,11 @@
                   </a>
                 {% endif %}
               </h5>
+              <p>
+                {% for assignment in person.person.group_roles.all %}
+                  {% include "alsijil/group_role/chip.html" with role=assignment.role small=assignment.date_range %}
+                {% endfor %}
+              </p>
               <p class="card-text">
                 {% trans "Absent" %}: {{ person.person.absences_count }}
                 ({{ person.person.unexcused_count }} {% trans "unexcused" %})
@@ -315,6 +325,11 @@
           </div>
         </div>
       </div>
+      {% if group_roles %}
+        <div class="col s12" id="group-roles">
+          {% include "alsijil/group_role/partials/assigned_roles.html" with roles=group_roles group=group back_url=back_url %}
+        </div>
+      {% endif %}
     </div>
   {% else %}
     <div class="card red darken-1">
diff --git a/aleksis/apps/alsijil/templates/alsijil/group_role/chip.html b/aleksis/apps/alsijil/templates/alsijil/group_role/chip.html
index f50fc10e965c92762451a985dc30c28d78c64b08..c952c289480824422943d6f104509dd0d310633e 100644
--- a/aleksis/apps/alsijil/templates/alsijil/group_role/chip.html
+++ b/aleksis/apps/alsijil/templates/alsijil/group_role/chip.html
@@ -3,4 +3,7 @@
 <div class="chip white-text {{ role.colour|default:"black" }}">
   <i class="material-icons left">{{ role.icon|default:"assignment_ind" }}</i>
   {{ role.name }}
+  {% if small %}
+    <small>({{ small }})</small>
+  {% endif %}
 </div>
\ No newline at end of file
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index f83f2cfac818b733c3724c2d358f3b20c26782f9..f5b3faf4e003fd7c20abf45755f93a5713e82edb 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -242,8 +242,13 @@ def week_view(
     # Add a form to filter the view
     if type_:
         initial = {type_.value: instance}
+        back_url = reverse(
+            "week_view_by_week", args=[wanted_week.year, wanted_week.week, type_.value, instance.pk]
+        )
     else:
         initial = {}
+        back_url = reverse("week_view_by_week", args=[wanted_week.year, wanted_week.week])
+    context["back_url"] = back_url
     select_form = SelectForm(request, request.POST or None, initial=initial)
 
     if request.method == "POST":
@@ -264,6 +269,14 @@ def week_view(
     else:
         group = None
 
+    # Group roles
+    show_group_roles = (
+        group and request.user.person.preferences["alsijil__group_roles_in_week_view"]
+    )
+    if show_group_roles:
+        group_roles = GroupRole.objects.with_assignments(wanted_week, [group])
+        context["group_roles"] = group_roles
+
     extra_marks = ExtraMark.objects.all()
 
     if lesson_periods_query_exists:
@@ -305,63 +318,70 @@ def week_view(
         else:
             persons_qs = persons_qs.filter(member_of__lessons__lesson_periods__in=lesson_periods_pk)
 
-        persons_qs = (
-            persons_qs.distinct()
-            .prefetch_related(
+        persons_qs = persons_qs.distinct().prefetch_related(
+            Prefetch(
+                "personal_notes",
+                queryset=PersonalNote.objects.filter(
+                    week=wanted_week.week,
+                    year=wanted_week.year,
+                    lesson_period__in=lesson_periods_pk,
+                ),
+            ),
+            "member_of__owners",
+        )
+
+        # Annotate group roles
+        if show_group_roles:
+            persons_qs = persons_qs.prefetch_related(
                 Prefetch(
-                    "personal_notes",
-                    queryset=PersonalNote.objects.filter(
-                        week=wanted_week.week,
-                        year=wanted_week.year,
-                        lesson_period__in=lesson_periods_pk,
-                    ),
+                    "group_roles",
+                    queryset=GroupRoleAssignment.objects.in_week(wanted_week).for_group(group),
                 ),
-                "member_of__owners",
             )
-            .annotate(
-                absences_count=Count(
-                    "personal_notes",
-                    filter=Q(
-                        personal_notes__lesson_period__in=lesson_periods_pk,
-                        personal_notes__week=wanted_week.week,
-                        personal_notes__year=wanted_week.year,
-                        personal_notes__absent=True,
-                    ),
-                    distinct=True,
-                ),
-                unexcused_count=Count(
-                    "personal_notes",
-                    filter=Q(
-                        personal_notes__lesson_period__in=lesson_periods_pk,
-                        personal_notes__week=wanted_week.week,
-                        personal_notes__year=wanted_week.year,
-                        personal_notes__absent=True,
-                        personal_notes__excused=False,
-                    ),
-                    distinct=True,
-                ),
-                tardiness_sum=Subquery(
-                    Person.objects.filter(
-                        pk=OuterRef("pk"),
-                        personal_notes__lesson_period__in=lesson_periods_pk,
-                        personal_notes__week=wanted_week.week,
-                        personal_notes__year=wanted_week.year,
-                    )
-                    .distinct()
-                    .annotate(tardiness_sum=Sum("personal_notes__late"))
-                    .values("tardiness_sum")
+
+        persons_qs = persons_qs.annotate(
+            absences_count=Count(
+                "personal_notes",
+                filter=Q(
+                    personal_notes__lesson_period__in=lesson_periods_pk,
+                    personal_notes__week=wanted_week.week,
+                    personal_notes__year=wanted_week.year,
+                    personal_notes__absent=True,
                 ),
-                tardiness_count=Count(
-                    "personal_notes",
-                    filter=Q(
-                        personal_notes__lesson_period__in=lesson_periods_pk,
-                        personal_notes__week=wanted_week.week,
-                        personal_notes__year=wanted_week.year,
-                    )
-                    & ~Q(personal_notes__late=0),
-                    distinct=True,
+                distinct=True,
+            ),
+            unexcused_count=Count(
+                "personal_notes",
+                filter=Q(
+                    personal_notes__lesson_period__in=lesson_periods_pk,
+                    personal_notes__week=wanted_week.week,
+                    personal_notes__year=wanted_week.year,
+                    personal_notes__absent=True,
+                    personal_notes__excused=False,
                 ),
-            )
+                distinct=True,
+            ),
+            tardiness_sum=Subquery(
+                Person.objects.filter(
+                    pk=OuterRef("pk"),
+                    personal_notes__lesson_period__in=lesson_periods_pk,
+                    personal_notes__week=wanted_week.week,
+                    personal_notes__year=wanted_week.year,
+                )
+                .distinct()
+                .annotate(tardiness_sum=Sum("personal_notes__late"))
+                .values("tardiness_sum")
+            ),
+            tardiness_count=Count(
+                "personal_notes",
+                filter=Q(
+                    personal_notes__lesson_period__in=lesson_periods_pk,
+                    personal_notes__week=wanted_week.week,
+                    personal_notes__year=wanted_week.year,
+                )
+                & ~Q(personal_notes__late=0),
+                distinct=True,
+            ),
         )
 
         for extra_mark in extra_marks: