 		private var dataService:AMF3Servlet;
 		private var propertyNameLookup:Dictionary = new Dictionary(); // Function -> String
 		private var methodHooks:Object = {}; // methodName -> Array (of MethodHook)
-        [Bindable] public var initialized:Boolean = false;
+        [Bindable] public var initialized:Boolean = false;
+		[Bindable] public var migrationProgress:String = '';
+		
+		//////////////////////////////
+		// Initialization
+		
+		private function initializeAdminService():void
+		{
+			var req:URLRequest = new URLRequest(adminService.servletURL);
+			req.data = new URLVariables();
+			req.method = URLRequestMethod.GET;
+			req.data["method"] = "initializeAdminService";
+			var stream:URLStream = new URLStream();
+			stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
+			stream.addEventListener(Event.COMPLETE, initializeAdminServiceComplete);
+			stream.addEventListener(IOErrorEvent.IO_ERROR, initializeAdminServiceError);
+			stream.load(req);
+		}
+		private function progressHandler(event:ProgressEvent):void
+		{
+			var stream:URLStream = event.target as URLStream;
+			if (stream.bytesAvailable > 0)
+			{
+				var text:String = migrationProgress;
+				text += "\n" + stream.readMultiByte(stream.bytesAvailable, "iso-8859-01");
+				text = StandardLib.replace(text, "\r\n", "\n");
+				text = StringUtil.trim(text).split('\n').pop();
+				migrationProgress = text;
+			}
+		}
+		private function initializeAdminServiceComplete(event:Event):void
+		{
+			initialized = true;
+			queue.begin();
+		}
+		private function initializeAdminServiceError(event:IOErrorEvent):void
+		{
+			messageDisplay(event.type, event.text, true);
+		}
+		
 		/**
 		 * @param method A pointer to a function of this WeaveAdminService.
 		 * @param captureHandler Receives the parameters of the RPC call with the 'this' pointer set to the AsyncToken object.


package weave.services
{
	import avmplus.DescribeType;
	
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;

		{
			adminService = registerLinkableChild(this, new AMF3Servlet(url + "/AdminService"));
			dataService = registerLinkableChild(this, new AMF3Servlet(url + "/DataService"));
			queue = registerLinkableChild(this, new AsyncInvocationQueue(true)); // paused
			
			var info:* = describeTypeJSON(this, DescribeType.METHOD_FLAGS);
			for each (var item:Object in info.traits.methods)
