 				}
 			}
 
+			// Fire a reload if needed.
+			if(quality != origQuality && manifest.streamEnds == false)
+			{
+				trace("Firing reload of manifest for quality " + origQuality);
+				// Kick the reloader.
+				onReloadTimer(null);
+			}
+
 			// Attempt remap.
 			var newSequence:int = remapSequence(getLastSequenceManifest(), currentManifest, getLastSequence());
 			if(newSequence == -1)

			updateSegmentTimes(currentManifest.segments);
			updateSegmentTimes(newManifest.segments);

			const fudgeTime:Number = 1.0;
			var currentSeg:HLSManifestSegment = getSegmentBySequence(currentManifest.segments, currentSequence);
			var newSeg:HLSManifestSegment = currentSeg ? getSegmentContainingTime(newManifest.segments, currentSeg.startTime + (end ? currentSeg.duration : 0), !end) : null;
			if(newSeg == null)
			{
				trace("Remapping from " + currentSequence);

			trace("Scheduling reload for quality " + quality);
			reloadingQuality = quality;

			// Reload the manifest we were given, if we were given a manifest
			var manToReload:HLSManifestParser = manifest ? manifest : getManifestForQuality(reloadingQuality);
			if(getTimer() - manToReload.timestamp < (manToReload.targetDuration * 500))
			{
				trace("Aborting, don't reload faster than " + (manToReload.targetDuration * 500) + "ms");
				lastQuality = reloadingQuality;
				dispatchDVRStreamInfo();
				updateTotalDuration();
				reloadingManifest = null; // don't want to hang on to it

				if (reloadTimer) reloadTimer.start();

				stalled = false;
				HLSHTTPNetStream.hasGottenManifest = true;

				return;
			}
			
			reloadingManifest = new HLSManifestParser();
			reloadingManifest.type = manToReload.type;
			reloadingManifest.addEventListener(Event.COMPLETE, onReloadComplete);
