 					// Attempt to recover from a URL Error
 					if (errorSurrenderTimer.currentCount < recognizeBadStreamTime)
 					{	
-						needToRecover = true;
+						if (!recoveryBufferTimer)
+						{
+							recoveryBufferTimer = new Timer(bufferLength * 1000);// must convert seconds to miliseconds
+						}
+						else
+						{
+							recoveryBufferTimer.reset();
+							recoveryBufferTimer.delay = bufferLength * 1000;
+						}
+						recoveryBufferTimer.start();
+						
 						attemptStreamRecovery();
 						
 						return;

					// Switch to a backup stream if available
					if (currentStream)
					{
						indexHandler.switchToBackup(currentStream);
						hasGottenManifest = false;
					}
					else
						hasGottenManifest = true;

			
			private var hasStarted:Boolean = false;// true after we have played once, checked before automatically switching to a default stream
			
			private var retryAttemptCount:Number = 0;// this is how many times we have tried to recover from a URL error in a row. Used to assist in retry timing and scrubbing
			private var seekForwardBuffer:Number = 0.5;// this is how far ahead of the next segment we should seek to in order to ensure we load that segment
			private var lastErrorTime:Number = 0;// this is the last time there was an error. Used when determining if an error has been resolved
			private var firstSeekForwardCount:int = -1;// the count of errorSurrenderTimer when we first try to seek forward
			private var recoveryBufferMin:Number = 2;// how low the bufferTime can get in seconds before we start trying to recover a stream by seeking
			private var recoveryBufferTimer:Timer; // timer that will be set to the length of the buffer so that we can be guaranteed to recover
			
			public static var currentStream:HLSManifestStream;// this is the manifest we are currently using. Used to determine how much to seek forward after a URL error
			public static var indexHandler:HLSIndexHandler;// a reference to the active index handler. Used to update the quality list after a change.
