diff --git a/modules/scheduling/calendar.py b/modules/scheduling/calendar.py
index da666066feb4969158e2603902c416e2a8e6d232..52b9927772bc70537625b0a04546ce2b3a39ccf3 100644
--- a/modules/scheduling/calendar.py
+++ b/modules/scheduling/calendar.py
@@ -85,12 +85,15 @@ class AuraCalendarService(threading.Thread):
 
     def run(self):
         """
-        Fetch calendar data and store it in the database
+        Fetch calendar data and store it in the database. Also handles local deletion of remotely
+        deleted schedules.
 
         Returns
             Schedule ([]):  An arrar of retrieved schedules passed via `self.queue`
         """
         result = []
+        now_unix = SimpleUtil.timestamp()
+        scheduling_window_start = self.config.get("scheduling_window_start")
 
         try:
             fetched_schedule_data = self.calendar_fetcher.fetch()
@@ -103,21 +106,29 @@ class AuraCalendarService(threading.Thread):
             
             # Check if existing schedules have been deleted
             local_schedules = Schedule.select_programme(datetime.now())
-
             for local_schedule in local_schedules:
 
-                # Filter the local schedule from the fetched ones
-                existing_schedule = list(filter(lambda new_schedule: \
-                    new_schedule["schedule_id"] == local_schedule.schedule_id, fetched_schedule_data))
-                
-                if existing_schedule:
-                    self.logger.debug("Schedule (schedule_id: %s) is still existing remotely:" % \
-                        (local_schedule.schedule_id))
+                # Only allow deletion of schedules which are before the start of the scheduling window
+                if local_schedule.start_unix > now_unix and (local_schedule.start_unix - scheduling_window_start) > now_unix:
+
+                    # Filter the local schedule from the fetched ones
+                    existing_schedule = list(filter(lambda new_schedule: \
+                        new_schedule["schedule_id"] == local_schedule.schedule_id, fetched_schedule_data))
+                    
+                    if existing_schedule:
+                        # self.logger.debug("Schedule #%s is still existing remotely!" % (local_schedule.schedule_id))
+                        pass
+                    else:
+                        self.logger.info("Schedule #%s has been deleted remotely, hence also delete it locally [%s]" % \
+                            (local_schedule.schedule_id, str(local_schedule)))
+                        local_schedule.delete(commit=True)
+                        self.logger.info("Deleted local schedule #%s from database" % local_schedule.schedule_id)
+
                 else:
-                    self.logger.info("Schedule (schedule_id: %s) has been deleted remotely! [%s]" % \
-                        (local_schedule.schedule_id, str(local_schedule)))
-                    local_schedule.delete(commit=True)
-                    self.logger.info("Deleted local schedule from database (schedule_id: %s)" % local_schedule.schedule_id)
+                    msg = "Schedule #%s has been deleted remotely. Since the scheduling window already started, it won't be deleted locally." % local_schedule.schedule_id
+                    self.logger.warn(SimpleUtil.red(msg))
+
+                
 
 
             # Process fetched schedules