 		 */
 		public function getURL(request:URLRequest, asyncResultHandler:Function = null, asyncFaultHandler:Function = null, token:Object = null, dataFormat:String = "binary"):URLLoader
 		{
-			var urlLoader:CustomURLLoader = new CustomURLLoader(request, dataFormat);
-			urlLoader.addResponder(new AsyncResponder(asyncResultHandler || noOp, asyncFaultHandler || noOp, token));
+			var urlLoader:CustomURLLoader; 
+			try
+			{
+				urlLoader = new CustomURLLoader(request, dataFormat);
+				urlLoader.addResponder(new AsyncResponder(asyncResultHandler || noOp, asyncFaultHandler || noOp, token));
+			}
+			catch (e:Error)
+			{
+				// When an error occurs, we need to run the asyncFaultHandler later
+				// and return a new URLLoader. CustomURLLoader doesn't load if the 
+				// last parameter to the constructor is false.
+				urlLoader = new CustomURLLoader(request, dataFormat, false); 
+				StageUtils.callLater(
+					this, 
+					asyncFaultHandler || noOp, 
+					[new FaultEvent(FaultEvent.FAULT, false, true, new Fault(String(e.errorID), e.name, e.message)), token]
+				);
+			}
+			
 			return urlLoader;
 		}
 		

	{
		WeaveAPI.ProgressIndicator.removeTask(this);
		_isClosed = true;
		try {
			super.close();
		} catch (e:Error) { } // ignore close() errors
	}


internal class CustomURLLoader extends URLLoader
{
	public function CustomURLLoader(request:URLRequest, dataFormat:String, loadNow:Boolean = true)
	{
		_urlRequest = request;
		this.dataFormat = dataFormat;
		
		if (loadNow)
		{
			// keep track of pending requests
			WeaveAPI.ProgressIndicator.addTask(this);
			addResponder(new AsyncResponder(removePendingRequest, removePendingRequest));
			
			// set up event listeners
			addEventListener(Event.COMPLETE, handleGetResult);
			addEventListener(IOErrorEvent.IO_ERROR, handleGetError);
			addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
			addEventListener(ProgressEvent.PROGRESS, handleProgressUpdate);
			
			super.load(request);
		}
	}
	
	private var _asyncToken:AsyncToken = new AsyncToken();
