 		dispatchEvent(new ProgressEvent(ProgressEvent.PROGRESS,
 										false, false, loaded, total));
 
+		if (waitingToLoadResourceModules)
+		{
+			if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+			{
+				waitingToLoadResourceModules = false;
+				rslListLoader = resourceModuleListLoader;
+				rslDone = false;
+				// Start loading the resourceModules
+				rslListLoader.load(mx_internal::rslProgressHandler,
+								   mx_internal::rslCompleteHandler,
+								   mx_internal::rslErrorHandler,
+								   mx_internal::rslErrorHandler,
+								   mx_internal::rslErrorHandler);
+			}
+		}
+
 		// Check if we are finished
 		if (rslDone &&
 			((loaded >= total && total > 0) || (total == 0 && loaded > 0) || (root is MovieClip && (MovieClip(root).totalFrames > 2) && (MovieClip(root).framesLoaded >= 2)) ))
 		{
+			if (!sentDocFrameReady)
+			{
+				sentDocFrameReady = true;
+				// Dispatch a Frame1 done event.
+				dispatchEvent(new FlexEvent(FlexEvent.PRELOADER_DOC_FRAME_READY));
+				return;
+			}
+
+			if (waitingToLoadResourceModules)
+			{
+				if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+				{
+					waitingToLoadResourceModules = false;
+					rslListLoader = resourceModuleListLoader;
+					rslDone = false;
+					// Start loading the resourceModules
+					rslListLoader.load(mx_internal::rslProgressHandler,
+									   mx_internal::rslCompleteHandler,
+									   mx_internal::rslErrorHandler,
+									   mx_internal::rslErrorHandler,
+									   mx_internal::rslErrorHandler);
+					return;
+				}
+			}
+
 			timer.removeEventListener(TimerEvent.TIMER, timerHandler);
 			
 			// Stop the timer.
 			timer.reset();
-			
+		
 			// Dispatch a complete event.
 			dispatchEvent(new Event(Event.COMPLETE));
 			
 			// Dispatch an initProgress event.
 			dispatchEvent(new FlexEvent(FlexEvent.INIT_PROGRESS));
+
 		}
 	}
 

							   libs:Array = null,
							   sizes:Array = null,
							   rslList:Array = null,
							   resourceModuleURLs:Array = null):void
	{
        if ((libs != null || sizes != null) && rslList != null)
        {

	{
	    var index:int = rslListLoader.getIndex();
	    var item:RSLItem = rslListLoader.getItem(index);

		var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_COMPLETE);
		rslEvent.isResourceModule = (rslListLoader == resourceModuleListLoader);
		rslEvent.bytesLoaded = item.total;
		rslEvent.bytesTotal = item.total;
		rslEvent.rslIndex = index;
