                         _hls.dispatchEvent(new HLSEvent(HLSEvent.TAGS_LOADED, _metrics));
                         _fragCurrent.data.shiftTags();
                         _hasDiscontinuity = false;
+
+                        _hasDemuxProgressedOnce = false;
+                        _emergencyFragment = null;
                     }
 
                 } else {

                HLSSettings.startFromBitrate !== -1 ||
                _levels.length == 1;

            // Determine if we can do progressively append to StreamBuffer
            if (_fragmentFirstLoaded || (_manifestJustLoaded && isFirstFragmentLevelDefined)) {

                //
                // if audio expected, PTS analysis is done on audio

                            (_fragCurrent.data.pts_min_video - _fragCurrent.data.pts_min_audio) +
                            "/" + (_fragCurrent.data.pts_max_video - _fragCurrent.data.pts_max_audio));
                    }
                }
            }

            //
            // Handle possible IDR Problem here
            // TODO: We should still have have simple removal of frames as option
            //
            if (_emergencyFragment) {

                _emergencyFragment = _emergencyFragmentDemuxedStream.getFragment();

                // Return all tags (audio/video) unless it is Video tag that precedes IDR
                var isNotBadVideoTag : Function = function (tag:FLVTag, index:int, vector:Vector.<FLVTag>):Boolean {
                    return tag.type !== FLVTag.AVC_NALU || tag.pts >= _fragCurrent.data.pts_min_video_header;
                }

                // Return only Video tags that precede and IDR
                var isGoodVideoTag : Function = function (tag:FLVTag, index:int, vector:Vector.<FLVTag>):Boolean {
                    return tag.type == FLVTag.AVC_NALU && tag.pts < _fragCurrent.data.pts_min_video_header;
                }

                // It's already been found
                if (!isNaN(_emergencyFragment.data.pts_min_video_header)) {
                    CONFIG::LOGGING {
                        Log.debug("FragmentLoader#_fragParsingCompleteHandler: Will fix non-IDR right now!");
                    }

                    var tagsExceptBadVideo : Vector.<FLVTag> = _fragCurrent.data.tags.filter(isNotBadVideoTag);
                    var goodNonIDRTags : Vector.<FLVTag> = _emergencyFragment.data.tags.filter(isGoodVideoTag);

                    _fragCurrent.data.tags = goodNonIDRTags.concat(tagsExceptBadVideo);

                    _emergencyFragment = null;
                    // TODO: Remove listener?
                    _emergencyFragmentDemuxedStream.close();
                    _emergencyFragmentDemuxedStream.removeEventListener(Event.COMPLETE, _onEmergencyDemuxedStreamComplete);
                    _emergencyFragmentDemuxedStream = null;

                } else { // bail leaving _emergencyFragment callback to recall this callback :(
                    CONFIG::LOGGING {
                        Log.debug("FragmentLoader#_fragParsingCompleteHandler: Cannot fix this non-IDR Fragment yet.");
                    }
                    _emergencyFragmentDemuxedStream.addEventListener(Event.COMPLETE, _onEmergencyDemuxedStreamComplete);
                    return;
                }
            }

