Adjust to use ClientListener from RWT master

* Change imports to ClientListener, use WidgetUtil.registerDataKeys

* DropDown must render ClientListeners itself (no LCA)

* Cleanup in demo: doesn't contribute an application configuration
  anymore, just entrypoint snippets

* Change bundle dependencies to require RAP 2.2.0
* Increment bundle versions to 0.2.0
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
index c462895..b59448b 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
@@ -2,11 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Auto Suggest component
 Bundle-SymbolicName: org.eclipse.rap.addons.autosuggest
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-Vendor: Eclipse.org - RAP Incubator
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0"
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0"
-Import-Package: org.eclipse.rap.addons.dropdown;version="0.1.0",
- org.eclipse.rap.clientscripting;version="0.2.0",
- org.eclipse.rap.clientscripting.internal;version="0.2.0"
+Export-Package: org.eclipse.rap.addons.autosuggest;version="0.2.0"
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0"
+Import-Package: org.eclipse.rap.addons.dropdown;version="0.2.0"
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/pom.xml b/bundles/org.eclipse.rap.addons.autosuggest/pom.xml
index b82548d..3297889 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/pom.xml
+++ b/bundles/org.eclipse.rap.addons.autosuggest/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.addons.autosuggest</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
index 60fb407..31de64d 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
@@ -19,18 +19,20 @@
 import org.eclipse.rap.addons.autosuggest.internal.resources.EventDelegatorListener;
 import org.eclipse.rap.addons.autosuggest.internal.resources.ModelResources;
 import org.eclipse.rap.addons.dropdown.DropDown;
-import org.eclipse.rap.clientscripting.ClientListener;
-import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.internal.scripting.ClientListenerUtil;
+import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.remote.AbstractOperationHandler;
 import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Text;
 
 
+@SuppressWarnings( "restriction" )
 public class AutoSuggest {
 
   private static final String EVENT_TYPE_SELECTION = "suggestionSelected";
@@ -158,7 +160,7 @@
     attachClientListenerToModel( getAutoSuggestListener(), "change", "accept" );
   }
 
-  protected AutoSuggestClientListener getAutoSuggestListener() {
+  protected ClientListener getAutoSuggestListener() {
     return AutoSuggestListener.getInstance();
   }
 
@@ -176,8 +178,8 @@
     }
   }
 
