 		private var _parser:M3U8PlaylistParser = null;
 		private var _loadTime:int = 0;
 		private var _playlistLoader:URLLoader = null;
+        private var _errorHit:Boolean = false;  // So we only handle HTTP errors once; handling stuff twice dorks things.
 		
 		public function M3U8Loader(){
 			super();

				updateLoadTrait(_loadTrait, LoadState.LOAD_ERROR);
				dispatchEvent(new MediaErrorEvent(MediaErrorEvent.MEDIA_ERROR, false, false, new MediaError(err.errorID, err.message)));
			}
		}       
		
		private function onHTTPStatus(event:flash.events.HTTPStatusEvent):void 
		{   
			if( event.status >= 400 )
			{
				// some 400-level fail, let's forward this out to jscript land
				removeListeners();
				updateLoadTrait(_loadTrait, LoadState.LOAD_ERROR);
				_loadTrait.dispatchEvent(new MediaErrorEvent(MediaErrorEvent.MEDIA_ERROR, false, false, new MediaError(event.status, "")));
			}

		
		private function onError(e:ErrorEvent):void
		{
            if( !_errorHit) {
                _errorHit = true;
                updateLoadTrait(_loadTrait, LoadState.LOAD_ERROR);
                _loadTrait.dispatchEvent(new MediaErrorEvent(MediaErrorEvent.MEDIA_ERROR, false, false, new MediaError(0, 'This video is not available.')));
            }
		}
		
		private function onComplete(e:Event):void
		{
			removeListeners();
			
			try
            {
				CONFIG::LOGGING
				{
					_loadTime = getTimer() - _loadTime;
