diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
index 2e339df..c936423 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
@@ -10,11 +10,15 @@
  ******************************************************************************/
 package org.eclipse.rap.clientscripting.demo;
 
+import java.io.IOException;
+import java.io.InputStream;
+
 import org.eclipse.rap.clientscripting.ClientListener;
-import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
 import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.client.service.JavaScriptLoader;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
+import org.eclipse.rap.rwt.service.ResourceManager;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -129,20 +133,22 @@
   public static void addNumKeyBehavior( Text text, int number, Button button ) {
     button.setData( "textWidget", WidgetUtil.getId( text ) );
     button.setData( "numValue", Integer.valueOf( number ) );
-    ClientListener listener = new ClientListener( getScript( "NumKey.js" ) );
-    button.addListener( SWT.MouseDown, listener );
+    ensure( "NumKey.js" );
+    button.addListener( SWT.MouseDown, new ClientListener( "var handleEvent = demoscripts.numKey;") );
   }
 
-  private static Script getScript( String fileName ) {
-    String key = CustomBehaviors.class.getCanonicalName() + fileName;
-    Script result = ( Script )RWT.getUISession().getAttribute( key );
-    if( result == null ) {
-      String scriptCode
-        = ResourceLoaderUtil.readTextContent( RESOURCES_PREFIX + fileName );
-      result = new Script( scriptCode );
-      RWT.getUISession().setAttribute( key, result );
+  private static void ensure( String fileName ) {
+    String path = RESOURCES_PREFIX + fileName;
+    InputStream stream = CustomBehaviors.class.getClassLoader().getResourceAsStream( path );
+    ResourceManager manager = RWT.getResourceManager();
+    manager.register( path, stream );
+    try {
+      stream.close();
+    } catch( IOException e ) {
+      e.printStackTrace();
     }
-    return result;
+    JavaScriptLoader jsl = RWT.getClient().getService( JavaScriptLoader.class );
+    jsl.require( manager.getLocation( path ) );
   }
 
 }
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/NumKey.js b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/NumKey.js
index eaf9e0b..f7df0f4 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/NumKey.js
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/NumKey.js
@@ -1,6 +1,9 @@
 //# sourceURL=NumKey.js
 
-var handleEvent = function( event ) {
+/*globals demoscripts:true */
+demoscripts = ( typeof demoscripts !== "undefined" ) ? demoscripts : {};
+
+demoscripts.numKey = function( event ) {
   var button = event.widget;
   var text = rap.getObject( button.getData( "textWidget" ) );
   var value = button.getData( "numValue" );
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
deleted file mode 100644
index aa77121..0000000
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/handler/ScriptHandler.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * 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.scripting.Script", {
-
-  factory : function( properties ) {
-    var text = properties.text;
-    return { "getText" : function(){ return text; } };
-  }
-
-} );
-
-}());
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
index 650419e..e34a59c 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
@@ -65,10 +65,6 @@
     super( scriptCode );
   }
 
-  public ClientListener( Script script ) {
-    super( script );
-  }
-
   /**
    * This method will NOT be called on a ClientListener.
    */
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
deleted file mode 100644
index 4234ee6..0000000
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * 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
- ******************************************************************************/
-package org.eclipse.rap.clientscripting;
-
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.remote.Connection;
-import org.eclipse.rap.rwt.remote.RemoteObject;
-
-
-public class Script {
-
-  private static final String REMOTE_TYPE = "rwt.scripting.Script";
-  private final RemoteObject remoteObject;
-
-  /**
-   * Provisional/Experimental
-   */
-  public Script( String scriptCode ) {
-    if( scriptCode == null ) {
-      throw new NullPointerException( "Parameter is null: scriptCode" );
-    }
-    Connection connection = RWT.getUISession().getConnection();
-    remoteObject = connection.createRemoteObject( REMOTE_TYPE );
-    remoteObject.set( "text", scriptCode );
-  }
-
-  public String getId() {
-    return remoteObject.getId();
-  }
-
-  public void dispose() {
-    remoteObject.destroy();
-  }
-
-}
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 cb48315..565ac35 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
@@ -13,7 +13,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.clientscripting.internal.resources.ClientScriptingResources;
 import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.remote.RemoteObject;
@@ -27,26 +26,14 @@
   private final Collection<ClientListenerBinding> bindings;
 
   public ClientFunction( String 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" );
-    }
-    remoteObject.set( "scriptId", script.getId() );
-  }
-
-  private ClientFunction() {
     bindings = new ArrayList<ClientListenerBinding>();
     remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
     ClientScriptingResources.ensure();
     remoteObject.set( "name", "handleEvent" );
+    if( scriptCode == null ) {
+      throw new NullPointerException( "Parameter is null: scriptCode" );
+    }
+    remoteObject.set( "scriptCode", scriptCode );
   }
 
   protected String getRemoteId() {
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 d488090..b2dce9a 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
@@ -33,7 +33,6 @@
     "FunctionFactory.js",
     "handler/FunctionHandler.js",
     "WidgetProxyFactory.js",
-    "handler/ScriptHandler.js",
     "init.js"
   };
 
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 6cab237..79f43ef 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
@@ -78,27 +78,6 @@
       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.scripting.Script", { "text" : code } ];
