 				}
 			}
 
+			// 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)

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

			// Make sure we have knowledge of our current stream.
			if(!checkAnySegmentKnowledge(getManifestForQuality(lastQuality).segments) 
				&& !isBestEffortActive())
				_pendingBestEffortRequest = initiateBestEffortRequest(uint.MAX_VALUE, lastQuality);

			// Reload the manifest we were given, if we were given a manifest
			var manToReload:HLSManifestParser = manifest ? manifest : getManifestForQuality(reloadingQuality);
			reloadingManifest = new HLSManifestParser();
			reloadingManifest.type = manToReload.type;
			reloadingManifest.addEventListener(Event.COMPLETE, onReloadComplete);

			// If the requested quality is the same as the target quality, we've already asked for a reload, so return the last quality
			if (requestedQuality == targetQuality) return lastQuality;
			
			// The requested quality doesn't match either the targetQuality or the lastQuality, which means this is new territory.
			// So we will reload the manifest for the requested quality
			targetQuality = requestedQuality;
			trace("::getWorkingQuality Quality Change: " + lastQuality + " --> " + requestedQuality);
