diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventBinding.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventBinding.js
index 3290f89..2b77613 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventBinding.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventBinding.js
@@ -19,9 +19,7 @@
     this._eventType = eventType;
     this._source = source;
     this._public = ClientScriptingUtil.isPublicObject( source );
-    this._targetFunction = function() {
-      targetFunction.call.apply( targetFunction, arguments );
-    };
+    this._targetFunction = targetFunction;
     if( this._public ) {
       this._eventSource = source;
       this._nativeType = eventType;
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/Function.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/Function.js
deleted file mode 100644
index 44665de..0000000
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/Function.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.createNamespace( "rwt.scripting", {} );
-
-// TODO [tb] : consider a name thats not a native Constructor ( "Function" )
-
-/*global handleEvent:false */
-rwt.scripting.Function = function( /* code */ ) {
-  // NOTE: the eval'd code will have the same scope as this function, therefore no local
-  // variables except the "imports" are used.
-  // TODO [tb] : It would be cleaner if the "import" was part of the eval'd code
-  var SWT = rwt.scripting.SWT;
-  try {
-    eval( arguments[ 0 ] );
-  } catch( ex ) {
-    var msg = "Could not parse ClientFunction: " + ( ex.message ? ex.message : ex );
-    throw new Error( msg );
-  }
-  try {
-    this._function = handleEvent; // TODO [tb] : allow specific function name(s)
-  } catch( ex ) {
-    // handled in next if
-  }
-  if( typeof this._function !== "function" ) {
-    throw new Error( "JavaScript code does not define a \"handleEvent\" function" );
-  }
-};
-
-rwt.scripting.Function.prototype = {
-
-  call : function() {
-    this._function.apply( window, arguments );
-  }
-
-};
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/FunctionFactory.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/FunctionFactory.js
new file mode 100644
index 0000000..ffcad5a
--- /dev/null
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/FunctionFactory.js
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+
+rwt.qx.Class.createNamespace( "rwt.scripting", {} );
+
+(function(){
+
+/*global handleEvent:false */
+rwt.scripting.FunctionFactory = {
+
+  createFunction : function( functionScript, name, scope ) {
+    var result;
+    var code = [
+      this._getScopeScript( scope ),
+      functionScript,
+      "\n\n",
+      "typeof ",
+      name,
+      " === \"undefined\" ? null : ",
+      name,
+      ";" ];
+    try {
+      result = this._secureEval.apply( window, [ code.join( "" ) ] );
+    } catch( ex ) {
+      var msg = "Could not parse Script for " + name + ":" + ( ex.message ? ex.message : ex );
+      throw new Error( msg );
+    }
+    if( typeof result !== "function" ) {
+      throw new Error( "Script does not define a function " + name );
+    }
+    return result;
+  },
+
+  _secureEval : function() {
+    return eval( arguments[ 0 ] );
+  },
+
+  _getScopeScript : function( scope ) {
+    var result = [];
+    for( var key in scope ) {
+      // NOTE: currently the values are evaluated "as is", i.e. json string.
+      //       Support for protocol objects would be possible, but may require "evalInScope" feature
+      result.push( "var ", key, " = ", scope[ key ], ";\n" );
+    }
+    return result.join( "" );
+  }
+
+};
+
+}());
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/EventBindingHandler.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/EventBindingHandler.js
index ebb8256..496b42f 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/EventBindingHandler.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/EventBindingHandler.js
@@ -11,7 +11,7 @@
 
 (function(){
 
-rwt.remote.HandlerRegistry.add( "rwt.clientscripting.EventBinding", {
+rwt.remote.HandlerRegistry.add( "rwt.scripting.EventBinding", {
 
   factory : function( properties ) {
     var ObjectRegistry = rwt.remote.ObjectRegistry;
@@ -26,4 +26,4 @@
 
 } );
 
-}());
\ No newline at end of file
+}());
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ListenerHandler.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/FunctionHandler.js
similarity index 76%
rename from bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ListenerHandler.js
rename to bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/FunctionHandler.js
index d1963f6..07bf8ea 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ListenerHandler.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/FunctionHandler.js
@@ -9,14 +9,16 @@
  *    EclipseSource - initial API and implementation
  ******************************************************************************/
 
-rwt.remote.HandlerRegistry.add( "rwt.clientscripting.Listener", {
+rwt.remote.HandlerRegistry.add( "rwt.scripting.Function", {
 
   factory : function( properties ) {
     var scriptCode = properties.scriptCode;
     if( !scriptCode ) {
       scriptCode = rap.getObject( properties.scriptId ).getText();
     }
-    return new rwt.scripting.Function( scriptCode );
+    var name = properties.name;
+    var scope = { "SWT" : "rwt.scripting.SWT" };
+    return rwt.scripting.FunctionFactory.createFunction( scriptCode, name, scope );
   }
 
 } );
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ScriptHandler.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ScriptHandler.js
index edb2326..aa77121 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ScriptHandler.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ScriptHandler.js
@@ -11,7 +11,7 @@
 
 (function(){
 
-rap.registerTypeHandler( "rwt.clientscripting.Script", {
+rap.registerTypeHandler( "rwt.scripting.Script", {
 
   factory : function( properties ) {
     var text = properties.text;
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
index 3b895c7..0de7710 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
@@ -17,7 +17,7 @@
 
 public class Script {
 
-  private static final String REMOTE_TYPE = "rwt.clientscripting.Script";
+  private static final String REMOTE_TYPE = "rwt.scripting.Script";
   private final RemoteObject remoteObject;
 
   public Script( String scriptCode ) {
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
index 0e7d049..cb48315 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
@@ -21,7 +21,7 @@
 
 public class ClientFunction {
 
-  private static final String REMOTE_TYPE = "rwt.clientscripting.Listener";
+  private static final String REMOTE_TYPE = "rwt.scripting.Function";
 
   private final RemoteObject remoteObject;
   private final Collection<ClientListenerBinding> bindings;
@@ -46,6 +46,7 @@
     bindings = new ArrayList<ClientListenerBinding>();
     remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
     ClientScriptingResources.ensure();
+    remoteObject.set( "name", "handleEvent" );
   }
 
   protected String getRemoteId() {
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
index 4dbcda0..da13bb6 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
@@ -16,7 +16,7 @@
 
 public class ClientListenerBinding {
 
-  private static final String REMOTE_TYPE = "rwt.clientscripting.EventBinding";
+  private static final String REMOTE_TYPE = "rwt.scripting.EventBinding";
 
   private final ClientFunction function;
   private final String targetId;
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
index 31e137b..b5af539 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
@@ -30,8 +30,8 @@
     "handler/EventBindingHandler.js",
     "EventBinding.js",
     "EventProxy.js",
-    "Function.js",
-    "handler/ListenerHandler.js",
+    "FunctionFactory.js",
+    "handler/FunctionHandler.js",
     "SWT.js",
     "WidgetProxyFactory.js",
     "handler/ScriptHandler.js",
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
index 5931107..7f06b07 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
@@ -33,16 +33,17 @@
       Processor.processOperation( {
         "target" : "w4",
         "action" : "create",
-        "type" : "rwt.clientscripting.Listener",
+        "type" : "rwt.scripting.Function",
         "properties" : {
-          "scriptCode" : code
+          "scriptCode" : code,
+          "name" : "handleEvent"
         }
       } );
 
       Processor.processOperation( {
         "target" : "w5",
         "action" : "create",
-        "type" : "rwt.clientscripting.EventBinding",
+        "type" : "rwt.scripting.EventBinding",
         "properties" : {
           "eventType" : "KeyDown",
           "targetObject" : "w3",
@@ -98,10 +99,8 @@
     },
 
     testDoItFalseKeyDown : function() {
-      var listener = {
-        "call" : function( event ) {
-          event.doit = false;
-        }
+      var listener = function( event ) {
+        event.doit = false;
       };
 
       new EventBinding( text, "KeyDown", listener );
@@ -112,10 +111,8 @@
     },
 
     testDoItFalseMouseDown : function() {
-      var listener = {
-        "call" : function( event ) {
-          event.doit = false;
-        }
+      var listener = function( event ) {
+        event.doit = false;
       };
 
       new EventBinding( text, "MouseDown", listener );
@@ -253,10 +250,8 @@
       TestUtil.flush();
       text.setValue( "foo" );
       var textValue;
-      var handler = {
-        "call" : function( event ) {
-          textValue = event.widget.getText();
-        }
+      var handler = function( event ) {
+        textValue = event.widget.getText();
       };
 
       new EventBinding( text, "Verify", handler );
@@ -269,10 +264,8 @@
     testVerifyEventDoItFalse : function() {
       TestUtil.flush();
       text.setValue( "foo" );
-      var handler = {
-        "call" : function( event ) {
-          event.doit = false;
-        }
+      var handler = function( event ) {
+        event.doit = false;
       };
 
       new EventBinding( text, "Verify", handler );
@@ -285,10 +278,8 @@
     testVerifyEventDoItFalseSelection : function() {
       TestUtil.flush();
       text.setValue( "fooxxx" );
-      var handler = {
-        "call" : function( event ) {
-          event.doit = false;
-        }
+      var handler = function( event ) {
+        event.doit = false;
       };
 
       new EventBinding( text, "Verify", handler );
@@ -301,10 +292,8 @@
     testVerifyBindingProtectAgainstTypeOverwrite : function() {
       TestUtil.flush();
       text.setValue( "foo" );
-      var handler = {
-        "call" : function( event ) {
-          event.type = "boom";
-        }
+      var handler = function( event ) {
+        event.type = "boom";
       } ;
 
       new EventBinding( text, "Verify", handler );
@@ -316,10 +305,8 @@
     testVerifyEventTextOverwrite : function() {
       TestUtil.flush();
       text.setValue( "foo" );
-      var handler = {
-        "call" : function( event ) {
-          event.text = "bar";
-        }
+      var handler = function( event ) {
+        event.text = "bar";
       };
 
       new EventBinding( text, "Verify", handler );
@@ -331,10 +318,8 @@
     testVerifyEventSelectionAfterTextOverwrite : function() {
       TestUtil.flush();
       text.setValue( "foo" );
-      var handler = {
-        "call" : function( event ) {
-          event.text = "bar";
-        }
+      var handler = function( event ) {
+        event.text = "bar";
       } ;
 
       new EventBinding( text, "Verify", handler );
@@ -348,10 +333,8 @@
     testVerifyEventSelectionAfterReplacementTextOverwrite : function() {
       TestUtil.flush();
       text.setValue( "foo" );
-      var handler = {
-        "call" : function( event ) {
-          event.text = "bar";
-        }
+      var handler = function( event ) {
+        event.text = "bar";
       } ;
 
       new EventBinding( text, "Verify", handler );
@@ -366,12 +349,10 @@
       TestUtil.flush();
       text.setValue( "foo" );
       var selection;
-      var handler = {
-        "call" : function( event ) {
-          event.text = "bar";
-          selection = event.widget.getSelection();
-        }
-      } ;
+      var handler = function( event ) {
+        event.text = "bar";
+        selection = event.widget.getSelection();
+      };
 
       new EventBinding( text, "Verify", handler );
       this._inputText( text, "foxo", [ 2, 2 ] );
@@ -385,11 +366,9 @@
       TestUtil.flush();
       text.setValue( "foo" );
       var selection;
-      var handler = {
-        "call" : function( event ) {
-          event.text = "bar";
-          selection = event.widget.getSelection();
-        }
+      var handler = function( event ) {
+        event.text = "bar";
+        selection = event.widget.getSelection();
       } ;
 
       new EventBinding( text, "Verify", handler );
@@ -519,12 +498,11 @@
     // helper
 
     _createLogger : function() {
-      var result = {
-        "log" : [],
-        "call" : function( arg ) {
-          this.log.push( arg ); // it's important that "this" is available, like in Function.js
-        }
+      var log = [];
+      var result = function( arg ) {
+        log.push( arg );
       };
+      result.log = log;
       return result;
     },
 
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventProxy_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventProxy_Test.js
index b3dab80..07b0f55 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventProxy_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventProxy_Test.js
@@ -1,4 +1,4 @@
-/*******************************************************************************
+ /*******************************************************************************
  * Copyright (c) 2012, 2013 EclipseSource and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -490,10 +490,8 @@
       TestUtil.flush();
       var gc;
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          gc = ev.gc;
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        gc = ev.gc;
       } );
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
 
@@ -516,10 +514,8 @@
       TestUtil.flush();
       var gc = [];
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          gc.push( ev.gc );
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        gc.push( ev.gc );
       } );
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
@@ -552,10 +548,8 @@
       TestUtil.flush();
       var gc;
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          gc = ev.gc;
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        gc = ev.gc;
       } );
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
 
@@ -580,17 +574,15 @@
       TestUtil.flush();
       var props;
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          var gc = ev.gc;
-          props = [
-            gc.strokeStyle,
-            gc.fillStyle,
-            rwt.html.Font.fromString( gc.font ).toCss()
-          ];
-          gc.strokeStyle = "#ff00ff";
-          gc.fillStyle = "#00ff00";
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        var gc = ev.gc;
+        props = [
+          gc.strokeStyle,
+          gc.fillStyle,
+          rwt.html.Font.fromString( gc.font ).toCss()
+        ];
+        gc.strokeStyle = "#ff00ff";
+        gc.fillStyle = "#00ff00";
       } );
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
@@ -616,13 +608,11 @@
       TestUtil.flush();
       var props;
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          var gc = ev.gc;
-          props = [ gc.strokeStyle, gc.fillStyle ];
-          gc.strokeStyle = "#ff00ff";
-          gc.fillStyle = "#00ff00";
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        var gc = ev.gc;
+        props = [ gc.strokeStyle, gc.fillStyle ];
+        gc.strokeStyle = "#ff00ff";
+        gc.fillStyle = "#00ff00";
       } );
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
       WidgetProxyFactory.getWidgetProxy( canvas ).redraw();
@@ -656,17 +646,15 @@
       var fontArr = [ [ "Arial" ], 11, false, true ];
       var props;
 
-      new EventBinding( canvas, "Paint", {
-        "call" : function( ev ) {
-          var gc = ev.gc;
-          props = [
-            gc.strokeStyle,
-            gc.fillStyle,
-            rwt.html.Font.fromString( gc.font ).toCss()
-          ];
-          gc.strokeStyle = "#ff00ff";
-          gc.fillStyle = "#00ff00";
-        }
+      new EventBinding( canvas, "Paint", function( ev ) {
+        var gc = ev.gc;
+        props = [
+          gc.strokeStyle,
+          gc.fillStyle,
+          rwt.html.Font.fromString( gc.font ).toCss()
+        ];
+        gc.strokeStyle = "#ff00ff";
+        gc.fillStyle = "#00ff00";
       } );
       serverGc.init( 500, 500, fontArr, [ 170, 170, 170 ], [ 187, 187, 187 ] );
 
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Function_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Function_Test.js
index b3d292b..6cab237 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Function_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Function_Test.js
@@ -11,7 +11,7 @@
 
 (function() {
 
-var Function = rwt.scripting.Function;
+var FunctionFactory = rwt.scripting.FunctionFactory;
 var SWT = rwt.scripting.SWT;
 
 rwt.qx.Class.define( "org.eclipse.rap.clientscripting.Function_Test", {
@@ -23,7 +23,7 @@
     testCreateFunctionWrongNamed : function() {
       var code = "function foo(){}";
       try {
-        new Function( code );
+        FunctionFactory.createFunction( code, "handleEvent" );
         fail();
       } catch( ex ) {
         // expected
@@ -33,8 +33,8 @@
     /*global global:true */
     testCreateFunctionWithHelper : function() {
       var code = "var foo = function(){  global = 1;  };var handleEvent = function(){ foo(); };";
-      var listener = new Function( code );
-      listener.call();
+      var listener = FunctionFactory.createFunction( code, "handleEvent" );
+      listener();
       assertEquals( 1, global );
       delete global; // An alternative would be to create a storage for such cases in TestUtil
     },
@@ -42,7 +42,7 @@
     testCreateFunctionSyntaxError : function() {
       var code = "null.no!;";
       try {
-        new Function( code );
+        FunctionFactory.createFunction( code, "handleEvent" );
         fail();
       } catch( ex ) {
         // expected
@@ -52,7 +52,7 @@
     testCreateFunctionNoFunction : function() {
       var code = "1";
       try {
-        new Function( code );
+        FunctionFactory.createFunction( code, "handleEvent" );
         fail();
       } catch( ex ) {
         // expected
@@ -67,9 +67,10 @@
       processor.processOperation( {
         "target" : "w3",
         "action" : "create",
-        "type" : "rwt.clientscripting.Listener",
+        "type" : "rwt.scripting.Function",
         "properties" : {
-          "scriptCode" : code
+          "scriptCode" : code,
+          "name" : "handleEvent"
         }
       } );
 
@@ -81,15 +82,16 @@
       var ObjectManager = rwt.remote.ObjectRegistry;
       var processor = rwt.remote.MessageProcessor;
       var code = "var handleEvent = function(){};";
-      var createScript = [ "create", "r3", "rwt.clientscripting.Script", { "text" : code } ];
+      var createScript = [ "create", "r3", "rwt.scripting.Script", { "text" : code } ];
       processor.processOperationArray( createScript );
 
       processor.processOperation( {
         "target" : "w3",
         "action" : "create",
-        "type" : "rwt.clientscripting.Listener",
+        "type" : "rwt.scripting.Function",
         "properties" : {
-          "scriptId" : "r3"
+          "scriptId" : "r3",
+          "name" : "handleEvent"
         }
       } );
 
@@ -99,34 +101,47 @@
 
     testCallWithArgument : function() {
       var code = "function handleEvent( e ){ e.x++; }";
-      var listener = new Function( code );
+      var listener = FunctionFactory.createFunction( code, "handleEvent" );
+
       var event = {
         x : 1
       };
 
-      listener.call( event );
+      listener( event );
 
       assertEquals( 2, event.x );
     },
 
     testNoContext : function() {
       var code = "var handleEvent = function(){ this.x++; }";
-      var listener = new Function( code );
+      var listener = FunctionFactory.createFunction( code, "handleEvent" );
       listener.x = 1;
 
-      listener.call();
+      listener();
 
       assertEquals( 1, listener.x );
     },
 
-    testImportedClasses : function() {
+    testImportSWT : function() {
+      var ObjectManager = rwt.remote.ObjectRegistry;
+      var processor = rwt.remote.MessageProcessor;
+      var code = "var handleEvent = function( obj ){ obj.SWT = SWT;};";
+
+      processor.processOperation( {
+        "target" : "w3",
+        "action" : "create",
+        "type" : "rwt.scripting.Function",
+        "properties" : {
+          "scriptCode" : code,
+          "name" : "handleEvent"
+        }
+      } );
+      var result = ObjectManager.getObject( "w3" );
       var obj = {};
-      var code = "function handleEvent( obj ){ obj.SWT = SWT; }";
-      var fun = new Function( code );
 
-      fun.call( obj );
+      result( obj );
 
-      assertIdentical( SWT, obj.SWT );
+      assertIdentical( rwt.scripting.SWT, obj.SWT );
     }
 
   }
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js
index c94569b..be62da0 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js
@@ -24,7 +24,7 @@
     testCreateScriptWithTextByProtocol : function() {
       var code = "1+1;";
 
-      var op = [ "create", "r3", "rwt.clientscripting.Script", { "text" : code } ];
+      var op = [ "create", "r3", "rwt.scripting.Script", { "text" : code } ];
       MessageProcessor.processOperationArray( op );
 
       var ObjectManager = rwt.remote.ObjectRegistry;
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/WidgetProxyFactory_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/WidgetProxyFactory_Test.js
index 659d373..d6e457a 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/WidgetProxyFactory_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/WidgetProxyFactory_Test.js
@@ -284,12 +284,10 @@
 
     _createLogger : function() {
       var log = [];
-      var result = {
-        "log" : log,
-        "call" : function( arg ) {
-          log.push( arg );
-        }
+      var result = function( arg ) {
+        log.push( arg );
       };
+      result.log = log;
       return result;
     },
 
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingResourcesContribution.java b/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingResourcesContribution.java
index 5a2921c..506d1dd 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingResourcesContribution.java
+++ b/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingResourcesContribution.java
@@ -24,8 +24,8 @@
   private static final String[] RESOURCES = new String[] {
     "ClientScriptingUtil.js",
     "SWT.js",
-    "Function.js",
-    "handler/ListenerHandler.js",
+    "FunctionFactory.js",
+    "handler/FunctionHandler.js",
     "EventBinding.js",
     "handler/EventBindingHandler.js",
     "EventProxy.js",
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/Script_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/Script_Test.java
index 325300e..8282f04 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/Script_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/Script_Test.java
@@ -10,7 +10,7 @@
  ******************************************************************************/
 package org.eclipse.rap.clientscripting;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -24,7 +24,7 @@
 
 public class Script_Test {
 
-  private static final String REMOTE_TYPE = "rwt.clientscripting.Script";
+  private static final String REMOTE_TYPE = "rwt.scripting.Script";
   private Connection connection;
   private RemoteObject remoteObject;
 
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
index 0c9cff2..9c37407 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
@@ -32,9 +32,8 @@
 
 public class ClientFunction_Test {
 
-  private static final String CLIENT_LISTENER_TYPE =  "rwt.clientscripting.Listener";
-  private static final String LISTENER_BINDING_TYPE =  "rwt.clientscripting.EventBinding";
-  private static final String SCRIPT_TYPE = "rwt.clientscripting.Script";
+  private static final String CLIENT_LISTENER_TYPE = "rwt.scripting.Function";
+  private static final String LISTENER_BINDING_TYPE = "rwt.scripting.EventBinding";
 
   private ClientFunction function;
 
@@ -75,27 +74,39 @@
 
     new ClientFunction( new Script( "script code" ) );
 
-    verify( connection ).createRemoteObject( "rwt.clientscripting.Listener" );
+    verify( connection ).createRemoteObject( "rwt.scripting.Function" );
   }
 
   @Test
-  public void testCreationWithString_sendsString() {
+  public void testCreation_setsName() {
     RemoteObject listenerRemoteObject = mock( RemoteObject.class );
     RemoteObject scriptRemoteObject = mock( RemoteObject.class );
     Connection connection = mock( Connection.class );
     when( connection.createRemoteObject( eq( CLIENT_LISTENER_TYPE ) ) )
       .thenReturn( listenerRemoteObject );
-    when( connection.createRemoteObject( eq( SCRIPT_TYPE ) ) ).thenReturn( scriptRemoteObject );
     when( scriptRemoteObject.getId() ).thenReturn( "fooId" );
     Fixture.fakeConnection( connection );
 
     new ClientFunction( "my script code" );
 
+    verify( listenerRemoteObject ).set( eq( "name" ), eq( "handleEvent" ) );
+  }
+
+  @Test
+  public void testCreationWithString_setsString() {
+    RemoteObject listenerRemoteObject = mock( RemoteObject.class );
+    Connection connection = mock( Connection.class );
+    when( connection.createRemoteObject( eq( CLIENT_LISTENER_TYPE ) ) )
+    .thenReturn( listenerRemoteObject );
+    Fixture.fakeConnection( connection );
+
+    new ClientFunction( "my script code" );
+
     verify( listenerRemoteObject ).set( eq( "scriptCode" ), eq( "my script code" ) );
   }
 
   @Test
-  public void testCreationWithScript_initializesRemoteObject() {
+  public void testCreationWithScript_setsScriptId() {
     RemoteObject listenerRemoteObject = mock( RemoteObject.class );
     fakeConnection( listenerRemoteObject, CLIENT_LISTENER_TYPE );
     Script script = mock( Script.class );
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
index daa644d..bc7a287 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
@@ -27,7 +27,7 @@
 
 public class ClientListenerBinding_Test {
 
-  private static final String LISTENER_BINDING_TYPE =  "rwt.clientscripting.EventBinding";
+  private static final String LISTENER_BINDING_TYPE =  "rwt.scripting.EventBinding";
 
   private ClientListener listener1;
   private ClientListener listener2;
@@ -80,7 +80,7 @@
 
     binding = new ClientListenerBinding( listener1, "w101", "KeyDown" );
 
-    verify( connection ).createRemoteObject( eq( "rwt.clientscripting.EventBinding" ) );
+    verify( connection ).createRemoteObject( eq( "rwt.scripting.EventBinding" ) );
   }
 
   @Test
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources_Test.java
index 3f117e3..292514f 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources_Test.java
@@ -10,6 +10,8 @@
  ******************************************************************************/
 package org.eclipse.rap.clientscripting.internal.resources;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.endsWith;
@@ -23,10 +25,6 @@
 
 import java.io.*;
 import java.util.concurrent.atomic.AtomicReference;
-import static org.junit.Assert.*;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
 
 import org.eclipse.rap.rwt.application.Application;
 import org.eclipse.rap.rwt.client.Client;
@@ -34,6 +32,7 @@
 import org.eclipse.rap.rwt.service.ResourceLoader;
 import org.eclipse.rap.rwt.service.ResourceManager;
 import org.eclipse.rap.rwt.testfixture.Fixture;
+import org.junit.*;
 import org.mockito.ArgumentCaptor;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -78,10 +77,10 @@
     ClientScriptingResources.ensure();
 
     String registeredCode = registeredStringCaptor.get();
-    assertTrue( registeredCode.contains( "clientscripting.ClientScriptingUtil =" ) );
-    assertTrue( registeredCode.contains( "clientscripting.EventBinding =" ) );
-    assertTrue( registeredCode.contains( "clientscripting.SWT =" ) );
-    assertTrue( registeredCode.contains( "clientscripting.EventProxy =" ) );
+    assertTrue( registeredCode.contains( "scripting.ClientScriptingUtil =" ) );
+    assertTrue( registeredCode.contains( "scripting.EventBinding =" ) );
+    assertTrue( registeredCode.contains( "scripting.SWT =" ) );
+    assertTrue( registeredCode.contains( "scripting.EventProxy =" ) );
   }
 
   static String read( InputStream inputStream, String charset ) throws IOException {
