 			
 			trace("Best effort download error " + event.toString());
 			
+			// Note the failure.
+			failureWitnesses[event.url] = 1;
+
 			// unregister our listeners
 			stopListeningToBestEffortDownload(false);
 			

					{
						// We can't live stall as mismatched sequence IDs might cause an arbitrary live stall delay.
						// Instead, if our guess is off the live edge, just adjust our guess.
						nextSeg.id = nextFragmentId;
					}
					else

			}
			
			var newSequence:int = -1;

			var haveNewKnowledge:Boolean = checkAnySegmentKnowledge(newManifest.segments);
			var haveOldKnowledge:Boolean = checkAnySegmentKnowledge(currentManifest.segments);
			
			var firedInitiate:Boolean = false;

			// Check knowledge on both sequences and queue request as appropriate.
			if(!haveNewKnowledge && !isBestEffortActive())
			{
				trace("(A) Encountered a live/VOD manifest with no timebase knowledge, request newest segment via best effort path for quality " + reloadingQuality);
				_pendingBestEffortRequest = initiateBestEffortRequest(getLastSequence() + 1, reloadingQuality, newManifest.segments, newManifest);
				firedInitiate = true;
			} 
			else if(!haveOldKnowledge && !isBestEffortActive())
			{
				trace("(B) Encountered a live/VOD manifest with no timebase knowledge, request newest segment via best effort path for quality " + reloadingQuality);
				_pendingBestEffortRequest = initiateBestEffortRequest(getLastSequence() + 1, lastQuality, currentManifest.segments, currentManifest);
				firedInitiate = true;
			}

			if(firedInitiate && _pendingBestEffortRequest == null)
			{
				// We can't BEF due to a failure, so just remap to beginning (if VOD) or live edge (if live)
				trace("Failed to initiate BEF, so returning best-guess sequence ID.");
				if(newManifest.streamEnds)
				{
					if(newManifest.segments.length)
						return newManifest.segments[0].id;
					else
						return 0;
				}
				else
				{
					if(newManifest.segments.length)
						return newManifest.segments[newManifest.segments.length-1].id;
					else
						return int.MAX_VALUE;
				}
			}
			
			if(!haveNewKnowledge || !haveOldKnowledge)
			{
				trace("Bailing on remap due to lack of knowledge!");
				
