diff --git a/modules/scheduling/calender_fetcher.py b/modules/scheduling/calender_fetcher.py
index 5fe03b6c3811cbc078e283bcf5fa27b5749a6c1e..e75f78e6dd29292cc4e8266768b620e614228445 100644
--- a/modules/scheduling/calender_fetcher.py
+++ b/modules/scheduling/calender_fetcher.py
@@ -184,6 +184,7 @@ class CalendarFetcher:
         """
         # store fetched entries => do not have to fetch playlist_id more than once
         fetched_entries=[]
+        local_station_fallback_id = str(self.config.get("scheduling_station_fallback_id"))
 
         try:
             for schedule in self.fetched_schedule_data:
@@ -191,15 +192,27 @@ class CalendarFetcher:
                 # Extend schedule with details of show (e.g. slug)
                 schedule = self.__fetch_show_details__(schedule)
 
+                # Get IDs of playlists
+                playlist_id = self.get_playlist_id(schedule, "playlist_id")
+                schedule_fallback_id = self.get_playlist_id(schedule, "schedule_fallback_id")
+                show_fallback_id = self.get_playlist_id(schedule, "show_fallback_id")
+                station_fallback_id = self.get_playlist_id(schedule, "station_fallback_id")
+
                 # Retrieve playlist and the fallback playlists for every schedule.
                 # If a playlist (like station_fallback) is already fetched, it is not fetched again but reused
-                schedule["playlist"]          = self.__fetch_schedule_playlist__(schedule, "playlist_id",          fetched_entries)
-                schedule["schedule_fallback"] = self.__fetch_schedule_playlist__(schedule, "schedule_fallback_id", fetched_entries)
-                schedule["show_fallback"]     = self.__fetch_schedule_playlist__(schedule, "show_fallback_id",     fetched_entries)
-                schedule["station_fallback"]  = self.__fetch_schedule_playlist__(schedule, "station_fallback_id",  fetched_entries)
+                schedule["playlist"]          = self.__fetch_schedule_playlist__(schedule, playlist_id,          fetched_entries)
+                schedule["schedule_fallback"] = self.__fetch_schedule_playlist__(schedule, schedule_fallback_id, fetched_entries)
+                schedule["show_fallback"]     = self.__fetch_schedule_playlist__(schedule, show_fallback_id,     fetched_entries)
+                schedule["station_fallback"]  = self.__fetch_schedule_playlist__(schedule, station_fallback_id,  fetched_entries)
+
+                # If Steering doesn't provide a station fallback, the local one is used
+                if not schedule["station_fallback"] and int(local_station_fallback_id) > 0:
+                    schedule["station_fallback"]  = self.__fetch_schedule_playlist__(schedule, local_station_fallback_id,  fetched_entries)
+                    if schedule["station_fallback"]:
+                        self.logger.info("Set station fallback to playlist #%s" % local_station_fallback_id)
 
         except Exception as e:
-            self.logger.error("Error: "+str(e))
+            self.logger.error("Error while fetching playlists from API endpoints: " + str(e), e)
 
 
 
@@ -229,7 +242,20 @@ class CalendarFetcher:
 
 
 
-    def __fetch_schedule_playlist__(self, schedule, id_name, fetched_playlists):
+    def get_playlist_id(self, schedule, id_name):
+        """
+        Extracts the playlist ID for a given playlist (fallback) type.
+        """
+        playlist_id = str(schedule[id_name])
+        if not playlist_id or playlist_id == "None":
+            self.logger.info("No value defined for '%s' in schedule '#%s'" % (id_name, schedule["schedule_id"]))
+            return None
+        
+        return playlist_id
+
+
+
+    def __fetch_schedule_playlist__(self, schedule, playlist_id, fetched_playlists):
         """
         Fetches the playlist for a given schedule.
 
@@ -239,71 +265,35 @@ class CalendarFetcher:
             fetched_playlists ([]): Previously fetched playlists to avoid re-fetching
 
         Returns:
