                         }
                     }
                 } else if (level_found == true) {
-                    level.url = _extractURL(line, base);
-                    level.manifest_index = levels.length;
-                    levels.push(level);
+                    if(!(level.bitrate in bitrateDictionary)) {
+                        level.url = _extractURL(line, base);
+                        level.manifest_index = levels.length;
+                        levels.push(level);
+                        bitrateDictionary[level.bitrate] = true;
+                    } else {
+                       CONFIG::LOGGING {
+                            Log.debug("discard failover level with bitrate " + level.bitrate);
+                        }
+                    }
                     level_found = false;
                 }
             }

    import flash.events.*;
    import flash.net.*;
    import flash.utils.ByteArray;
    import flash.utils.getTimer;
    import org.mangui.hls.constant.HLSLoaderTypes;
    import org.mangui.hls.constant.HLSTypes;

        /** Extract levels from manifest data. **/
        public static function extractLevels(data : String, base : String = '') : Vector.<Level> {
            var levels : Vector.<Level> = new Vector.<Level>();
            var bitrateDictionary : Dictionary = new Dictionary();
            var level : Level;
            var lines : Array = data.split("\n");
            var level_found : Boolean = false;
