 		{
 			// Trigger buffer update.
 			updateBufferTime();
+
+			// Feed buffer.
+			keepBufferFed();
 
 			// Check for seeking state.
 			if (seeking && time != timeBeforeSeek && _state != HTTPStreamingState.HALT)

							_unmuteTag.codecID = codecID;
							_unmuteTag.frameType = FLVTagVideo.FRAME_TYPE_INFO;
							_unmuteTag.infoPacketValue = FLVTagVideo.INFO_PACKET_SEEK_END;
							
							bytes = new ByteArray();
							_unmuteTag.write(bytes);
							_flvParserProcessed += bytes.length;

			}
		}
		
		private function keepBufferFed():void
		{
			// Check the actual amount of content present.
			if(super.bufferLength >= bufferFeedMin)
				return;

			var curTagOffset:int = 0;

			while(super.bufferLength < (bufferFeedMin + bufferFeedAmount)
			      && (pendingTags.length - curTagOffset) > 0)
			{
				// Append some tags.
				var buffer:ByteArray = new ByteArray();
				var tag:FLVTag = pendingTags[curTagOffset];
				buffer.length = FLVTag.TAG_HEADER_BYTE_COUNT + tag.dataSize;
				tag.write(buffer);
				curTagOffset++;

				// Do writing.
				trace("Writing " + buffer.length + " bytes");
				if(writeToMasterBuffer)
					_masterBuffer.writeBytes(buffer);				
				appendBytes(buffer);
			}

			// Erase the consumed tags.
			if(curTagOffset)
			{
				trace("Submitted " + curTagOffset + " tags, " + (pendingTags.length - curTagOffset) + " left");
				pendingTags.splice(0, curTagOffset);				
			}
		}

		public override function get bufferLength():Number
		{
			if(pendingTags.length == 0)
				return super.bufferLength;

			// Get active range of pending tags.
			var minTime:Number = Number.MAX_VALUE, maxTime:Number = 0.0;
			for(var i:int=0; i<pendingTags.length; i++)
			{
				var curTag:FLVTag = pendingTags[i];
				var curTime:Number = curTag.timestamp;
				if(curTime < minTime)
					minTime = curTime;
				if(curTime > maxTime)
					maxTime = curTime;
			}

			var len:Number = (maxTime - minTime) / 1000 + super.bufferLength;
			trace("CALCULATED LENGTH TO BE " + len + " (" + (maxTime/1000) + " , " + (minTime/1000) + ", " + super.bufferLength + ")");
			return len;
		}


		private function onBufferTag(tag:FLVTag):Boolean
		{
			trace("Got tag " + tag);
			// Do filter logic here.

			// Add to the queue.
			pendingTags.push(tag);

			return true;
		}

		/**
		 * @private
		 * 
		 * Attempts to use the appendsBytes method. Do nothing if this is not compiled
		 * for an Argo player or newer.
		 */
		private function attemptAppendBytes(bytes:ByteArray):void
		{
			trace("Parsing " + bytes.length);

			// Parse to FLV tags and insert into queue.
			bufferParser.parse(bytes, true, onBufferTag);

			// Sort tags.
			pendingTags.sort(function(a:FLVTag, b:FLVTag):int
			{
				return a.timestamp - b.timestamp;
			});

			// Feed Flash buffer if needed.
			keepBufferFed();
		}
		
		/**
