 		 */
 		public function addHook(method:Function, captureHandler:Function, resultHandler:Function, faultHandler:Function = null):void
 		{
-			var methodName:String = propertyNameLookup.get(method);
+			var methodName:String = getMethodName(method);
 			if (!methodName)
 				throw new Error("method must be a member of WeaveAdminService");
 			var hooks:Array = methodHooks[methodName];

			
			hookCaptureHandler(methodName, parameters, query);

			if ([null, Array, String, Number, int, uint].indexOf(returnType) < 0)
			{
				castedQuery = query.then(WeaveDataServlet.castResult.bind(this, returnType));
			}

			castedQuery.then(hookHandler.bind(this, methodName, parameters), alertFault.bind(this, methodName, parameters, query));

		{
			adminService = Weave.linkableChild(this, new AMF3Servlet(url + "/AdminService"));
			dataService = Weave.linkableChild(this, new AMF3Servlet(url + "/DataService"));
			
			resetQueue();
			initializeAdminService();
		}

		private var map_method_name:Object = new JS.Map(); // method->string

		private function getMethodName(method:Object):String
		{
			if (method is String)
				return method as String;
			
			if (!map_method_name.has(method))
			{
				for each (var name:String in JS.getPropertyNames(this, true))
				{
					if (this[name] === method)
					{
						map_method_name.set(method, name);
						return name;
					}
				}
			}
			return map_method_name.get(method);
		}
		
		private function resetQueue():void
