 			CONFIG::LOGGING
 			{
 				logger.debug("Saw tag @ " + realTimestamp + " timestamp=" + tag.timestamp + " currentTime=" + currentTime + " _seekTime=" + _seekTime + " _enhancedSeekTarget="+ _enhancedSeekTarget + " dataSize=" + tag.dataSize);
+			}
+
+			if (_playForDuration >= 0)
+			{
+				if (_initialTime >= 0)	// until we know this, we don't know where to stop, and if we're enhanced-seeking then we need that logic to be what sets this up
+				{
+					if (currentTime > (_initialTime + _playForDuration))
+					{
+
+						setState(HTTPStreamingState.STOP);
+						_flvParserDone = true;
+						if (_seekTime < 0)
+						{
+							_seekTime = _playForDuration + _initialTime;	// FMS behavior... the time is always the final time, even if we seek to past it
+							// XXX actually, FMS  actually lets exactly one frame though at that point and that's why the time gets to be what it is
+							// XXX that we don't exactly mimic that is also why setting a duration of zero doesn't do what FMS does (plays exactly that one still frame)
+						}
+						return false;
+					}
+				}
 			}
 
 			if (!isNaN(_enhancedSeekTarget))

						var haveSeenVideoTag:Boolean = false;
						
						// twiddle and dump
						for (i=0; i<_enhancedSeekTags.length; i++)
						{
							var vTag:FLVTag = _enhancedSeekTags[i];
							

		private function insertScriptDataTag(tag:FLVTagScriptDataObject, first:Boolean = false):void
		{
			if (!_insertScriptDataTags)
				_insertScriptDataTags = new Vector.<FLVTagScriptDataObject>();
			
			if (first)
				_insertScriptDataTags.unshift(tag);	
			else
				_insertScriptDataTags.push(tag);
		}
		
		/**
