             var pos : Number = position;
             var bufLen : Number = _hls.stream.bufferLength;
             var duration : Number = _playlistDuration;
-            // dispatch media time event only if position/buffer or playlist duration has changed
-            if(pos != _lastPos || bufLen != _lastBufLen || duration != _lastDuration) {
+            // dispatch media time event only if playback not completed AND position/buffer or playlist duration has changed
+            if(!_playbackCompleted && (pos != _lastPos || bufLen != _lastBufLen || duration != _lastDuration)) {
                 _hls.dispatchEvent(new HLSEvent(HLSEvent.MEDIA_TIME, new HLSMediatime(pos, duration, bufLen, backBufferLength, _liveSlidingMain, _liveSlidingAltAudio)));
                 _lastPos = pos;
                 _lastDuration = duration;

        /** monitor fragment loader stall events, arm a boolean  **/
        private function _liveLoadingStalledHandler(event : HLSEvent) : void {
            _liveLoadingStalled = true;
        };
    }
}


            _hls.addEventListener(HLSEvent.PLAYLIST_DURATION_UPDATED, _playlistDurationUpdated);
            _hls.addEventListener(HLSEvent.LAST_VOD_FRAGMENT_LOADED, _lastVODFragmentLoadedHandler);
            _hls.addEventListener(HLSEvent.AUDIO_TRACK_SWITCH, _audioTrackChange);
            _hls.addEventListener(HLSEvent.PLAYBACK_COMPLETE, _playbackComplete);
        }

        public function dispose() : void {
