diff --git a/program/views.py b/program/views.py
index ebc1038ddddcbcca84ee254a597e4860c23ae6ad..d6ac5b629e9007cbba21a2f4bbbc00fa9b208fc3 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1186,22 +1186,17 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
 
         return Response(resolution, status=status.HTTP_201_CREATED)
 
-    def validate_update_request(self):
-        """Validate that the request has the change_schedule permission and includes `schedule`."""
-
-        if not self.request.user.has_perm("program.change_schedule"):
-            return Response(status=status.HTTP_401_UNAUTHORIZED)
-
-        if "schedule" not in self.request.data:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
-
     def update(self, request, *args, **kwargs):
         """
         Update a schedule, generate timeslots, test for collisions and resolve
         them including notes.
         """
 
-        self.validate_update_request()
+        if not self.request.user.has_perm("program.change_schedule"):
+            return Response(status=status.HTTP_401_UNAUTHORIZED)
+
+        if "schedule" not in self.request.data:
+            return Response(status=status.HTTP_400_BAD_REQUEST)
 
         schedule = self.get_object()
 
@@ -1217,20 +1212,21 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
         Partial update a schedule without generating timeslots, testing or resolving collisions.
         """
 
-        self.validate_update_request()
+        if not self.request.user.has_perm("program.change_schedule"):
+            return Response(status=status.HTTP_401_UNAUTHORIZED)
 
         # only these fields can be updated without generating conflicts
         allowed = {"default_playlist_id", "is_repetition", "last_date"}
-        update_fields = set(request.data.get("schedule").keys())
+        update_fields = set(request.data.keys())
 
         if update_fields.issubset(allowed):
             schedule = self.get_object()
-            request_schedule = self.request.data.get("schedule")
+            request_data = self.request.data
 
-            if "default_playlist_id" in request_schedule:
-                default_playlist_id = request_schedule.get("default_playlist_id")
+            if "default_playlist_id" in request_data:
+                default_playlist_id = request_data.get("default_playlist_id")
 
-                if default_playlist_id == "":
+                if default_playlist_id == "" or default_playlist_id is None:
                     schedule.default_playlist_id = None
                 else:
                     try:
@@ -1240,11 +1236,14 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
 
                         return Response(data, status=status.HTTP_400_BAD_REQUEST)
 
-            if "is_repetition" in request_schedule:
-                schedule.is_repetition = bool(request_schedule.get("is_repetition"))
+            if is_repetition := request_data.get("is_repetition"):
+                if is_repetition == "true" or is_repetition == "1":
+                    schedule.is_repetition = True
+                elif is_repetition == "false" or is_repetition == "0":
+                    schedule.is_repetition = False
 
-            if "last_date" in request_schedule:
-                last_date = request_schedule.get("last_date")
+            if "last_date" in request_data:
+                last_date = request_data.get("last_date")
 
                 if last_date == "":
                     schedule.last_date = None