 		/**
 		 * @private
 		 * If plugin cancel operation is forced call fault handler
-		 * @param e
-		 */
-		protected function onPluginCancel(e:NetPluginEvent):void
-		{
-			var plugin:INetPlugin = e.target as INetPlugin;
+		 * @param event
+		 */
+		protected function onPluginCancel(event:NetPluginEvent):void
+		{
+			var plugin:INetPlugin = event.target as INetPlugin;
 			var vo:MethodVO = _plugins[plugin];
 			disposePlugin(plugin);
-
-			var rm:ResultMediatorVO = prepareResultMediator(vo);
+			callFinalFault(vo, event.data);
+		}
+
+		/**
+		 * @private
+		 * We will proceed only on ready/complete event
+		 * @param event
+		 */
+		protected function onPluginComplete(event:NetPluginEvent):void
+		{
+			var plugin:INetPlugin = event.target as INetPlugin;
+			var vo:MethodVO = _plugins[plugin];
+
+			try
+			{
+				vo.args = plugin.args;
+			}
+			catch (e:Error)
+			{
+				disposePlugin(plugin);
+				callFinalFault(vo, e);
+				return;
+			}
+
+			disposePlugin(plugin);
+			callRemoteMethod(vo);
 			vo.dispose();
-
-			onFault(e.data, rm.name, rm.id, rm.uid);
-		}
-
-		/**
-		 * @private
-		 * We will proceed only on ready/complete event
-		 * @param e
-		 */
-		protected function onPluginComplete(e:NetPluginEvent):void
-		{
-			var plugin:INetPlugin = e.target as INetPlugin;
+		}
+
+		/**
+		 * @private
+		 * MultipartPlugin is ready to share arguments for remote method
+		 * @param event
+		 */
+		protected function onMultipartPluginReady(event:NetPluginEvent):void
+		{
+			var plugin:INetMultipartPlugin = event.target as INetMultipartPlugin;
 			var vo:MethodVO = _plugins[plugin];
+			vo = vo.clone();
 
 			try
 			{

				return;
			}

			disposePlugin(plugin);
			callRemoteMethod(vo);
			vo.dispose();
		}

		/**
		 * @private
		 * MultipartPlugin is ready to share arguments for remote method
		 * @param e
		 */
		protected function onMultipartPluginReady(e:NetPluginEvent):void
		{
			var plugin:INetMultipartPlugin = e.target as INetMultipartPlugin;
			var vo:MethodVO = _plugins[plugin];
			vo = vo.clone();

			try
			{
				vo.args = plugin.args;
			}
			catch (e:Error)
			{
				disposePlugin(plugin);
				callFinalFault(vo, e);
				vo.dispose();
				return;
			}

			callRemoteMethod(vo, plugin);
			vo.dispose();
		}

		/**
		 * @private
		 * MultipartPlugin finish successfully his work
		 * @param event
		 */
		protected function onMultipartPluginComplete(event:NetPluginEvent):void
		{
			var plugin:INetMultipartPlugin = event.target as INetMultipartPlugin;
			var vo:MethodVO = _plugins[plugin];
			disposePlugin(plugin);

			var rm:ResultMediatorVO = prepareResultMediator(vo);
			vo.dispose();

			onResult(event.data, rm.name, rm.id, rm.uid);
		}

		//---------------------------------------------------------------