-            ([Schedule]):   Array of playlists
+            (Playlist):             Playlist of type `id_name`
         """
         servicetype = "api_tank_playlist"
+        playlist = None
 
-        # fetch playlists from TANK
-        if not "show_slug" in schedule:
-            raise ValueError("Missing 'show_slug' for schedule", schedule)
-
-        slug = str(schedule["show_slug"])
-        url = self.__build_url__(servicetype, "${SLUG}", slug)
-        json_response = self.__fetch_data__(servicetype, url)
-
-        # if a playlist is already fetched, do not fetch it again
+        # If playlist is already fetched, use the existing one
         for playlist in fetched_playlists:
-            # FIXME schedule["playlist_id"] is always None, review if playlist["id"] is valid
-            if playlist["id"] == schedule[id_name]:
-                self.logger.debug("Playlist #" + str(schedule[id_name]) + " already fetched")
+            if playlist["id"] == playlist_id:
+                self.logger.debug("Playlist #%s already fetched" % playlist_id)
                 return playlist
 
-        if self.config.get("use_test_data"):
-            # FIXME move hardcoded test-data to separate testing logic.
-            self.logger.warn("Using test-data for fetch-schedule-playlist")
-            json_response = self.create_test_data(id_name, schedule)
-
-        # convert to list
-        playlists = simplejson.loads(json_response)
-        pl = None
-
-        if "results" in playlists:
-            # FIXME Currently we use hardcoded playlist and fallback assignments due to issues in Dashboard/Steering/Tank
-            self.logger.warn("FIXME Currently we use hardcoded playlist and fallback assignments due to issues in Dashboard/Steering/Tank")
-            i = 0
-            for playlist in playlists["results"]:
-                
-                pl = playlist
-                # FIXME Always use the first playlist, since the schedule.playlist_id is currently not set via Dashboard:
-                if i == 0 and id_name == "playlist_id":
-                    schedule["playlist_id"] = playlist["id"]
-                    break
-                # FIXME Currently it's not possible to set & query the fallback for a timeslot/show/station; therefore hardcode it:
-                elif i == 1 and id_name == "schedule_fallback_id":
-                    schedule["schedule_fallback_id"] = playlist["id"]
-                    break
-                elif i == 2 and id_name == "show_fallback_id":
-                    schedule["show_fallback_id"] = playlist["id"]
-                    break
-                elif i == 3 and id_name == "station_fallback_id":
-                    schedule["station_fallback_id"] = playlist["id"]
-                    break   
-                else:
-                    pl = None             
-                i += 1
-
-            if pl:
-                # Note: playlists without entries are allowed -> will trigger fallbacks
-                if "entries" in pl:
-                    for entry in pl["entries"]:
-                        if entry["uri"].startswith("file"):
-                            entry["filename"] = self.convert_to_filename(entry["uri"])
-
-                fetched_playlists.append(pl)
-
-
-        return pl
+        if not playlist_id:
+            return None
+
+        url = self.__build_url__(servicetype, "${ID}", playlist_id)
+        json_response = self.__fetch_data__(servicetype, url)
+
+        if not json_response:
+            self.logger.critical(SimpleUtil.red("Playlist #%s could not be fetched or is not available! JSON response: '%s'" % (playlist_id, json_response)))
+            return None
+        
+        try:
+            playlist = simplejson.loads(json_response)
+        except Exception as e:
+            self.logger.critical(SimpleUtil.red("Error while parsing JSON response for playlist: %s" % json_response), e)
 
+        fetched_playlists.append(playlist)
+        return playlist
+ 
 
 
     def convert_to_filename(self, uri):
@@ -366,7 +356,7 @@ class CalendarFetcher:
         url = self.url[type]
         if placeholder:
             url = url.replace(placeholder, value)
-            # self.logger.info("built URL: "+url)
+            self.logger.debug("Built API URL: "+url)
         return url