-  private void attachClientListenerToModel( AutoSuggestClientListener listener, String... types ) {
-    String listenerId = listener.getId();
+  private void attachClientListenerToModel( ClientListener listener, String... types ) {
+    String listenerId = ClientListenerUtil.getRemoteId( listener );
     for( String type : types ) {
       remoteObject.call( "addListener",
                          new JsonObject().add( "listener", listenerId ).add( "type", type ) );
@@ -186,7 +188,7 @@
   }
 
   private void connectClientObjects() {
-    WidgetDataWhiteList.addKey( MODEL_ID_KEY );
+    WidgetUtil.registerDataKeys( MODEL_ID_KEY );
     remoteObject.set( "textWidgetId", getId( text ) );
     remoteObject.set( "dropDownWidgetId", getId( dropDown ) );
     dropDown.setData( MODEL_ID_KEY, remoteObject.getId() );
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java
deleted file mode 100644
index b9a2f29..0000000
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java
+++ /dev/null
@@ -1,27 +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.addons.autosuggest;
-
-import org.eclipse.rap.clientscripting.internal.ClientFunction;
-
-
-@SuppressWarnings( "restriction" )
-public class AutoSuggestClientListener extends ClientFunction {
-
-  public AutoSuggestClientListener( String scriptCode ) {
-    super( scriptCode );
-  }
-
-  public String getId() {
-    return getRemoteId();
-  }
-
-}
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
index 4ae4f27..ed6b64a 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
@@ -10,11 +10,11 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.autosuggest.internal.resources;
 
-import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 
 
-public class AutoSuggestListener extends AutoSuggestClientListener {
+public class AutoSuggestListener extends ClientListener {
 
   public static AutoSuggestListener getInstance() {
     return SingletonUtil.getSessionInstance( AutoSuggestListener.class );
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
index 5a3ac77..4721b7a 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
@@ -10,21 +10,21 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.autosuggest.internal.resources;
 
-import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 
 
 public class EventDelegatorListener  {
 
-  private final ClientListener eventDeleatorListener;
+  private final ClientListener eventDelegatorListener;
 
   // Can not extend ClientListener since Widget#addListner would not detect it
   public static ClientListener getInstance() {
-    return SingletonUtil.getSessionInstance( EventDelegatorListener.class ).eventDeleatorListener;
+    return SingletonUtil.getSessionInstance( EventDelegatorListener.class ).eventDelegatorListener;
   }
 
   private EventDelegatorListener() {
-    eventDeleatorListener = new ClientListener( getText() );
+    eventDelegatorListener = new ClientListener( getText() );
   }
 
   private static String getText() {
diff --git a/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
index af0b42b..69577c2 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
@@ -2,12 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: DropDown
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-Vendor: Eclipse.org - RAP Incubator
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.rap.clientscripting;version="0.1.100",
- org.eclipse.rap.clientscripting.internal;version="0.2.0",
- org.osgi.framework;version="1.3.0"
-Export-Package: org.eclipse.rap.addons.dropdown;version="0.1.0",
- org.eclipse.rap.addons.dropdown.internal.resources;version="0.1.0";x-internal:=true
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0"
+Import-Package: org.osgi.framework;version="1.3.0"
+Export-Package: org.eclipse.rap.addons.dropdown;version="0.2.0",
+ org.eclipse.rap.addons.dropdown.internal.resources;version="0.2.0";x-internal:=true
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0"
diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js
index 901bb3d..064eb32 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js
+++ b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js
@@ -23,7 +23,20 @@
 
     events : [ "Selection", "DefaultSelection" ],
 
-    methods : [ "setData" ],
+    methods : [ "setData", "addListener", "removeListener" ],
+
+    methodHandler: {
+      "addListener": function( widget, properties ) {
+        rwt.remote.HandlerUtil.callWithTarget( properties.listenerId, function( targetFunction ) {
+          widget.addListener( properties.eventType, targetFunction );
+        } );
+      },
+      "removeListener": function( widget, properties ) {
+        rwt.remote.HandlerUtil.callWithTarget( properties.listenerId, function( targetFunction ) {
+          widget.removeListener( properties.eventType, targetFunction );
+        } );
+      }
+    },
 
     destructor : "destroy"
 
diff --git a/bundles/org.eclipse.rap.addons.dropdown/pom.xml b/bundles/org.eclipse.rap.addons.dropdown/pom.xml
index 27cdec3..3baa0ea 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/pom.xml
+++ b/bundles/org.eclipse.rap.addons.dropdown/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.addons.dropdown</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
index 8848c65..b694dad 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
@@ -10,19 +10,19 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown;
 
-import java.util.Arrays;
-
 import org.eclipse.rap.addons.dropdown.internal.resources.DropDownResources;
 import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
+import org.eclipse.rap.rwt.internal.lifecycle.WidgetDataUtil;
 import org.eclipse.rap.rwt.internal.protocol.JsonUtil;
+import org.eclipse.rap.rwt.internal.scripting.ClientListenerUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetAdapter;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.remote.AbstractOperationHandler;
 import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWTException;
 import org.eclipse.swt.internal.events.EventLCAUtil;
@@ -286,7 +286,12 @@
     super.addListener( eventType, listener );
     boolean isListening = EventLCAUtil.isListening( this, eventType );
     String remoteType = eventTypeToString( eventType );
-    if( remoteType != null && !wasListening && isListening ) {
+    if( listener instanceof ClientListener ) {
+      JsonObject parameters = new JsonObject()
+        .add( "eventType", ClientListenerUtil.getEventType( eventType ) )
+        .add( "listenerId", ClientListenerUtil.getRemoteId( ( ClientListener )listener ) );
+      remoteObject.call( "addListener", parameters );
+    } else if( remoteType != null && !wasListening && isListening ) {
       remoteObject.listen( remoteType, true );
     }
   }
@@ -297,7 +302,12 @@
     super.removeListener( eventType, listener );
     boolean isListening = EventLCAUtil.isListening( this, eventType );
     String remoteType = eventTypeToString( eventType );
-    if( remoteType != null && wasListening && !isListening ) {
+    if( listener instanceof ClientListener ) {
+      JsonObject parameters = new JsonObject()
+        .add( "eventType", ClientListenerUtil.getEventType( eventType ) )
+        .add( "listenerId", ClientListenerUtil.getRemoteId( ( ClientListener )listener ) );
+      remoteObject.call( "removeListener", parameters );
+    } else if( remoteType != null && wasListening && !isListening ) {
       remoteObject.listen( remoteType, false );
     }
   }
@@ -374,9 +384,7 @@
     // TODO [tb] : could be optimized using a PhaseListener
     //             This implementation assumes the client merges the new values with the existing
     //             ones, which is the case in the WebClient
-    WidgetDataWhiteList service = RWT.getClient().getService( WidgetDataWhiteList.class );
-    String[] dataKeys = service == null ? null : service.getKeys();
-    if( dataKeys != null && Arrays.asList( dataKeys ).contains( key ) ) {
+    if( WidgetDataUtil.getDataKeys().contains( key ) ) {
       @SuppressWarnings( "deprecation" )
       JsonObject data = new JsonObject().add( key, JsonUtil.createJsonValue( value ) );
       remoteObject.call( "setData", data );
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
index 1eb37e6..d398baf 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
@@ -3,11 +3,11 @@
 Bundle-Name: DropDown Addon for Examples Demo
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown.demo.examples
 Bundle-Version: 1.0.0.qualifier
-Import-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0",
+Import-Package: org.eclipse.rap.addons.autosuggest;version="0.2.0",
  org.osgi.framework;version="1.3.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse.org - RAP
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0",
- org.eclipse.rap.examples;bundle-version="2.1.0"
-Export-Package: org.eclipse.rap.addons.dropdown.demo.examples;version="0.1.0"
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0",
+ org.eclipse.rap.examples;bundle-version="2.2.0"
+Export-Package: org.eclipse.rap.addons.dropdown.demo.examples;version="0.2.0"
 Bundle-Activator: org.eclipse.rap.addons.dropdown.demo.examples.Activator
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/pom.xml b/examples/org.eclipse.rap.addons.dropdown.demo.examples/pom.xml
index c5bea08..e1974cf 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/pom.xml
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.rap</groupId>
     <artifactId>org.eclipse.rap.demo.examples.parent</artifactId>
-    <version>2.1.0-SNAPSHOT</version>
+    <version>2.2.0-SNAPSHOT</version>
     <relativePath>../../org.eclipse.rap/releng/org.eclipse.rap.demo.examples.build/parent/</relativePath>
   </parent>
 
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
deleted file mode 100644
index c0c2877..0000000
--- a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>

-<launchConfiguration type="org.eclipse.rap.ui.launch.RAPLauncher">

-<booleanAttribute key="append.args" value="true"/>

-<booleanAttribute key="askclear" value="false"/>

-<booleanAttribute key="automaticAdd" value="false"/>

-<booleanAttribute key="automaticValidate" value="true"/>

-<stringAttribute key="bootstrap" value=""/>

-<stringAttribute key="checked" value="[NONE]"/>

-<booleanAttribute key="clearConfig" value="true"/>

-<booleanAttribute key="clearws" value="true"/>

-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/DropDown Demo 9494_dropdown"/>

-<booleanAttribute key="default" value="true"/>

-<booleanAttribute key="default_auto_start" value="true"/>

-<intAttribute key="default_start_level" value="4"/>

-<booleanAttribute key="includeOptional" value="false"/>

-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">

-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>

-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>

-</listAttribute>

-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -clean -console -consolelog"/>

-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>

-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true&#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.log.stderr.threshold=info"/>

-<stringAttribute key="org.eclipse.rap.launch.browserMode" value="EXTERNAL"/>

-<stringAttribute key="org.eclipse.rap.launch.contextpath" value="/example"/>

-<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.tools.launch/DropDownDemo9494_dropdown"/>

-<booleanAttribute key="org.eclipse.rap.launch.developmentMode" value="true"/>

-<stringAttribute key="org.eclipse.rap.launch.entryPoint" value=""/>

-<stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>

-<stringAttribute key="org.eclipse.rap.launch.logLevel" value="OFF"/>

-<booleanAttribute key="org.eclipse.rap.launch.openBrowser" value="true"/>

-<intAttribute key="org.eclipse.rap.launch.port" value="9494"/>

-<stringAttribute key="org.eclipse.rap.launch.servletName" value="/controls"/>

-<stringAttribute key="org.eclipse.rap.launch.servletPath" value="/dropdown"/>

-<intAttribute key="org.eclipse.rap.launch.sessionTimeout" value="10"/>

-<booleanAttribute key="org.eclipse.rap.launch.terminatePrevious" value="true"/>

-<booleanAttribute key="org.eclipse.rap.launch.useDefaultDataLocation" value="true"/>

-<booleanAttribute key="org.eclipse.rap.launch.useManualContextPath" value="false"/>

-<booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="true"/>

-<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>

-<stringAttribute key="pde.version" value="3.3"/>

-<booleanAttribute key="show_selected_only" value="false"/>

-<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>

-<booleanAttribute key="tracing" value="false"/>

-<booleanAttribute key="useCustomFeatures" value="false"/>

-<booleanAttribute key="useDefaultConfigArea" value="true"/>

-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.autosuggest@default:default,org.eclipse.rap.addons.dropdown.demo@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default"/>

-</launchConfiguration>

diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF b/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
index a3062b6..b126ef4 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
@@ -2,12 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: DropDown Demo
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown.demo
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0",
- org.eclipse.rap.clientscripting;bundle-version="0.1.100"
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0"
 Service-Component: OSGI-INF/*.xml
 Bundle-Vendor: Eclipse.org - RAP Incubator
-Import-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0",
- org.eclipse.rap.addons.dropdown;version="0.1.0"
-Export-Package: org.eclipse.rap.addons.dropdown.demo;version="0.1.0"
+Import-Package: org.eclipse.rap.addons.autosuggest;version="0.2.0",
+ org.eclipse.rap.addons.dropdown;version="0.2.0"
+Export-Package: org.eclipse.rap.addons.dropdown.demo;version="0.2.0"
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/OSGI-INF/config.xml b/examples/org.eclipse.rap.addons.dropdown.demo/OSGI-INF/config.xml
deleted file mode 100644
index 2e6c998..0000000
--- a/examples/org.eclipse.rap.addons.dropdown.demo/OSGI-INF/config.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.rap.addons.dropdown.demo.demo">
-   <implementation class="org.eclipse.rap.addons.dropdown.demo.DropDownApplicationConfiguration"/>
-   <service>
-      <provide interface="org.eclipse.rap.rwt.application.ApplicationConfiguration"/>
-   </service>
-</scr:component>
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/build.properties b/examples/org.eclipse.rap.addons.dropdown.demo/build.properties
index f447e51..450268e 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/build.properties
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/build.properties
@@ -1,7 +1,5 @@
 output.. = bin/
 bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/,\
-               theme/
+               .
 source.. = src/
 javacDefaultEncoding.. = UTF-8
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
index 0e49ce6..4a35553 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
@@ -13,7 +13,6 @@
 import java.util.Arrays;
 
 import org.eclipse.rap.addons.autosuggest.AutoSuggest;
-import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.addons.autosuggest.DataProvider;
 import org.eclipse.rap.addons.autosuggest.DataSource;
 import org.eclipse.rap.addons.autosuggest.SuggestionSelectedListener;
@@ -21,8 +20,8 @@
 import org.eclipse.rap.addons.dropdown.demo.scripts.CustomAutoSuggestClientListener;
 import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.application.AbstractEntryPoint;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteListImpl;
+import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -37,23 +36,8 @@
 import org.eclipse.swt.widgets.Text;
 
 
-@SuppressWarnings("restriction")
 public class AutoSuggestDemo extends AbstractEntryPoint {
 
-
-  private class CustomAutoSuggest extends AutoSuggest {
-
-    public CustomAutoSuggest( Text text ) {
-      super( text );
-    }
-
-    @Override
-    protected AutoSuggestClientListener getAutoSuggestListener() {
-      return CustomAutoSuggestClientListener.getInstance();
-    }
-
-  }
-
   private Text text;
   private AutoSuggest autoSuggest;
   private DataSource de;
@@ -212,9 +196,20 @@
   }
 
   private static void setupWidgetDataWhiteList() {
-    WidgetDataWhiteListImpl list
-      = ( WidgetDataWhiteListImpl )RWT.getClient().getService( WidgetDataWhiteList.class );
-    list.setKeys( new String[]{ "dropdown", "text", "data" } );
+    WidgetUtil.registerDataKeys( "dropdown", "text", "data" );
+  }
+
+  private class CustomAutoSuggest extends AutoSuggest {
+
+    public CustomAutoSuggest( Text text ) {
+      super( text );
+    }
+
+    @Override
+    protected ClientListener getAutoSuggestListener() {
+      return CustomAutoSuggestClientListener.getInstance();
+    }
+
   }
 
 }
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
index 1d24309..1c6a50b 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
@@ -10,11 +10,11 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown.demo.scripts;
 
-import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 
 
-public class CustomAutoSuggestClientListener extends AutoSuggestClientListener {
+public class CustomAutoSuggestClientListener extends ClientListener {
 
   public static CustomAutoSuggestClientListener getInstance() {
     return SingletonUtil.getSessionInstance( CustomAutoSuggestClientListener.class );
diff --git a/features/org.eclipse.rap.dropdown.feature/feature.xml b/features/org.eclipse.rap.dropdown.feature/feature.xml
index 3120966..2064180 100644
--- a/features/org.eclipse.rap.dropdown.feature/feature.xml
+++ b/features/org.eclipse.rap.dropdown.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.rap.dropdown.feature"
       label="RAP Dropdown (Incubation)"
-      version="0.1.0.qualifier"
+      version="0.2.0.qualifier"
       provider-name="Eclipse.org - RAP Incubator">
 
    <description url="http://www.example.com/description">
diff --git a/features/org.eclipse.rap.dropdown.feature/pom.xml b/features/org.eclipse.rap.dropdown.feature/pom.xml
index a35492d..5f63537 100644
--- a/features/org.eclipse.rap.dropdown.feature/pom.xml
+++ b/features/org.eclipse.rap.dropdown.feature/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.dropdown.feature</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
 </project>
diff --git a/releng/org.eclipse.rap.dropdown.build/pom.xml b/releng/org.eclipse.rap.dropdown.build/pom.xml
index 342aa92..cc2e185 100644
--- a/releng/org.eclipse.rap.dropdown.build/pom.xml
+++ b/releng/org.eclipse.rap.dropdown.build/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.dropdown.build</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <modules>
diff --git a/releng/org.eclipse.rap.dropdown.build/repository/category.xml b/releng/org.eclipse.rap.dropdown.build/repository/category.xml
index 1b1b09f..f9dc174 100644
--- a/releng/org.eclipse.rap.dropdown.build/repository/category.xml
+++ b/releng/org.eclipse.rap.dropdown.build/repository/category.xml
@@ -17,7 +17,7 @@
 
   <feature url="http://eclipse.org/rap"
       id="org.eclipse.rap.dropdown.feature"
-      version="0.1.0.qualifier">
+      version="0.2.0.qualifier">
     <category name="org.eclipse.rap.incubator.category"/>
   </feature>
 
diff --git a/releng/org.eclipse.rap.dropdown.build/repository/pom.xml b/releng/org.eclipse.rap.dropdown.build/repository/pom.xml
index a19f05b..2922735 100644
--- a/releng/org.eclipse.rap.dropdown.build/repository/pom.xml
+++ b/releng/org.eclipse.rap.dropdown.build/repository/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.dropdown-repository</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-repository</packaging>
 
   <build>
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/META-INF/MANIFEST.MF b/tests/org.eclipse.rap.addons.autosuggest.test/META-INF/MANIFEST.MF
index 1c62b5e..7752e2e 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/META-INF/MANIFEST.MF
@@ -2,12 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Auto Suggest Tests
 Bundle-SymbolicName: org.eclipse.rap.addons.autosuggest.test
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-Vendor: Eclipse.org - RAP Incubator
-Fragment-Host: org.eclipse.rap.addons.autosuggest;bundle-version="0.1.0"
+Fragment-Host: org.eclipse.rap.addons.autosuggest;bundle-version="0.2.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.junit;bundle-version="4.11.0",
  org.mockito.mockito-all;bundle-version="1.9.5",
- org.eclipse.rap.jstestrunner;bundle-version="0.1.0"
-Import-Package: org.eclipse.rap.clientscripting;version="0.2.0",
- org.eclipse.rap.rwt.testfixture;version="2.1.0"
+ org.eclipse.rap.jstestrunner;bundle-version="0.2.0"
+Import-Package: org.eclipse.rap.rwt.testfixture;version="2.2.0"
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
index da366de..0c4d22d 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
@@ -10,8 +10,8 @@
  ******************************************************************************/
 package jasmine;
 
-import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.jstestrunner.jasmine.JasmineTestRunner;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/pom.xml b/tests/org.eclipse.rap.addons.autosuggest.test/pom.xml
index 924c9fc..6ec5b25 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/pom.xml
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.addons.autosuggest.test</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
 </project>
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
index 166282e..7f5602f 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
@@ -28,19 +28,16 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Arrays;
-import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.rap.addons.dropdown.DropDown;
-import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteListImpl;
+import org.eclipse.rap.rwt.internal.lifecycle.WidgetDataUtil;
 import org.eclipse.rap.rwt.lifecycle.PhaseId;
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.OperationHandler;
 import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
@@ -156,38 +153,9 @@
 
   @Test
   public void testConstructor_addKeysToWidgetDataWhiteList() {
-    WidgetDataWhiteListImpl service
-      = ( WidgetDataWhiteListImpl )RWT.getClient().getService( WidgetDataWhiteList.class );
-    service.setKeys( new String[ 0 ] );
-
     new AutoSuggest( text );
 
-    List<String> list = Arrays.asList( service.getKeys() );
-    assertTrue( list.contains( MODEL_ID_KEY ) );
-  }
-
-  @Test
-  public void testConstructor_addKeysToWidgetDataWhiteListAndKeepExistingKeys() {
-    WidgetDataWhiteListImpl service
-      = ( WidgetDataWhiteListImpl )RWT.getClient().getService( WidgetDataWhiteList.class );
-    service.setKeys( new String[] { "foo" } );
-
-    new AutoSuggest( text );
-
-    List<String> list = Arrays.asList( service.getKeys() );
-    assertTrue( list.contains( "foo" ) );
-  }
-
-  @Test
-  public void testConstructor_addKeysToWidgetDataWhiteListOnlyOnce() {
-    WidgetDataWhiteListImpl service
-      = ( WidgetDataWhiteListImpl )RWT.getClient().getService( WidgetDataWhiteList.class );
-    service.setKeys( new String[] { MODEL_ID_KEY } );
-
-    new AutoSuggest( text );
-
-    List<String> list = Arrays.asList( service.getKeys() );
-    assertEquals( list.lastIndexOf( MODEL_ID_KEY ), list.indexOf( MODEL_ID_KEY ) );
+    assertTrue( WidgetDataUtil.getDataKeys().contains( MODEL_ID_KEY ) );
   }
 
   @Test
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/META-INF/MANIFEST.MF b/tests/org.eclipse.rap.addons.dropdown.test/META-INF/MANIFEST.MF
index 95c1320..e92be76 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.rap.addons.dropdown.test/META-INF/MANIFEST.MF
@@ -2,15 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Tests for DropDown
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown.test
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0",
- org.eclipse.rap.rwt.jstest;bundle-version="2.1.0";resolution:=optional,
- org.eclipse.rap.rwt.testfixture;bundle-version="2.1.0";resolution:=optional,
- org.eclipse.rap.addons.dropdown;bundle-version="0.1.0",
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0",
+ org.eclipse.rap.rwt.jstest;bundle-version="2.2.0";resolution:=optional,
+ org.eclipse.rap.rwt.testfixture;bundle-version="2.2.0";resolution:=optional,
+ org.eclipse.rap.addons.dropdown;bundle-version="0.2.0",
  org.junit;bundle-version="4.8.0",
  org.mockito.mockito-all;bundle-version="1.9.5"
-Import-Package: org.eclipse.rap.clientscripting;version="0.1.100",
- org.eclipse.rap.clientscripting.internal;version="0.2.0"
 Service-Component: OSGI-INF/*.xml
 Bundle-Vendor: Eclipse.org - RAP Incubator
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/pom.xml b/tests/org.eclipse.rap.addons.dropdown.test/pom.xml
index b657ded..16efe77 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/pom.xml
+++ b/tests/org.eclipse.rap.addons.dropdown.test/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.addons.dropdown.test</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
 </project>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
index 9aa36c7..b7764e7 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
@@ -29,19 +29,18 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.client.Client;
-import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
 import org.eclipse.rap.rwt.internal.protocol.JsonUtil;
+import org.eclipse.rap.rwt.internal.scripting.ClientListenerUtil;
 import org.eclipse.rap.rwt.lifecycle.PhaseId;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.OperationHandler;
 import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.scripting.ClientListener;
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWTException;
@@ -53,7 +52,6 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -358,13 +356,10 @@
   public void testSetData_RendersDataInWhiteList() {
     Fixture.fakePhase( PhaseId.PROCESS_ACTION );
 
-    fakeWidgetDataWhiteList( new String[]{ "foo", "bar" } );
+    WidgetUtil.registerDataKeys( "foo", "bar" );
     dropdown.setData( "foo", "bar" );
 
-    ArgumentCaptor<JsonObject> argument = ArgumentCaptor.forClass( JsonObject.class );
-    verify( remoteObject ).call( eq( "setData" ), argument.capture() );
-
-    assertEquals( "bar", argument.getValue().get( "foo" ).asString() );
+    verify( remoteObject ).call( eq( "setData" ), eq( new JsonObject().add( "foo", "bar" ) ) );
   }
 
   @Test
@@ -398,7 +393,7 @@
   public void testSetData_DoesNotRenderDataNotInWhiteList() {
     Fixture.fakePhase( PhaseId.PROCESS_ACTION );
 
-    fakeWidgetDataWhiteList( new String[]{ "foo", "bar" } );
+    WidgetUtil.registerDataKeys( "foo", "bar" );
     dropdown.setData( "fool", "bar" );
 
     verify( remoteObject, never() ).set( eq( "data" ), any( JsonObject.class ) );
@@ -407,6 +402,7 @@
   @Test
   public void testAddListener_SelectionRenderListenTrue() {
     Listener listener = mock( Listener.class );
+
     dropdown.addListener( SWT.Selection, listener );
 
     verify( remoteObject ).listen( eq( "Selection" ), eq( true ) );
@@ -415,12 +411,40 @@
   @Test
   public void testAddListener_DefaultSelectionRenderListenTrue() {
     Listener listener = mock( Listener.class );
+
     dropdown.addListener( SWT.DefaultSelection, listener );
 
     verify( remoteObject ).listen( eq( "DefaultSelection" ), eq( true ) );
   }
 
   @Test
+  public void testAddListener_Selection_doesNotSendListenTwice() {
+    dropdown.addListener( SWT.Selection, mock( Listener.class ) );
+    dropdown.addListener( SWT.Selection, mock( Listener.class ) );
+
+    verify( remoteObject, times( 1 ) ).listen( eq( "Selection" ), eq( true ) );
+  }
+
+  @Test
+  public void testAddListener_Selection_doesNotSendListenForClientListener() {
+    dropdown.addListener( SWT.Selection, new ClientListener( "foo" ) );
+
+    verify( remoteObject, times( 0 ) ).listen( eq( "Selection" ), eq( true ) );
+  }
+
+  @Test
+  public void testAddListener_rendersClientListeners() {
+    ClientListener listener = new ClientListener( "" );
+    String listenerId = ClientListenerUtil.getRemoteId( listener );
+
+    dropdown.addListener( SWT.Show, listener );
+
+    JsonObject expectedParameters
+      = new JsonObject().add( "eventType", "Show" ).add( "listenerId", listenerId );
+    verify( remoteObject ).call( eq( "addListener" ), eq( expectedParameters ) );
+  }
+
+  @Test
   public void testRemoveListener_SelectionRenderListenFalse() {
     Listener listener = mock( Listener.class );
     dropdown.addListener( SWT.Selection, listener );
@@ -440,18 +464,15 @@
   }
 
   @Test
-  public void testAddListener_Selection_doesNotSendListenTwice() {
-    dropdown.addListener( SWT.Selection, mock( Listener.class ) );
-    dropdown.addListener( SWT.Selection, mock( Listener.class ) );
+  public void testRemoveListener_rendersClientListeners() {
+    ClientListener listener = new ClientListener( "" );
+    String listenerId = ClientListenerUtil.getRemoteId( listener );
 
-    verify( remoteObject, times( 1 ) ).listen( eq( "Selection" ), eq( true ) );
-  }
+    dropdown.removeListener( SWT.Show, listener );
 
-  @Test
-  public void testAddListener_Selection_doesNotSendListenForClientListener() {
-    dropdown.addListener( SWT.Selection, new ClientListener( "foo" ) );
-
-    verify( remoteObject, times( 0 ) ).listen( eq( "Selection" ), eq( true ) );
+    JsonObject expectedParameters
+      = new JsonObject().add( "eventType", "Show" ).add( "listenerId", listenerId );
+    verify( remoteObject ).call( eq( "removeListener" ), eq( expectedParameters ) );
   }
 
   @Test
@@ -524,15 +545,4 @@
     assertEquals( "foo", log.get( 0 ).text );
   }
 
-  ///////////
-  // Helper
-
-  public static void fakeWidgetDataWhiteList( String[] keys ) {
-    WidgetDataWhiteList service = mock( WidgetDataWhiteList.class );
-    when( service.getKeys() ).thenReturn( keys );
-    Client client = mock( Client.class );
-    when( client.getService( WidgetDataWhiteList.class ) ).thenReturn( service );
-    Fixture.fakeClient( client );
-  }
-
 }
diff --git a/tests/org.eclipse.rap.jstestrunner/META-INF/MANIFEST.MF b/tests/org.eclipse.rap.jstestrunner/META-INF/MANIFEST.MF
index f01812e..65a411a 100644
--- a/tests/org.eclipse.rap.jstestrunner/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.rap.jstestrunner/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: RAP JavaScript Testrunner
 Bundle-SymbolicName: org.eclipse.rap.jstestrunner
-Bundle-Version: 0.1.0.qualifier
+Bundle-Version: 0.2.0.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.junit;bundle-version="4.8.2",
  org.mozilla.javascript;bundle-version="1.7.4"
-Export-Package: org.eclipse.rap.jstestrunner.jasmine;version="0.1.0"
+Export-Package: org.eclipse.rap.jstestrunner.jasmine;version="0.2.0"
 Bundle-Vendor: Eclipse.org - RAP
diff --git a/tests/org.eclipse.rap.jstestrunner/pom.xml b/tests/org.eclipse.rap.jstestrunner/pom.xml
index e7c96e6..88fef81 100644
--- a/tests/org.eclipse.rap.jstestrunner/pom.xml
+++ b/tests/org.eclipse.rap.jstestrunner/pom.xml
@@ -22,7 +22,7 @@
   </parent>
 
   <artifactId>org.eclipse.rap.jstestrunner</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>