diff --git a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ListenerAdapter.js b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ListenerAdapter.js
index cb7e9eb..d76cc3b 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ListenerAdapter.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ListenerAdapter.js
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
+ * 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
  * which accompanies this distribution, and is available at
@@ -12,8 +12,11 @@
 rwt.remote.HandlerRegistry.add( "rwt.clientscripting.Listener", {
 
   factory : function( properties ) {
-    var script = rap.getObject( properties.script );
-    return new org.eclipse.rap.clientscripting.Function( script.getText() );
+    var scriptCode = properties.scriptCode;
+    if( !scriptCode ) {
+      scriptCode = rap.getObject( properties.scriptId ).getText();
+    }
+    return new org.eclipse.rap.clientscripting.Function( 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 15708d5..0e7d049 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
@@ -27,17 +27,25 @@
   private final Collection<ClientListenerBinding> bindings;
 
   public ClientFunction( String scriptCode ) {
-    this( new Script( scriptCode ) );
+    this();
+    if( scriptCode == null ) {
+      throw new NullPointerException( "Parameter is null: scriptCode" );
+    }
+    remoteObject.set( "scriptCode", scriptCode );
   }
 
   public ClientFunction( Script script ) {
+    this();
     if( script == null ) {
       throw new NullPointerException( "Parameter is null: script" );
     }
-    ClientScriptingResources.ensure();
+    remoteObject.set( "scriptId", script.getId() );
+  }
+
+  private ClientFunction() {
     bindings = new ArrayList<ClientListenerBinding>();
     remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
-    remoteObject.set( "script", script.getId() );
+    ClientScriptingResources.ensure();
   }
 
   protected String getRemoteId() {
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 c994498..af324de 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
@@ -30,14 +30,12 @@
 
     testCreateBindingByProtocol : function() {
       var code = "var handleEvent = function(){};";
-      var createScript = [ "create", "r3", "rwt.clientscripting.Script", { "text" : code } ];
-      Processor.processOperationArray( createScript );
       Processor.processOperation( {
         "target" : "w4",
         "action" : "create",
         "type" : "rwt.clientscripting.Listener",
         "properties" : {
-          "script" : "r3"
+          "scriptCode" : code
         }
       } );
 
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 54f7591..bfc697a 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
+ * 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
  * which accompanies this distribution, and is available at
@@ -63,6 +63,24 @@
       var ObjectManager = rwt.remote.ObjectRegistry;
       var processor = rwt.remote.MessageProcessor;
       var code = "var handleEvent = function(){};";
+
+      processor.processOperation( {
+        "target" : "w3",
+        "action" : "create",
+        "type" : "rwt.clientscripting.Listener",
+        "properties" : {
+          "scriptCode" : code
+        }
+      } );
+
+      var result = ObjectManager.getObject( "w3" );
+      assertTrue( result instanceof Function );
+    },
+
+    testCreateFunctionByProtocol_withScriptId : function() {
+      var ObjectManager = rwt.remote.ObjectRegistry;
+      var processor = rwt.remote.MessageProcessor;
+      var code = "var handleEvent = function(){};";
       var createScript = [ "create", "r3", "rwt.clientscripting.Script", { "text" : code } ];
       processor.processOperationArray( createScript );
 
@@ -71,7 +89,7 @@
         "action" : "create",
         "type" : "rwt.clientscripting.Listener",
         "properties" : {
-          "script" : "r3"
+          "scriptId" : "r3"
         }
       } );
 
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 581b763..0c9cff2 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
@@ -49,7 +49,6 @@
     Fixture.tearDown();
   }
 
-  @SuppressWarnings( "deprecation" )
   @Test
   public void testCreation_failsWithStringNull() {
     try {
@@ -80,7 +79,7 @@
   }
 
   @Test
-  public void testCreationWithString_initializesRemoteObject() {
+  public void testCreationWithString_sendsString() {
     RemoteObject listenerRemoteObject = mock( RemoteObject.class );
     RemoteObject scriptRemoteObject = mock( RemoteObject.class );
     Connection connection = mock( Connection.class );
@@ -90,9 +89,9 @@
     when( scriptRemoteObject.getId() ).thenReturn( "fooId" );
     Fixture.fakeConnection( connection );
 
-    new ClientFunction( new Script( "script code" ) );
+    new ClientFunction( "my script code" );
 
-    verify( listenerRemoteObject ).set( eq( "script" ), eq( "fooId" ) );
+    verify( listenerRemoteObject ).set( eq( "scriptCode" ), eq( "my script code" ) );
   }
 
   @Test
@@ -104,7 +103,7 @@
 
     new ClientFunction( script );
 
-    verify( listenerRemoteObject ).set( eq( "script" ), eq( "fooId" ) );
+    verify( listenerRemoteObject ).set( eq( "scriptId" ), eq( "fooId" ) );
   }
 
   @Test
