diff --git a/aleksis/apps/chronos/frontend/components/Timetable.vue b/aleksis/apps/chronos/frontend/components/Timetable.vue
index 78947059bd524bcd829077d790dec3581bfe42a2..794883d3d420a3ca4bd837d31575da07918c1fe5 100644
--- a/aleksis/apps/chronos/frontend/components/Timetable.vue
+++ b/aleksis/apps/chronos/frontend/components/Timetable.vue
@@ -4,6 +4,7 @@ import TimetableWrapper from "./TimetableWrapper.vue";
 
 <script>
 import { DateTime } from "luxon";
+import { gqlTimetableDays } from "./timetables.graphql";
 
 export default {
   name: "Timetable",
@@ -12,6 +13,7 @@ export default {
       calendarFocus: "",
       calendarType: "week",
       initialRouteFocusSet: false,
+      timetableDays: [1, 2, 3, 4, 5],
     };
   },
   methods: {
@@ -79,6 +81,11 @@ export default {
       });
     },
   },
+  apollo: {
+    timetableDays: {
+      query: gqlTimetableDays,
+    },
+  },
 };
 </script>
 
@@ -93,6 +100,7 @@ export default {
         ]"
         :params="{ type: selected.type, id: selected.objId }"
         ref="calendarWithControls"
+        :calendar-days-of-week="timetableDays"
         @changeCalendarFocus="setCalendarFocus"
         @changeCalendarType="setCalendarType"
         @calendarReady="setInnerFocusAndType"
diff --git a/aleksis/apps/chronos/frontend/components/timetables.graphql b/aleksis/apps/chronos/frontend/components/timetables.graphql
index 5bbe46f734f1981ad1c2648d50a8a6e8d7bd04fc..6e575f2726e920e31656c2470495b12399532132 100644
--- a/aleksis/apps/chronos/frontend/components/timetables.graphql
+++ b/aleksis/apps/chronos/frontend/components/timetables.graphql
@@ -7,3 +7,7 @@ query gqlAvailableTimetables {
     shortName
   }
 }
+
+query gqlTimetableDays {
+  timetableDays
+}
diff --git a/aleksis/apps/chronos/preferences.py b/aleksis/apps/chronos/preferences.py
index a2bd26ef9eac55d0ddca38091619b3d008279803..c883bbbf418cf626cc2c7634cefb21d04b3ee847 100644
--- a/aleksis/apps/chronos/preferences.py
+++ b/aleksis/apps/chronos/preferences.py
@@ -122,3 +122,26 @@ class SupervisionEventFeedColor(StringPreference):
     verbose_name = _("Supervision calendar feed color")
     widget = ColorWidget
     required = True
+
+
+@site_preferences_registry.register
+class DaysInCalendar(MultipleChoicePreference):
+    section = chronos
+    name = "days_in_calendar"
+    default = ["1", "2", "3", "4", "5"]
+    verbose_name = _("Days of the week that appear in the timetable")
+    choices = [
+        ("0", _("Sunday")),
+        ("1", _("Monday")),
+        ("2", _("Tuesday")),
+        ("3", _("Wednesday")),
+        ("4", _("Thursday")),
+        ("5", _("Friday")),
+        ("6", _("Saturday")),
+    ]
+    required = True
+
+    def validate(self, value):
+        for v in value:
+            if int(v) not in self.get_choice_values():
+                raise ValidationError(f"{v} is not a valid choice")
diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py
index d23eb0c7c8bf056b66f3b7c074f2a73e6b6f1182..ab1d00255b430ecc67275a4710aebcc0f63ddd51 100644
--- a/aleksis/apps/chronos/schema/__init__.py
+++ b/aleksis/apps/chronos/schema/__init__.py
@@ -10,6 +10,7 @@ from aleksis.core.schema.base import (
 from aleksis.core.schema.group import GroupType
 from aleksis.core.schema.person import PersonType
 from aleksis.core.schema.room import RoomType
+from aleksis.core.util.core_helpers import get_site_preferences, has_person
 
 from ..models import LessonEvent
 from ..util.build import build_substitutions_list
@@ -234,6 +235,7 @@ class Query(graphene.ObjectType):
         SubstitutionsForDateType,
         date=graphene.Date(),
     )
+    timetable_days = graphene.List(graphene.Int)
 
     def resolve_timetable_teachers(self, info, **kwargs):
         return get_teachers(info.context.user)
@@ -285,6 +287,25 @@ class Query(graphene.ObjectType):
             substitutions=[sub["el"] for sub in substitutions],
         )
 
+    @staticmethod
+    def resolve_timetable_days(root, info, **kwargs):
+        first_day = "default"
+
+        if has_person(info.context):
+            first_day = info.context.user.person.preferences["calendar__first_day_of_the_week"]
+
+        if first_day == "default":
+            first_day = get_site_preferences()["calendar__first_day_of_the_week"]
+
+        first_day = int(first_day)
+
+        days = list(map(str, range(7)))
+        sorted_days = days[first_day:] + days[:first_day]
+
+        allowed_days = get_site_preferences()["chronos__days_in_calendar"]
+
+        return list(map(int, filter(lambda d: d in allowed_days, sorted_days)))
+
 
 class Mutation(graphene.ObjectType):
     create_amend_lessons = AmendLessonBatchCreateMutation.Field()