diff --git a/src/engine.liq b/src/engine.liq
index 43c3e94b7915616f1c8a00ace49d9872d4d53ebe..c8ce6d28f70cffbc89f368cc636c94e6b1455c68 100644
--- a/src/engine.liq
+++ b/src/engine.liq
@@ -44,12 +44,12 @@ def on_metadata_notification(meta) =
     timeslot_id = list.assoc(default="-1", "timeslot_id", meta)
     playlist_id = list.assoc(default="-1", "playlist_id", meta)
     playlist_track_num = list.assoc(default="", "playlist_item", meta)
-    track_duration = int_of_float(request.duration(meta["filename"]))
-    track_type = (eval_track_type(meta["track_type"], meta["source"]))
-    track_start = meta["on_air"]
-    track_artist = meta["artist"]
-    track_album = meta["album"]
-    track_title = meta["title"]
+    track_start = list.assoc(default=meta["track_start"], "on_air", meta)
+    track_duration = get_meta_track_duration(meta)
+    track_type = eval_track_type(meta["track_type"], meta["source"])
+    track_artist = list.assoc(default=meta["track_artist"], "artist", meta)
+    track_album = list.assoc(default=meta["track_album"], "album", meta)
+    track_title = list.assoc(default=meta["track_title"], "title", meta)
 
     source_type = eval_source_type(meta["source"])
     if source_type == "fallback" then
@@ -121,6 +121,7 @@ stripped_stream = blank.strip(
     )
 
 output_source = attach_fallback_source(stripped_stream)
+output_source.on_metadata(on_metadata_notification)
 
 
 #####################################
diff --git a/src/functions.liq b/src/functions.liq
index 6696da87319fa0a7ad7daff40c155109bbcfda95..15d8e6d771b069d2a438793809c3e4a678c733ae 100644
--- a/src/functions.liq
+++ b/src/functions.liq
@@ -18,6 +18,22 @@
 
 
 
+# Reads the track duration
+#   a.) when available from the file
+#   b.) as a fallback from the meta field "track_duration"
+#
+# Returns
+#   (int) duration in seconds
+def get_meta_track_duration(meta) =
+    track_duration = int_of_float(request.duration(meta["filename"]))
+    if track_duration != -1 then
+        track_duration
+    else
+        int_of_string(meta["track_duration"])
+    end
+end
+
+
 # Posts a playlog to the Engine API
 def post_playlog(api_url, data) =
     json_data = json()