Create ScriptHandler.js, use it in FunctionAdapter.js 

Server not yet updated, will not run
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/.settings/org.moreunit.prefs b/bundles/org.eclipse.rap.clientscripting.demo/.settings/org.moreunit.prefs
new file mode 100644
index 0000000..b23adba
--- /dev/null
+++ b/bundles/org.eclipse.rap.clientscripting.demo/.settings/org.moreunit.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.moreunit.preferences.version=2
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 765673c..cb7e9eb 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
@@ -12,8 +12,8 @@
 rwt.remote.HandlerRegistry.add( "rwt.clientscripting.Listener", {
 
   factory : function( properties ) {
-    var code = properties.code;
-    return new org.eclipse.rap.clientscripting.Function( code );
+    var script = rap.getObject( properties.script );
+    return new org.eclipse.rap.clientscripting.Function( script.getText() );
   }
 
 } );
diff --git a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ScriptHandler.js b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ScriptHandler.js
new file mode 100644
index 0000000..edb2326
--- /dev/null
+++ b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ScriptHandler.js
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+
+(function(){
+
+rap.registerTypeHandler( "rwt.clientscripting.Script", {
+
+  factory : function( properties ) {
+    var text = properties.text;
+    return { "getText" : function(){ return text; } };
+  }
+
+} );
+
+}());
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 01bd90a..c994498 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,12 +30,14 @@
 
     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" : {
-          "code" : code
+          "script" : "r3"
         }
       } );
 
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 bc3bf73..54f7591 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
@@ -60,19 +60,21 @@
     },
 
     testCreateFunctionByProtocol : function() {
-      var code = "var handleEvent = 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 );
 
       processor.processOperation( {
         "target" : "w3",
         "action" : "create",
         "type" : "rwt.clientscripting.Listener",
         "properties" : {
-          "code" : code
+          "script" : "r3"
         }
       } );
 
-      var ObjectManager = rwt.remote.ObjectRegistry;
       var result = ObjectManager.getObject( "w3" );
       assertTrue( result instanceof Function );
     },
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
new file mode 100644
index 0000000..8fea7b1
--- /dev/null
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+
+(function() {
+
+var Function = org.eclipse.rap.clientscripting.Function;
+var SWT = org.eclipse.rap.clientscripting.SWT;
+var MessageProcessor = rwt.remote.MessageProcessor;
+
+rwt.qx.Class.define( "org.eclipse.rap.clientscripting.Script_Test", {
+
+  extend : rwt.qx.Object,
+
+  members : {
+
+    testCreateScriptWithTextByProtocol : function() {
+      var code = "1+1;";
+
+      var op = [ "create", "r3", "rwt.clientscripting.Script", { "text" : code } ];
+      MessageProcessor.processOperationArray( op );
+
+      var ObjectManager = rwt.remote.ObjectRegistry;
+      var result = ObjectManager.getObject( "r3" );
+      assertEquals( 2, eval( result.getText() ) );
+      MessageProcessor.processOperationArray( [ "destroy", "r3" ] );
+    }
+
+  }
+
+} );
+
+}());
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 86d12a3..9f24e60 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
@@ -29,7 +29,8 @@
     "EventBinding.js",
     "EventBindingAdapter.js",
     "EventProxy.js",
-    "WidgetProxy.js"
+    "WidgetProxy.js",
+    "ScriptHandler.js"
   };
 
   public String getName() {
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingTestContribution.java b/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingTestContribution.java
index b5edd60..00d30ef 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingTestContribution.java
+++ b/tests/org.eclipse.rap.clientscripting.jstest/src/org/eclipse/rap/clientscripting/internal/ClientScriptingTestContribution.java
@@ -24,7 +24,8 @@
     "Function_Test.js",
     "EventBinding_Test.js",
     "EventProxy_Test.js",
-    "WidgetProxy_Test.js"
+    "WidgetProxy_Test.js",
+    "Script_Test.js",
   };
 
   public String getName() {