diff --git a/src/aura_engine/scheduling/timetable.py b/src/aura_engine/scheduling/timetable.py
index 18382eff6cf7ef319f521415d310460c114da2ef..9d7e3e88342f4618a49bc9aee636c382957e923b 100644
--- a/src/aura_engine/scheduling/timetable.py
+++ b/src/aura_engine/scheduling/timetable.py
@@ -397,10 +397,14 @@ class TimetableMerger:
             remote: Timeslot = ts_relation.get("remote")
 
             if (float(timestamp) - scheduling_window_start) < now:
-                # It's past the scheduling window, so keep the local one as is
+                # It's past the scheduling window start, so keep the local one as is
                 if local:
-                    merged_ts.append(local)
-                    resolution = "skip"
+                    # Only keep timeslots which have not yet ended.
+                    if local.end > now:
+                        merged_ts.append(local)
+                        resolution = "add | currently playing"
+                    else:
+                        resolution = "skip | out of scheduling window"
                 else:
                     # No local timeslot, so add it in any case.
                     resolution = "add"
@@ -416,22 +420,13 @@ class TimetableMerger:
                 elif local and remote:
                     # Timeslot existing locally, was updated or did not change remotely
                     # Update the local timeslot with possibly changed data
-                    local.show = remote.show
-                    local.episode = remote.episode
-                    local.id = remote.id
-                    local.repetition_id = remote.repetition_id
-                    if local.playlists.timeslot:
-                        local.playlists.timeslot.update_playlist(remote.playlists.timeslot)
-                    if local.playlists.schedule:
-                        local.playlists.schedule.update_playlist(remote.playlists.schedule)
-                    if local.playlists.show:
-                        local.playlists.show.update_playlist(remote.playlists.show)
+                    local.update(remote)
                     merged_ts.append(local)
                     resolution = "update"
                 else:
                     # Relations w/o local and remote timeslots should not happen
                     self.logger.critical(SU.red("Skipping invalid merge case!"))
-                    resolution = "skip"
+                    resolution = "skip | invalid merge case"
 
             local = "local:" + str(local).ljust(25)
             remote = "remote: " + str(remote).ljust(25)