diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggest_JsTest.java b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggest_JsTest.java
index 5263580..c87b341 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggest_JsTest.java
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggest_JsTest.java
@@ -45,7 +45,7 @@
     jasmine.parseScript( LOCAL_LOADER, "jasmine/specs/AutoSuggestSpec.js" );
     jasmine.parseScript( SCRIPTING_LOADER, "org/eclipse/rap/clientscripting/SWT.js" );
     jasmine.parseScript( SCRIPTING_LOADER, "org/eclipse/rap/clientscripting/Function.js" );
-    jasmine.addResource( "AutoSuggest", LOCAL_LOADER, AUTO_SUGGEST_JS );
+    jasmine.addResource( "AutoSuggest.js", LOCAL_LOADER, AUTO_SUGGEST_JS );
     jasmine.execute();
   }
 
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
index 596b8de..77075be 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
@@ -12,7 +12,7 @@
   <script type="text/javascript" src="specs/AutoSuggestSpec.js"></script>
   <script type="text/javascript">
     var listenerPrefix = "../../../../bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/";
-    TestUtil.loadResourceFromURL( "AutoSuggest", listenerPrefix + "AutoSuggest.js" );
+    TestUtil.loadResource( "AutoSuggest.js", listenerPrefix + "AutoSuggest.js" );
   </script>
 </head>
 
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
index 109e545..bd66b94 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
@@ -37,7 +37,7 @@
 
     beforeEach( function() {
       if( !secureEval ) {
-        secureEval = getVarFromScript( "AutoSuggest", "secureEval" );
+        secureEval = getVarFromScript( "AutoSuggest.js", "secureEval" );
       }
     } );
 
@@ -58,7 +58,7 @@
 
     beforeEach( function() {
       if( !commonText ) {
-        commonText = getVarFromScript( "AutoSuggest", "commonText" );
+        commonText = getVarFromScript( "AutoSuggest.js", "commonText" );
       }
     } );
 
@@ -115,7 +115,7 @@
 
     beforeEach( function() {
       if( !filterArray ) {
-        filterArray = getVarFromScript( "AutoSuggest", "filterArray" );
+        filterArray = getVarFromScript( "AutoSuggest.js", "filterArray" );
       }
     } );
 
