 
         /** append tags to NetStream **/
         public function appendTags(tags : Vector.<FLVTag>) : void {
-            _flvTagBufferDuration += (tags[tags.length - 1].pts - tags[0].pts) / 1000;
-            for each (var tag : FLVTag in tags) {
-                _flvTagBuffer.push(tag);
+            if (_seekState == HLSSeekStates.SEEKING) {
+                /* this is our first injection after seek(),
+                let's flush netstream now
+                this is to avoid black screen during seek command */
+                super.close();
+                CONFIG::FLASH_11_1 {
+                    try {
+                        super.useHardwareDecoder = HLSSettings.useHardwareVideoDecoder;
+                    } catch(e : Error) {
+                    }
+                }
+                super.play(null);
+                super.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
+                // immediatly pause NetStream, it will be resumed when enough data will be buffered in the NetStream
+                super.pause();
+            }
+            // append all tags
+            for each (var tagBuffer : FLVTag in tags) {
+                try {
+                    if (tagBuffer.type == FLVTag.DISCONTINUITY) {
+                        super.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
+                        super.appendBytes(FLVTag.getHeader());
+                    }
+                    super.appendBytes(tagBuffer.data);
+                } catch (error : Error) {
+                    var hlsError : HLSError = new HLSError(HLSError.TAG_APPENDING_ERROR, null, tagBuffer.type + ": " + error.message);
+                    _hls.dispatchEvent(new HLSEvent(HLSEvent.ERROR, hlsError));
+                }
+            }
+            if (_seekState == HLSSeekStates.SEEKING) {
+                // dispatch event to mimic NetStream behaviour
+                dispatchEvent(new NetStatusEvent(NetStatusEvent.NET_STATUS, false, false, {code:"NetStream.Seek.Notify", level:"status"}));
+                _setSeekState(HLSSeekStates.SEEKED);
             }
         };
 


        public function get netStreamBufferLength() : Number {
            if (_seekState == HLSSeekStates.SEEKING) {
                return _flvTagBufferDuration;
            } else {
                return super.bufferLength + _flvTagBufferDuration;
            }
        };


        public function HLSNetStream(connection : NetConnection, hls : HLS, fragmentLoader : FragmentLoader, streamBuffer : StreamBuffer) : void {
            super(connection);
            super.bufferTime = 0.1;
            _hls = hls;
            _bufferThresholdController = new BufferThresholdController(hls);
            _fragmentLoader = fragmentLoader;