-      processor.processOperationArray( createScript );
-
-      processor.processOperation( {
-        "target" : "w3",
-        "action" : "create",
-        "type" : "rwt.scripting.Function",
-        "properties" : {
-          "scriptId" : "r3",
-          "name" : "handleEvent"
-        }
-      } );
-
-      var result = ObjectManager.getObject( "w3" );
-      assertTrue( result instanceof Function );
-    },
-
     testCallWithArgument : function() {
       var code = "function handleEvent( e ){ e.x++; }";
       var listener = FunctionFactory.createFunction( code, "handleEvent" );
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
deleted file mode 100644
index be62da0..0000000
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/Script_Test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * 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 = rwt.scripting.Function;
-var SWT = rwt.scripting.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.scripting.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 2165c24..7c9dd6e 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,6 @@
     "handler/EventBindingHandler.js",
     "EventProxy.js",
     "WidgetProxyFactory.js",
-    "handler/ScriptHandler.js",
     "init.js"
   };
 
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 e87ba40..f8e332e 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,8 +24,7 @@
     "Function_Test.js",
     "EventBinding_Test.js",
     "EventProxy_Test.js",
-    "WidgetProxyFactory_Test.js",
-    "Script_Test.js",
+    "WidgetProxyFactory_Test.js"
   };
 
   public String getName() {
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
index 128d187..87415f1 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
@@ -200,7 +200,7 @@
   }
 
   private void createListener() {
-    listener = spy( new ClientListener( new Script( "code" ) ) );
+    listener = spy( new ClientListener( "code" ) );
   }
 
 }
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
deleted file mode 100644
index 8282f04..0000000
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/Script_Test.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * 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
- ******************************************************************************/
-package org.eclipse.rap.clientscripting;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.eclipse.rap.rwt.remote.Connection;
-import org.eclipse.rap.rwt.remote.RemoteObject;
-import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.junit.*;
-
-
-public class Script_Test {
-
-  private static final String REMOTE_TYPE = "rwt.scripting.Script";
-  private Connection connection;
-  private RemoteObject remoteObject;
-
-  @Before
-  public void setUp() throws Exception {
-    Fixture.setUp();
-    connection = mock( Connection.class );
-    remoteObject = mock( RemoteObject.class );
-    when( remoteObject.getId() ).thenReturn( "foo" );
-    when( connection.createRemoteObject( REMOTE_TYPE ) ).thenReturn( remoteObject );
-    Fixture.fakeConnection( connection );
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    Fixture.tearDown();
-  }
-
-  @Test( expected = NullPointerException.class )
-  public void testConstructor_nullArgumenFails() {
-    new Script( null );
-  }
-
-  @Test
-  public void testConstructor_createsRemoteObject() {
-    new Script( "1+1;" );
-
-    verify( connection ).createRemoteObject( eq( REMOTE_TYPE ) );
-  }
-
-  @Test
-  public void testConstructor_setsTextOnRemoteObject() {
-    new Script( "1+1;" );
-
-    verify( remoteObject ).set( eq( "text" ), eq( "1+1;" ) );
-  }
-
-  @Test
-  public void testGetId() {
-    Script script = new Script( "1+1;" );
-
-    assertEquals( "foo", script.getId() );
-  }
-
-  @Test
-  public void testDispose_callsDestroyOnRemoteObject() {
-    Script script = new Script( "1+1;" );
-
-    script.dispose();
-
-    verify( remoteObject ).destroy();
-  }
-
-}
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 9c37407..3f31c41 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
@@ -23,7 +23,6 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.RemoteObject;
 import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -59,20 +58,10 @@
   }
 
   @Test
-  public void testCreation_failsWithScriptNull() {
-    try {
-      new ClientFunction( ( Script )null );
-      fail();
-    } catch( NullPointerException expected ) {
-      assertTrue( expected.getMessage().contains( "script" ) );
-    }
-  }
-
-  @Test
   public void testCreation_createsRemoteObject() {
     Connection connection = fakeConnection( mock( RemoteObject.class ), CLIENT_LISTENER_TYPE );
 
-    new ClientFunction( new Script( "script code" ) );
+    new ClientFunction( "script code" );
 
     verify( connection ).createRemoteObject( "rwt.scripting.Function" );
   }
@@ -106,18 +95,6 @@
   }
 
   @Test
-  public void testCreationWithScript_setsScriptId() {
-    RemoteObject listenerRemoteObject = mock( RemoteObject.class );
-    fakeConnection( listenerRemoteObject, CLIENT_LISTENER_TYPE );
-    Script script = mock( Script.class );
-    when( script.getId() ).thenReturn( "fooId" );
-
-    new ClientFunction( script );
-
-    verify( listenerRemoteObject ).set( eq( "scriptId" ), eq( "fooId" ) );
-  }
-
-  @Test
   public void testAddTo_createsBinding() {
     function.addTo( "w101", "MouseDown" );
 
@@ -173,7 +150,7 @@
   }
 
   private void createListener() {
-    function = spy( new ClientFunction( new Script( "code" ) ) );
+    function = spy( new ClientFunction( "code" ) );
   }
 
 }