@@ -162,7 +162,7 @@
     describe( "change:dataSourceId", function() {
 
       it( "sets suggestions to null", function() {
-        model.addListener( "change:dataSourceId", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:dataSourceId", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", [] );
 
         model.set( "dataSourceId", "fooId" );
@@ -175,7 +175,7 @@
     describe( "change:userText", function() {
 
       it( "clears replacementText", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "replacementText", "banana" );
 
         model.set( "userText", "ba" );
@@ -184,7 +184,7 @@
       } );
 
       it( "shows suggestions", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "userText", "ba" );
 
@@ -192,7 +192,7 @@
       } );
 
       it( "hides results if text length is zero", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestionsVisible", true );
 
         model.set( "userText", "" );
@@ -201,7 +201,7 @@
       } );
 
       it( "updates currentSuggestions", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "userText", "ba" );
 
@@ -209,7 +209,7 @@
       } );
 
       it( "updates currentSuggestions of type array", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", [ [ "foo" ], [ "bar" ] ] );
 
         model.set( "userText", "ba" );
@@ -218,7 +218,7 @@
       } );
 
       it( "gets suggestions from data source if suggestions are not set", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", null );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         dataSource.set( "data", [ "foo", "bar", "foobar", "banana", "apple", "cherry" ] );
@@ -231,7 +231,7 @@
       } );
 
       it( "sets empty currentSuggestions array if no data source is set", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", null );
 
         model.set( "userText", "ba" );
@@ -240,7 +240,7 @@
       } );
 
       it( "forwards action option", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.addListener( "change:currentSuggestions", logger );
 
         model.set( "userText", "ba", { "action" : "foo" } );
@@ -249,7 +249,7 @@
       } );
 
       it( "uses custom filter from dataSource if present", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", null );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         dataSource.set( "data", [ "foo", "bar" ] );
@@ -267,7 +267,7 @@
       } );
 
       it( "caches evaluated filter function", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", null );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         dataSource.set( "data", [ "foo" ] );
@@ -283,7 +283,7 @@
       } );
 
       it( "throws custom exception when filterScript not parse", function() {
-        model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:userText", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestions", null );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         dataSource.set( "data", [ "foo", "bar" ] );
@@ -306,7 +306,7 @@
     describe( "change:suggestions", function() {
 
       it( "clears suggestion", function() {
-        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest.js" ) );
         model.set( "replacementText", "banana" );
         model.set( "suggestionsVisible", true );
         model.addListener( "change:replacementText", logger );
@@ -317,7 +317,7 @@
       } );
 
       it( "updates suggestions", function() {
-        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest.js" ) );
         model.set( "userText", "ba" );
         model.set( "suggestionsVisible", true );
 
@@ -327,7 +327,7 @@
       } );
 
       it( "does not update suggestions if not visible", function() {
-        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest.js" ) );
         model.set( "suggestionsVisible", false );
         model.addListener( "change:currentSuggestions", logger );
 
@@ -337,7 +337,7 @@
       } );
 
       it( "sets suggestions with refresh option", function() {
-        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest.js" ) );
         model.addListener( "change:currentSuggestions", logger );
         model.set( "suggestionsVisible", true );
         model.set( "userText", "ba" );
@@ -352,7 +352,7 @@
     describe( "change:selectedSuggestionIndex", function() {
 
       it( "sets replacementText to selected suggestion", function() {
-        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ "bar", "banana" ] );
 
         model.set( "selectedSuggestionIndex", 1 );
@@ -361,7 +361,7 @@
       } );
 
       it( "sets replacementText for array suggestion", function() {
-        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ [ "a", "b", "c" ], [ "x", "y", "z" ] ] );
 
         model.set( "selectedSuggestionIndex", 1 );
@@ -370,7 +370,7 @@
       } );
 
       it( "resets suggestion when selection index is -1", function() {
-        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ "bar", "banana" ] );
         model.set( "replacementText", "banana" );
 
@@ -380,7 +380,7 @@
       } );
 
       it( "sets action option", function() {
-        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest.js" ) );
         model.addListener( "change:replacementText", logger );
         model.set( "currentSuggestions", [ "bar", "banana" ] );
 
@@ -394,7 +394,7 @@
     describe( "change:replacementText", function() {
 
       it( "ignores events from change:userText", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
         model.set( "text", "bar" );
         model.set( "textSelection", [ 0, 0 ] );
 
@@ -405,7 +405,7 @@
       } );
 
       it( "sets text to suggestion", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "replacementText", "foo" );
 
@@ -413,7 +413,7 @@
       } );
 
       it( "sets textSelection for replacementText", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "replacementText", "foo", { "action" : "selection" } );
 
@@ -421,7 +421,7 @@
       } );
 
       it( "sets textSelection for auto complete", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
         model.set( "userText", "foo" );
 
         model.set( "replacementText", "foobar" );
@@ -430,7 +430,7 @@
       } );
 
       it( "resets text to userText", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
         model.set( "userText", "bar" );
 
         model.set( "replacementText", null, { "action" : "selection" } );
@@ -439,7 +439,7 @@
       } );
 
       it( "resets selection to userText end", function() {
-        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest.js" ) );
         model.set( "userText", "bar" );
 
         model.set( "replacementText", null, { "action" : "selection" } );
@@ -453,7 +453,7 @@
 
       it( "does not change replacementText without autocomplete", function() {
         model.set( "replacementText", "ban" );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ "banana" ] );
 
@@ -462,7 +462,7 @@
 
       it( "does change replacementText if not typing", function() {
         model.set( "replacementText", "ban" );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
         model.set( "autoComplete", true );
 
         model.set( "currentSuggestions", [ "banana" ] );
@@ -474,7 +474,7 @@
         model.set( "replacementText", "ban" );
         model.set( "userText", "b" );
         model.set( "autoComplete", true );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ "banana" ], { "action" : "typing" } );
 
@@ -485,7 +485,7 @@
         model.set( "replacementText", "ban" );
         model.set( "userText", "b" );
         model.set( "autoComplete", true );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ [ "banana" ] ], { "action" : "typing" } );
 
@@ -496,7 +496,7 @@
         model.set( "replacementText", "ban" );
         model.set( "userText", "b" );
         model.set( "autoComplete", true );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ "banana" ], { "action" : "refresh" } );
 
@@ -506,7 +506,7 @@
       it( "partially autocompletes suggestion for common text", function() {
         model.set( "autoComplete", true );
         model.set( "userText", "b" );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         var items = [ "banana foo", "banana bar" ];
         model.set( "currentSuggestions", items, { "action" : "typing" } );
@@ -518,7 +518,7 @@
         model.set( "replacementText", null );
         model.set( "autoComplete", true );
         model.set( "userText", "banana xxx" );
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         var items = [ "banana foo", "banana bar" ];
         model.set( "currentSuggestions", items, { "action" : "typing" } );
@@ -527,7 +527,7 @@
       } );
 
       it( "sets suggestionTexts unchanged if no custom template is set", function() {
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ "a", "b" ] );
 
