diff --git a/biscuit/apps/alsijil/templates/alsijil/group_week.html b/biscuit/apps/alsijil/templates/alsijil/group_week.html
index 2d20aa0ef6ba9e187e46ac6727339f1c8ecfee90..959b80b5193e4e9944fe0edfe3d4741173990572 100644
--- a/biscuit/apps/alsijil/templates/alsijil/group_week.html
+++ b/biscuit/apps/alsijil/templates/alsijil/group_week.html
@@ -17,67 +17,53 @@
     <input type="submit" value="Select" />
   </form>
 
-  {% if group %}
-    <div class="row">
-      <div class="col-md-7">
-        <div class="card">
-          <div class="card-header bg-light text-dark">
-            {% blocktrans %}Week{% endblocktrans %}
-            {{ week }} ({{ week|week_start }} — {{ week|week_end }}),
-            {{ group.name }}
-          </div>
-          <div class="card-body">
-            {% for weekday, periods in periods_by_day.items %}
-              <h3>{{ weekday }}</h3>
-              <table class="table table-striped table-bordered table-hover table-responsive-xl">
-                <thead>
+  <div class="row">
+    <div class="col-md-7">
+      <div class="card">
+        <div class="card-header bg-light text-dark">
+          {% blocktrans %}Week{% endblocktrans %}
+          {{ week }} ({{ week|week_start }} — {{ week|week_end }}),
+          {{ group.name }}
+        </div>
+        <div class="card-body">
+          {% regroup lesson_periods by period.weekday as periods_by_day %}
+          {% for weekday, periods in periods_by_day.items %}
+            <h3>{{ weekday }}</h3>
+            <table class="table table-striped table-bordered table-hover table-responsive-xl">
+              <thead>
+                <tr>
+                  <th>{% blocktrans %}Period{% endblocktrans %}</th>
+                  <th>{% blocktrans %}Subject{% endblocktrans %}</th>
+                  <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
+                </tr>
+              </thead>
+              <tbody>
+                {% for period in periods %}
                   <tr>
-                    <th>{% blocktrans %}Period{% endblocktrans %}</th>
-                    <th>{% blocktrans %}Subject{% endblocktrans %}</th>
-                    <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
+                    <td>{{ period.period.period }}</td>
+                    <td>
+                      <a href="{% url 'lesson_by_week_and_period' week period.id %}">
+                        {{ period.lesson.subject.name }}
+                      </a>
+                    </td>
+                    <td>{{ period.lesson.teacher_names }}</td>
                   </tr>
-                </thead>
-                <tbody>
-                  {% for period in periods %}
-                    <tr>
-                      <td>{{ period.period.period }}</td>
-                      <td>
-                        <a href="{% url 'lesson_by_week_and_period' week period.id %}">
-                          {{ period.lesson.subject.name }}
-                        </a>
-                      </td>
-                      <td>{{ period.lesson.teacher_names }}</td>
-                    </tr>
-                  {% endfor %}
-                </tbody>
-              </table>
-            {% endfor %}
-          </div>
-        </div>
-      </div>
-      <div class="col-md-5">
-        <div class="card">
-          <div class="card-header bg-light text-dark">
-            {% blocktrans %}Personal notes{% endblocktrans %}
-          </div>
-          <div class="card-body">
-            Not implemented yet.
-          </div>
+                {% endfor %}
+              </tbody>
+            </table>
+          {% endfor %}
         </div>
       </div>
     </div>
-  {% else %}
-    <div class="card text-white bg-danger">
-      <div class="card-header">
-        {% blocktrans %}No group selected{% endblocktrans %}
-      </div>
-      <div class="card-body">
-        <p>
-          {% blocktrans %}
-            You must select a group to see the week summary.
-          {% endblocktrans %}
-        </p>
+    <div class="col-md-5">
+      <div class="card">
+        <div class="card-header bg-light text-dark">
+          {% blocktrans %}Personal notes{% endblocktrans %}
+        </div>
+        <div class="card-body">
+          Not implemented yet.
+        </div>
       </div>
     </div>
-  {% endif %}
+  </div>
 {% endblock %}
diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py
index 3a14e80158a5531beb68c6bd660509129613038e..cdf9f6b0c02455e9ababe1e0477dc198924a5756 100644
--- a/biscuit/apps/alsijil/views.py
+++ b/biscuit/apps/alsijil/views.py
@@ -98,25 +98,28 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse
     else:
         group = None
 
-    periods_by_day_unsorted = {}
-    if group:
-        for act_group in [group] + list(group.child_groups.all()):
-            for lesson in act_group.lessons.filter(date_start__lte=week_start, date_end__gte=week_end):
-                for lesson_period in lesson.lesson_periods.all():
-                    periods_by_day_unsorted.setdefault(
-                        lesson_period.period.weekday, []).append(lesson_period)
-
-    periods_by_day = OrderedDict()
-    for weekday, periods in sorted(periods_by_day_unsorted.items()):
-        periods_by_day[dict(TimePeriod.WEEKDAY_CHOICES)[weekday]] = sorted(
-            periods, key=lambda p: p.period.period)
+    if not group:
+        raise Http404(_('You must select a group to see the week summary.'))
+
+    lesson_periods = LessonPeriod.objects.filter(
+        lesson__date_start__lte=week_start,
+        lesson__date_end__gte=week_end
+    ).select_related(
+        'lesson', 'lesson__subject', 'period', 'room'
+    ).prefetch_related(
+        'lesson__groups', 'lesson__teachers', 'substitutions'
+    ).extra(
+        select={'_week': wanted_week}
+    ).filter(
+        Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group']))
+    )
 
     # Add a form to filter the view
     select_form = SelectForm(request.GET or None)
 
     context['week'] = wanted_week
     context['group'] = group
-    context['periods_by_day'] = periods_by_day
+    context['lesson_periods'] = lesson_periods
     context['select_form'] = select_form
 
     return render(request, 'alsijil/group_week.html', context)