         }
 
         private function onSetClientCalled(methods: Array):void {
+            var self = this;
             this._nc.client = new Object();
             try {
                 for (var i = 0; i < methods.length; i++) {
                     var method = methods[i];
-                    this._nc.client[method] = function(... args) {
-                        callExternalInterface(_jsClientCallProxyName, method, args);
+                    log('info', 'Creating method '+method);
+                    var createMethod = function(method) {
+                        var m = method;
+                        return function(... args) {
+                            var _incomingArgs:* = args as Array;
+                            callExternalInterface.apply(self, [_jsClientCallProxyName, m].concat(_incomingArgs));
+                        }
                     }
+                    this._nc.client[method] = createMethod(method);
                 }
             } catch (e: Error) {
                 log('error', e.message);

        private var _jsNetStatusEventProxyName: String = "NetConnection.onNetStatusEvent";
        private var _jsSecurityErrorEventProxyName: String = "NetConnection.onSecurityErrorEvent";
        private var _jsClientCallProxyName: String = "NetConnection.onClientCall";
    

        public function NetConnectionPolyfill() {

    import flash.display.Sprite;
    import flash.system.Security;
    import flash.net.NetConnection;
    import flash.net.Responder;
    import flash.external.ExternalInterface;
    import flash.events.Event;
    import flash.events.AsyncErrorEvent