@@ -535,7 +535,7 @@
       } );
 
       it( "sets suggestionTexts for columns", function() {
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
 
         model.set( "currentSuggestions", [ [ "a", "b", "c" ], [ "x", "y", "z" ] ] );
 
@@ -543,7 +543,7 @@
       } );
 
       it( "applies template to suggestionTexts", function() {
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
         model.set( "template", function( suggestion ) { return "x" + suggestion; } );
 
         model.set( "currentSuggestions", [ "a", "b" ] );
@@ -552,7 +552,7 @@
       } );
 
       it( "evaluates templateScript from dataSource", function() {
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         spyOn( rap, "getObject" ).andReturn( dataSource );
         dataSource.set( "templateScript", "function( suggestion ) { return \"x\" + suggestion; }" );
@@ -564,7 +564,7 @@
       } );
 
       it( "throws custom exception when templateScript can not be parsed", function() {
-        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest.js" ) );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         spyOn( rap, "getObject" ).andReturn( dataSource );
         dataSource.set( "templateScript", "funasdfction( suggestion ) { return true; }" );
@@ -585,7 +585,7 @@
     describe( "accept", function() {
 
       it( "fires suggestionSelected for selectedSuggestionIndex", function() {
-        model.addListener( "accept", createClientListener( "AutoSuggest" ) );
+        model.addListener( "accept", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ "bar", "banana" ] );
         model.set( "selectedSuggestionIndex", 1 );
         model.addListener( "suggestionSelected", logger );
@@ -597,7 +597,7 @@
       } );
 
       it( "fires suggestionSelected when full auto complete is accepted", function() {
-        model.addListener( "accept", createClientListener( "AutoSuggest" ) );
+        model.addListener( "accept", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ "banana" ] );
         model.set( "selectedSuggestionIndex", -1 );
         model.set( "autoComplete", true );
@@ -610,7 +610,7 @@
       } );
 
       it( "does nothing when attempting accepting without selected suggestion or auto complete", function() {
-        model.addListener( "accept", createClientListener( "AutoSuggest" ) );
+        model.addListener( "accept", createClientListener( "AutoSuggest.js" ) );
         model.set( "currentSuggestions", [ "banana" ] );
         model.set( "selectedSuggestionIndex", -1 );
         model.set( "suggestionsVisible", true );
@@ -623,7 +623,7 @@
       } );
 
       it( "clears text selection", function() {
-        model.addListener( "accept", createClientListener( "AutoSuggest" ) );
+        model.addListener( "accept", createClientListener( "AutoSuggest.js" ) );
         model.set( "text", "foobar" );
 
         model.notify( "accept", { source : model, type : "accept" } );
diff --git a/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/JasmineRunner.java b/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/JasmineRunner.java
index 7394b66..d83807e 100644
--- a/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/JasmineRunner.java
+++ b/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/JasmineRunner.java
@@ -24,25 +24,18 @@
   private static final String CHARSET = "UTF-8";
   private final ScriptableObject scope;
   private final ScriptableObject jasmineEnv;
+  private final Map<String, Object> resources = new HashMap<String, Object>();
   private JasmineReporter publicReporter;
-  private TestUtil testUtil;
 
   public JasmineRunner() {
     scope = Context.enter().initStandardObjects();
-    createTestUtil();
-    scope.put( "window", scope, scope );
-    createStubs( "setTimeout", "clearTimeout", "setInterval", "clearInterval" );
+    initializeScope();
     parseScript( getClass().getClassLoader(), "org/eclipse/rap/jstestrunner/jasmine/jasmine.js" );
     jasmineEnv = getJasmineEnv();
     createReporter();
     Context.exit();
   }
 
-  private void createTestUtil() {
-    testUtil = new TestUtil();
-    scope.put( "TestUtil", scope, testUtil );
-  }
-
   public void setReporter( JasmineReporter publicReporter ) {
     this.publicReporter = publicReporter;
   }
@@ -70,7 +63,7 @@
   }
 
   public void addResource( String name, ClassLoader loader, String path ) {
-    testUtil.loadResourceFromClassLoader( name, loader, path );
+    resources.put( name, readContent( loader, path ) );
   }
 
   public void execute() {
@@ -83,6 +76,12 @@
   ////////////
   // Internals
 
+  private void initializeScope() {
+    scope.put( "TestUtil", scope, new TestUtil() );
+    scope.put( "window", scope, scope );
+    createStubs( "setTimeout", "clearTimeout", "setInterval", "clearInterval" );
+  }
+
   private void createReporter() {
     ScriptableObject.callMethod( jasmineEnv, "addReporter", new Object[]{ new InternalReporter() } );
   }
@@ -205,16 +204,6 @@
 
   public class TestUtil {
 
-    Map<String, Object> resources = new HashMap< String, Object>();
-
-    public void loadResourceFromURL( String name, String url ) {
-      throw new UnsupportedOperationException( "Not supported in Rhino environment" );
-    }
-
-    public void loadResourceFromClassLoader( String name, ClassLoader loader, String path ) {
-      resources.put( name, readContent( loader, path ) );
-    }
-
     public Object getResource( String name ) {
       return resources.get( name );
     }
diff --git a/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/TestUtil.js b/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/TestUtil.js
index 58263ef..8991b57 100644
--- a/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/TestUtil.js
+++ b/tests/org.eclipse.rap.jstestrunner/src/org/eclipse/rap/jstestrunner/jasmine/TestUtil.js
@@ -22,11 +22,7 @@
 
   TestUtil = {
 
-    loadResourceFromClassLoader : function( name, loader, path ) {
-      throw new Error( "Not supported in browser environment" );
-    },
-
-    loadResourceFromURL : function( name, url ) {
+    loadResource : function( name, url ) {
       resources[ name ] = xhrGet( url );
     },
 
