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 805600c..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
@@ -12,6 +12,7 @@
 
 import org.eclipse.rap.clientscripting.internal.ClientFunction;
 import org.eclipse.rap.clientscripting.internal.ClientListenerBinding;
+import org.eclipse.rap.clientscripting.internal.ClientListenerUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
@@ -81,7 +82,8 @@
     if( widget.isDisposed() ) {
       throw new IllegalArgumentException( "Widget is disposed" );
     }
-    final ClientListenerBinding binding = addTo( WidgetUtil.getId( widget ), eventType );
+    String eventTypeString = ClientListenerUtil.getEventType( eventType );
+    final ClientListenerBinding binding = addTo( WidgetUtil.getId( widget ), eventTypeString );
     if( binding != null ) {
       widget.addListener( SWT.Dispose, new Listener() {
         public void handleEvent( Event event ) {
@@ -99,7 +101,7 @@
     if( widget == null ) {
       throw new NullPointerException( "widget is null" );
     }
-    removeFrom( WidgetUtil.getId( widget ), eventType );
+    removeFrom( WidgetUtil.getId( widget ), ClientListenerUtil.getEventType( eventType ) );
   }
 
   /**
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 58c02e2..f562179 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
@@ -44,7 +44,7 @@
     return bindings;
   }
 
-  protected ClientListenerBinding addTo( String targetId, int eventType ) {
+  protected ClientListenerBinding addTo( String targetId, String eventType ) {
     if( findBinding( targetId, eventType ) == null ) {
       ClientListenerBinding binding = new ClientListenerBinding( this, targetId, eventType );
       bindings.add( binding );
@@ -54,7 +54,7 @@
     }
   }
 
-  protected void removeFrom( String targetId, int eventType ) {
+  protected void removeFrom( String targetId, String eventType ) {
     ClientListenerBinding binding = findBinding( targetId, eventType );
     if( binding != null ) {
       binding.dispose();
@@ -62,9 +62,11 @@
     }
   }
 
-  ClientListenerBinding findBinding( String targetId, int eventType ) {
+  ClientListenerBinding findBinding( String targetId, String eventType ) {
     for( ClientListenerBinding binding : bindings ) {
-      if( binding.getTargetId() ==  targetId && binding.getEventType() == eventType ) {
+      if(    binding.getTargetId().equals( targetId )
+          && binding.getEventType().equals( eventType ) )
+      {
         return binding;
       }
     }
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
index a4dacf5..4dbcda0 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding.java
@@ -20,25 +20,25 @@
 
   private final ClientFunction function;
   private final String targetId;
-  private final int eventType;
+  private final String eventType;
   private final RemoteObject remoteObject;
   private boolean disposed;
 
-  public ClientListenerBinding( ClientFunction function, String targetId, int eventType ) {
+  public ClientListenerBinding( ClientFunction function, String targetId, String eventType ) {
     this.function = function;
     this.targetId = targetId;
     this.eventType = eventType;
     remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
     remoteObject.set( "listener", function.getRemoteId() );
     remoteObject.set( "targetObject", targetId );
-    remoteObject.set( "eventType", ClientListenerUtil.getEventType( eventType ) );
+    remoteObject.set( "eventType", eventType );
   }
 
   public String getTargetId() {
     return targetId;
   }
 
-  public int getEventType() {
+  public String getEventType() {
     return eventType;
   }
 
@@ -60,7 +60,10 @@
       result = true;
     } else if( obj != null && getClass() == obj.getClass() ) {
       ClientListenerBinding other = ( ClientListenerBinding )obj;
-      if( eventType == other.eventType && targetId == other.targetId && function == other.function ) {
+      if( eventType.equals( other.eventType )
+          && targetId.equals( other.targetId )
+          && function == other.function )
+      {
         result = true;
       }
     }
@@ -71,7 +74,7 @@
   public int hashCode() {
     final int prime = 31;
     int result = 1;
-    result = prime * result + eventType;
+    result = prime * result + eventType.hashCode();
     result = prime * result + targetId.hashCode();
     result = prime * result + function.hashCode();
     return result;
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 91c4204..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
@@ -165,10 +165,10 @@
   public void testRemoveFrom_disposesBinding() {
     Label label = new Label( shell, SWT.NONE );
     listener.addTo( label, SWT.MouseDown );
+    ClientListenerBinding binding = findBinding( listener, label, SWT.MouseDown );
 
     listener.removeFrom( label, SWT.MouseDown );
 
-    ClientListenerBinding binding = findBinding( listener, label, SWT.MouseDown );
     assertTrue( binding.isDisposed() );
   }
 
@@ -176,11 +176,11 @@
   public void testRemoveFrom_mayBeCalledTwice() {
     Label label = new Label( shell, SWT.NONE );
     listener.addTo( label, SWT.MouseDown );
-
-    listener.removeFrom( label, SWT.MouseDown );
-    listener.removeFrom( label, SWT.MouseDown );
-
     ClientListenerBinding binding = findBinding( listener, label, SWT.MouseDown );
+
+    listener.removeFrom( label, SWT.MouseDown );
+    listener.removeFrom( label, SWT.MouseDown );
+
     assertTrue( binding.isDisposed() );
   }
 
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 5f14d91..afd334c 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
@@ -25,13 +25,11 @@
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.RemoteObject;
 import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.eclipse.swt.SWT;
 import org.junit.*;
 
 
 public class ClientFunction_Test {
 
-  private static final String TARGET_ID = "w101";
   private static final String CLIENT_LISTENER_TYPE =  "rwt.clientscripting.Listener";
   private static final String LISTENER_BINDING_TYPE =  "rwt.clientscripting.EventBinding";
 
@@ -80,17 +78,17 @@
 
   @Test
   public void testAddTo_createsBinding() {
-    function.addTo( TARGET_ID, SWT.MouseDown );
+    function.addTo( "w101", "MouseDown" );
 
-    assertNotNull( function.findBinding( TARGET_ID, SWT.MouseDown ) );
+    assertNotNull( function.findBinding( "w101", "MouseDown" ) );
   }
 
   @Test
   public void testAddTo_ignoresSubsequentCalls() {
     Connection connection = fakeConnection( mock( RemoteObject.class ), LISTENER_BINDING_TYPE );
 
-    function.addTo( TARGET_ID, SWT.KeyDown );
-    function.addTo( TARGET_ID, SWT.KeyDown );
+    function.addTo( "w101", "KeyDown" );
+    function.addTo( "w101", "KeyDown" );
 
     assertEquals( 1, function.getBindings().size() );
     verify( connection, times( 1 ) ).createRemoteObject( eq( LISTENER_BINDING_TYPE ) );
@@ -98,39 +96,39 @@
 
   @Test
   public void testRemoveFrom_disposesBinding() {
-    function.addTo( TARGET_ID, SWT.MouseDown );
-    ClientListenerBinding binding = function.findBinding( TARGET_ID, SWT.MouseDown );
+    function.addTo( "w101", "MouseDown" );
+    ClientListenerBinding binding = function.findBinding( "w101", "MouseDown" );
 
-    function.removeFrom( TARGET_ID, SWT.MouseDown );
+    function.removeFrom( "w101", "MouseDown" );
 
     assertTrue( binding.isDisposed() );
   }
 
   @Test
   public void testRemoveFrom_RemovesBindingFromList() {
-    function.addTo( TARGET_ID, SWT.MouseDown );
+    function.addTo( "w101", "MouseDown" );
 
-    function.removeFrom( TARGET_ID, SWT.MouseDown );
+    function.removeFrom( "w101", "MouseDown" );
 
-    assertNull( function.findBinding( TARGET_ID, SWT.MouseDown ) );
+    assertNull( function.findBinding( "w101", "MouseDown" ) );
   }
 
   @Test
   public void testRemoveFrom_mayBeCalledTwice() {
-    function.addTo( TARGET_ID, SWT.MouseDown );
-    ClientListenerBinding binding = function.findBinding( TARGET_ID, SWT.MouseDown );
+    function.addTo( "w101", "MouseDown" );
+    ClientListenerBinding binding = function.findBinding( "w101", "MouseDown" );
 
-    function.removeFrom( TARGET_ID, SWT.MouseDown );
-    function.removeFrom( TARGET_ID, SWT.MouseDown );
+    function.removeFrom( "w101", "MouseDown" );
+    function.removeFrom( "w101", "MouseDown" );
 
     assertTrue( binding.isDisposed() );
   }
 
   @Test
   public void testRemoveFrom_ignoresNonExistingBinding() {
-    function.removeFrom( TARGET_ID, SWT.MouseDown );
+    function.removeFrom( "w101", "MouseDown" );
 
-    assertNull( function.findBinding( TARGET_ID, SWT.MouseDown ) );
+    assertNull( function.findBinding( "w101", "MouseDown" ) );
   }
 
   private void createListener() {
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
index f36d21a..daa644d 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientListenerBinding_Test.java
@@ -22,14 +22,11 @@
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.RemoteObject;
 import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.eclipse.swt.SWT;
 import org.junit.*;
 
 
 public class ClientListenerBinding_Test {
 
-  private static final String TARGET_ID_1 = "w101";
-  private static final String TARGET_ID_2 = "w102";
   private static final String LISTENER_BINDING_TYPE =  "rwt.clientscripting.EventBinding";
 
   private ClientListener listener1;
@@ -73,15 +70,15 @@
 
   @Test
   public void testCreation() {
-    assertEquals( TARGET_ID_1, binding.getTargetId() );
-    assertEquals( SWT.MouseDown, binding.getEventType() );
+    assertEquals( "w101", binding.getTargetId() );
+    assertEquals( "MouseDown", binding.getEventType() );
   }
 
   @Test
   public void testCreation_createsRemoteObject() {
     Connection connection = fakeConnection( mock( RemoteObject.class ), LISTENER_BINDING_TYPE );
 
-    binding = new ClientListenerBinding( listener1, TARGET_ID_1, ClientListener.KeyDown );
+    binding = new ClientListenerBinding( listener1, "w101", "KeyDown" );
 
     verify( connection ).createRemoteObject( eq( "rwt.clientscripting.EventBinding" ) );
   }
@@ -91,10 +88,10 @@
     RemoteObject remoteObject = mock( RemoteObject.class );
     fakeConnection( remoteObject, LISTENER_BINDING_TYPE );
 
-    binding = new ClientListenerBinding( listener1, TARGET_ID_1, ClientListener.KeyDown );
+    binding = new ClientListenerBinding( listener1, "w101", "KeyDown" );
 
     verify( remoteObject ).set( eq( "listener" ), eq( listener1.getRemoteId() ) );
-    verify( remoteObject ).set( eq( "targetObject" ), eq( TARGET_ID_1 ) );
+    verify( remoteObject ).set( eq( "targetObject" ), eq( "w101" ) );
     verify( remoteObject ).set( eq( "eventType" ), eq( "KeyDown" ) );
   }
 
@@ -102,7 +99,7 @@
   public void testDispose_destroysRemoteObject() {
     RemoteObject remoteObject = mock( RemoteObject.class );
     fakeConnection( remoteObject, LISTENER_BINDING_TYPE );
-    binding = new ClientListenerBinding( listener1, TARGET_ID_1, ClientListener.KeyDown );
+    binding = new ClientListenerBinding( listener1, "w101", "KeyDown" );
 
     binding.dispose();
 
@@ -113,7 +110,7 @@
   public void testDispose_mayBeCalledTwice() {
     RemoteObject remoteObject = mock( RemoteObject.class );
     fakeConnection( remoteObject, LISTENER_BINDING_TYPE );
-    binding = new ClientListenerBinding( listener1, TARGET_ID_1, ClientListener.KeyDown );
+    binding = new ClientListenerBinding( listener1, "w101", "KeyDown" );
 
     binding.dispose();
     binding.dispose();
@@ -139,11 +136,11 @@
   }
 
   private void createBindingss() {
-    binding = new ClientListenerBinding( listener1, TARGET_ID_1, SWT.MouseDown );
-    equalBinding = new ClientListenerBinding( listener1, TARGET_ID_1, SWT.MouseDown );
-    bindingWithDifferentWidget = new ClientListenerBinding( listener1, TARGET_ID_2, SWT.MouseDown );
-    bindingWithDifferentEvent = new ClientListenerBinding( listener1, TARGET_ID_1, SWT.MouseUp );
-    bindingWithDifferentListener = new ClientListenerBinding( listener2, TARGET_ID_1, SWT.MouseDown );
+    binding = new ClientListenerBinding( listener1, "w101", "MouseDown" );
+    equalBinding = new ClientListenerBinding( listener1, "w101", "MouseDown" );
+    bindingWithDifferentWidget = new ClientListenerBinding( listener1, "w102", "MouseDown" );
+    bindingWithDifferentEvent = new ClientListenerBinding( listener1, "w101", "MouseUp" );
+    bindingWithDifferentListener = new ClientListenerBinding( listener2, "w101", "MouseDown" );
   }
 
 }
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/TestUtil.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/TestUtil.java
index 12f210b..507af28 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/TestUtil.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/TestUtil.java
@@ -36,7 +36,7 @@
                                                    int type )
   {
     ClientFunction function = listener; // the IDE does not see findBinding otherwise?
-    return function.findBinding( WidgetUtil.getId( widget ), type );
+    return function.findBinding( WidgetUtil.getId( widget ), ClientListenerUtil.getEventType( type ) );
   }
 
 }
