 			if(super.bufferLength >= bufferFeedMin)
 				return;
 
+			// We want to keep the actual required buffer short so we don't stall with
+			// tags still pending.
+			super.bufferTime = bufferFeedMin;
+
+			// Append tag bytes until we've hit our time buffer goal.
 			var curTagOffset:int = 0;
-
-			while(super.bufferLength < (bufferFeedMin + bufferFeedAmount)
+			while(super.bufferLength <= (bufferFeedMin + bufferFeedAmount)
 			      && (pendingTags.length - curTagOffset) > 0)
 			{
 				// Append some tags.

						logger.error("I think I should reset playback.");
					}
					appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
				}
			}


				var header:FLVHeader = new FLVHeader();
				var headerBytes:ByteArray = new ByteArray();
				header.write(headerBytes);
				appendBytes(headerBytes);

				flushPendingTags();
			}
		}
		
