diff --git a/bundles/org.eclipse.rap.rwt/js/org/eclipse/rwt/KeyEventSupport.js b/bundles/org.eclipse.rap.rwt/js/org/eclipse/rwt/KeyEventSupport.js
index 00a194a..f9462f5 100644
--- a/bundles/org.eclipse.rap.rwt/js/org/eclipse/rwt/KeyEventSupport.js
+++ b/bundles/org.eclipse.rap.rwt/js/org/eclipse/rwt/KeyEventSupport.js
@@ -76,20 +76,28 @@
     _shouldSend : function( eventType, keyCode, charCode, domEvent, control ) {
       var result = false;
       if( this._isRelevant( keyCode, eventType, domEvent ) ) {
-        if( this._hasTraverseListener( control ) && this._isTraverseKey( keyCode ) ) {
+        result =    this._shouldSendTraverse( keyCode, charCode, domEvent, control )
+                 || this._shouldSendKeyDown( keyCode, charCode, domEvent, control );
+      }
+      return result;
+    },
+
+    _shouldSendTraverse : function( keyCode, charCode, domEvent, control ) {
+      return this._hasTraverseListener( control ) && this._isTraverseKey( keyCode );
+    },
+
+    _shouldSendKeyDown : function( keyCode, charCode, domEvent, control ) {
+      var result = false;
+      if( this._hasKeyListener( control ) ) {
+        var activeKeys = control.getUserData( "activeKeys" );
+        if( activeKeys ) {
+          result = this._isActive( activeKeys, domEvent, keyCode, charCode );
+        } else {
           result = true;
         }
-        if( !result && this._hasKeyListener( control ) ) {
-          var activeKeys = control.getUserData( "activeKeys" );
-          if( activeKeys ) {
-            result = this._isActive( activeKeys, domEvent, keyCode, charCode );
-          } else {
-            result = true;
-          }
-        }
-        if( !result ) {
-          result = this._isActive( this._keyBindings, domEvent, keyCode, charCode );
-        }
+      }
+      if( !result ) {
+        result = this._isActive( this._keyBindings, domEvent, keyCode, charCode );
       }
       return result;
     },
@@ -164,7 +172,12 @@
         "charCode" : finalCharCode
       };
       org.eclipse.swt.EventUtil.addModifierToProperties( properties );
-      serverObject.notify( "KeyDown", properties, true );
+      if( this._shouldSendTraverse( keyCode, charCode, domEvent, widget ) ) {
+        serverObject.notify( "Traverse", properties, true );
+      }
+      if( this._shouldSendKeyDown( keyCode, charCode, domEvent, widget ) ) {
+        serverObject.notify( "KeyDown", properties, true );
+      }
     },
 
     ///////////////
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/protocol/ClientMessageConst.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/protocol/ClientMessageConst.java
index 7cf45ce..dedaf04 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/protocol/ClientMessageConst.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/protocol/ClientMessageConst.java
@@ -35,6 +35,7 @@
   public static final String EVENT_MOUSE_UP = "MouseUp";
   public static final String EVENT_MOUSE_DOUBLE_CLICK = "MouseDoubleClick";
   public static final String EVENT_KEY_DOWN = "KeyDown";
+  public static final String EVENT_TRAVERSE = "Traverse";
   public static final String EVENT_HELP = "Help";
   public static final String EVENT_MENU_DETECT = "MenuDetect";
 
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
index b5fa65c..fe2086c 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
@@ -155,6 +155,21 @@
   }
 
   public static void processKeyEvents( Control control ) {
+    if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_TRAVERSE ) ) {
+      int keyCode = readEventIntProperty( control,
+                                          ClientMessageConst.EVENT_TRAVERSE,
+                                          ClientMessageConst.EVENT_PARAM_KEY_CODE );
+      int charCode = readEventIntProperty( control,
+                                           ClientMessageConst.EVENT_TRAVERSE,
+                                           ClientMessageConst.EVENT_PARAM_CHAR_CODE );
+      int stateMask = EventLCAUtil.readStateMask( control, ClientMessageConst.EVENT_TRAVERSE );
+      int traverseKey = getTraverseKey( keyCode, stateMask );
+      if( traverseKey != SWT.TRAVERSE_NONE ) {
+        Event event = createKeyEvent( keyCode, charCode, stateMask );
+        event.detail = traverseKey;
+        control.notifyListeners( SWT.Traverse, event );
+      }
+    }
     if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_KEY_DOWN ) ) {
       int keyCode = readEventIntProperty( control,
                                           ClientMessageConst.EVENT_KEY_DOWN,
@@ -163,14 +178,7 @@
                                            ClientMessageConst.EVENT_KEY_DOWN,
                                            ClientMessageConst.EVENT_PARAM_CHAR_CODE );
       int stateMask = EventLCAUtil.readStateMask( control, ClientMessageConst.EVENT_KEY_DOWN );
-      int traverseKey = getTraverseKey( keyCode, stateMask );
-      Event event;
-      if( traverseKey != SWT.TRAVERSE_NONE ) {
-        event = createKeyEvent( keyCode, charCode, stateMask );
-        event.detail = traverseKey;
-        control.notifyListeners( SWT.Traverse, event );
-      }
-      event = createKeyEvent( keyCode, charCode, stateMask );
+      Event event = createKeyEvent( keyCode, charCode, stateMask );
       control.notifyListeners( SWT.KeyDown, event );
       event = createKeyEvent( keyCode, charCode, stateMask );
       control.notifyListeners( SWT.KeyUp, event );
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/SelectionEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/SelectionEvent.java
index 80c76c7..53372d3 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/SelectionEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/SelectionEvent.java
@@ -138,19 +138,6 @@
    * @deprecated not part of the API, do not use in application code
    */
   @Deprecated
-  public static boolean hasListener( Widget adaptable ) {
-    boolean result = false;
-    for( int i = 0; !result && i < EVENT_TYPES.length; i++ ) {
-      result = adaptable.isListening( EVENT_TYPES[ i ] );
-    }
-    return result;
-  }
-
-  /**
-   * @since 2.0
-   * @deprecated not part of the API, do not use in application code
-   */
-  @Deprecated
   public static void addListener( Widget adaptable, SelectionListener listener ) {
     if( listener == null ) {
       SWT.error( SWT.ERROR_NULL_ARGUMENT );
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/events/EventLCAUtil.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/events/EventLCAUtil.java
index f3d32b7..b7fd37d 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/events/EventLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/events/EventLCAUtil.java
@@ -70,6 +70,19 @@
     return result;
   }
 
+  public static boolean hasScrollBarsSelectionListener( Scrollable scrollable ) {
+    boolean result = false;
+    ScrollBar horizontalBar = scrollable.getHorizontalBar();
+    if( horizontalBar != null ) {
+      result = result || horizontalBar.isListening( SWT.Selection );
+    }
+    ScrollBar verticalBar = scrollable.getVerticalBar();
+    if( verticalBar != null ) {
+      result = result || verticalBar.isListening( SWT.Selection );
+    }
+    return result;
+  }
+
   public static void processScrollBarSelection( Scrollable scrollable ) {
     String eventName = EventLCAUtil.EVENT_SCROLLBAR_SELECTED;
     if( WidgetLCAUtil.wasEventSent( scrollable, eventName ) ) {
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/custom/scrolledcompositekit/ScrolledCompositeLCA.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/custom/scrolledcompositekit/ScrolledCompositeLCA.java
index 5f92c99..4831617 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/custom/scrolledcompositekit/ScrolledCompositeLCA.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/custom/scrolledcompositekit/ScrolledCompositeLCA.java
@@ -26,7 +26,6 @@
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.internal.events.EventLCAUtil;
 import org.eclipse.swt.widgets.ScrollBar;
@@ -64,7 +63,7 @@
     preserveProperty( composite, PROP_SCROLLBARS_VISIBLE, getScrollBarsVisible( composite ) );
     preserveListener( composite,
                       PROP_SCROLLBARS_SELECTION_LISTENER,
-                      hasScrollBarsSelectionListener( composite ) );
+                      EventLCAUtil.hasScrollBarsSelectionListener( composite ) );
   }
 
   public void readData( Widget widget ) {
@@ -114,7 +113,7 @@
                     DEFAULT_SCROLLBARS_VISIBLE );
     renderListener( composite,
                     PROP_SCROLLBARS_SELECTION_LISTENER,
-                    hasScrollBarsSelectionListener( composite ),
+                    EventLCAUtil.hasScrollBarsSelectionListener( composite ),
                     false );
   }
 
@@ -153,16 +152,4 @@
     return verticalBar != null && verticalBar.getVisible();
   }
 
-  private static boolean hasScrollBarsSelectionListener( ScrolledComposite composite ) {
-    boolean result = false;
-    ScrollBar horizontalBar = composite.getHorizontalBar();
-    if( horizontalBar != null ) {
-      result = result || SelectionEvent.hasListener( horizontalBar );
-    }
-    ScrollBar verticalBar = composite.getVerticalBar();
-    if( verticalBar != null ) {
-      result = result || SelectionEvent.hasListener( verticalBar );
-    }
-    return result;
-  }
 }
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/buttonkit/ButtonLCAUtil.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/buttonkit/ButtonLCAUtil.java
index 670769e..eeef06d 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/buttonkit/ButtonLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/buttonkit/ButtonLCAUtil.java
@@ -22,7 +22,6 @@
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.widgets.Button;
 
 
@@ -55,7 +54,7 @@
     preserveProperty( button, PROP_SELECTION, Boolean.valueOf( button.getSelection() ) );
     preserveProperty( button, PROP_GRAYED, Boolean.valueOf( button.getGrayed() ) );
     preserveProperty( button, PROP_ALIGNMENT, getAlignment( button ) );
-    preserveListener( button, PROP_SELECTION_LISTENERS, SelectionEvent.hasListener( button ) );
+    preserveListener( button, PROP_SELECTION_LISTENERS, button.isListening( SWT.Selection ) );
   }
 
   static void renderInitialization( Button button ) {
@@ -73,7 +72,7 @@
     renderProperty( button, PROP_ALIGNMENT, getAlignment( button ), DEFAULT_ALIGNMENT );
     renderProperty( button, PROP_SELECTION, button.getSelection(), false );
     renderProperty( button, PROP_GRAYED, button.getGrayed(), false );
-    renderListener( button, PROP_SELECTION_LISTENERS, SelectionEvent.hasListener( button ), false );
+    renderListener( button, PROP_SELECTION_LISTENERS, button.isListening( SWT.Selection ), false );
   }
 
   static boolean readSelection( Button button ) {
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/datetimekit/DateTimeLCAUtil.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/datetimekit/DateTimeLCAUtil.java
index 6a862c9..0e47b37 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/datetimekit/DateTimeLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/datetimekit/DateTimeLCAUtil.java
@@ -21,7 +21,7 @@
 import org.eclipse.rap.rwt.lifecycle.ControlLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.internal.widgets.IDateTimeAdapter;
@@ -50,7 +50,7 @@
   static void preserveValues( DateTime dateTime ) {
     ControlLCAUtil.preserveValues( dateTime );
     WidgetLCAUtil.preserveCustomVariant( dateTime );
-    preserveListener( dateTime, PROP_SELECTION_LISTENER, SelectionEvent.hasListener( dateTime ) );
+    preserveListener( dateTime, PROP_SELECTION_LISTENER, dateTime.isListening( SWT.Selection ) );
   }
 
   static void renderInitialization( DateTime dateTime ) {
@@ -65,7 +65,7 @@
     WidgetLCAUtil.renderCustomVariant( dateTime );
     renderListener( dateTime,
                     PROP_SELECTION_LISTENER,
-                    SelectionEvent.hasListener( dateTime ),
+                    dateTime.isListening( SWT.Selection ),
                     false );
   }
 
@@ -151,6 +151,7 @@
       this.height = bounds.height;
     }
 
+    @Override
     public boolean equals( Object obj ) {
       boolean result;
       if( obj == this ) {
@@ -168,6 +169,7 @@
       return result;
     }
 
+    @Override
     public int hashCode() {
       String msg = "SubWidgetBounds#hashCode() not implemented";
       throw new UnsupportedOperationException( msg );
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/tablekit/TableLCA.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/tablekit/TableLCA.java
index 85425f9..5ade2e4 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/tablekit/TableLCA.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/tablekit/TableLCA.java
@@ -32,7 +32,6 @@
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.internal.events.EventLCAUtil;
 import org.eclipse.swt.internal.widgets.CellToolTipUtil;
@@ -113,7 +112,7 @@
     preserveProperty( table, PROP_SCROLLBARS_VISIBLE, getScrollBarsVisible( table ) );
     preserveListener( table,
                       PROP_SCROLLBARS_SELECTION_LISTENER,
-                      hasScrollBarsSelectionListener( table ) );
+                      EventLCAUtil.hasScrollBarsSelectionListener( table ) );
     preserveListener( table, PROP_SELECTION_LISTENER, table.isListening( SWT.Selection ) );
     preserveListener( table,
                       PROP_DEFAULT_SELECTION_LISTENER,
@@ -184,7 +183,7 @@
                     DEFAULT_SCROLLBARS_VISIBLE );
     renderListener( table,
                     PROP_SCROLLBARS_SELECTION_LISTENER,
-                    hasScrollBarsSelectionListener( table ),
+                    EventLCAUtil.hasScrollBarsSelectionListener( table ),
                     false );
     renderListener( table, PROP_SELECTION_LISTENER, table.isListening( SWT.Selection ), false );
     renderListener( table,
@@ -369,19 +368,6 @@
     return table.getAdapter( ITableAdapter.class ).hasVScrollBar();
   }
 
-  private static boolean hasScrollBarsSelectionListener( Table table ) {
-    boolean result = false;
-    ScrollBar horizontalBar = table.getHorizontalBar();
-    if( horizontalBar != null ) {
-      result = result || SelectionEvent.hasListener( horizontalBar );
-    }
-    ScrollBar verticalBar = table.getVerticalBar();
-    if( verticalBar != null ) {
-      result = result || SelectionEvent.hasListener( verticalBar );
-    }
-    return result;
-  }
-
   private static void processScrollBarSelection( ScrollBar scrollBar, int selection ) {
     if( scrollBar != null ) {
       scrollBar.setSelection( selection );
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/treekit/TreeLCA.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/treekit/TreeLCA.java
index a6b0c91..5e25ad3 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/treekit/TreeLCA.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/treekit/TreeLCA.java
@@ -32,7 +32,6 @@
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.internal.events.EventLCAUtil;
 import org.eclipse.swt.internal.widgets.CellToolTipUtil;
@@ -112,7 +111,7 @@
     preserveProperty( tree, PROP_SCROLLBARS_VISIBLE, getScrollBarsVisible( tree ) );
     preserveListener( tree,
                       PROP_SCROLLBARS_SELECTION_LISTENER,
-                      hasScrollBarsSelectionListener( tree ) );
+                      EventLCAUtil.hasScrollBarsSelectionListener( tree ) );
     preserveListener( tree, PROP_SELECTION_LISTENER, tree.isListening( SWT.Selection ) );
     preserveListener( tree,
                       PROP_DEFAULT_SELECTION_LISTENER,
@@ -188,7 +187,7 @@
                     DEFAULT_SCROLLBARS_VISIBLE );
     renderListener( tree,
                     PROP_SCROLLBARS_SELECTION_LISTENER,
-                    hasScrollBarsSelectionListener( tree ),
+                    EventLCAUtil.hasScrollBarsSelectionListener( tree ),
                     false );
     renderListener( tree, PROP_SELECTION_LISTENER, tree.isListening( SWT.Selection ), false );
     renderListener( tree,
@@ -368,19 +367,6 @@
     return getTreeAdapter( tree ).hasVScrollBar();
   }
 
-  private static boolean hasScrollBarsSelectionListener( Tree tree ) {
-    boolean result = false;
-    ScrollBar horizontalBar = tree.getHorizontalBar();
-    if( horizontalBar != null ) {
-      result = result || SelectionEvent.hasListener( horizontalBar );
-    }
-    ScrollBar verticalBar = tree.getVerticalBar();
-    if( verticalBar != null ) {
-      result = result || SelectionEvent.hasListener( verticalBar );
-    }
-    return result;
-  }
-
   private static void processScrollBarSelection( ScrollBar scrollBar, int selection ) {
     if( scrollBar != null ) {
       scrollBar.setSelection( selection );
diff --git a/bundles/org.eclipse.rap.ui.forms/.settings/com.eclipsesource.jshint.ui.prefs b/bundles/org.eclipse.rap.ui.forms/.settings/com.eclipsesource.jshint.ui.prefs
index 325d172..cd31a3b 100644
--- a/bundles/org.eclipse.rap.ui.forms/.settings/com.eclipsesource.jshint.ui.prefs
+++ b/bundles/org.eclipse.rap.ui.forms/.settings/com.eclipsesource.jshint.ui.prefs
@@ -1,5 +1,5 @@
-eclipse.preferences.version=1
-globals=org\: true, qx\: true, qxsettings\: true, qxvariants\: true, namespace\: false
-included=js//*.js
-options=bitwise\: true, curly\: true, eqnull\: true, shadow\: true, funcscope\: true, undef\: true, browser\: true, laxbreak\: true
-projectSpecificOptions=true
+eclipse.preferences.version=1
+globals=org\:false,qx\:false,rwt\: false, namespace\: false
+included=js//*.js
+options=bitwise\: true, curly\: true, eqnull\: true, shadow\: true, funcscope\: true, undef\: true, browser\: true, laxbreak\: true
+projectSpecificOptions=true
diff --git a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/Hyperlink.js b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/Hyperlink.js
index a2e9ecb..e36a5c5 100644
--- a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/Hyperlink.js
+++ b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/Hyperlink.js
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH.
+ * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH 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
@@ -48,7 +48,7 @@
     UNDERLINE_HOVER : 2,
     UNDERLINE_ALWAYS : 3
   },
-    
+
   members : {
 
     setText : function( value ) {
@@ -73,12 +73,12 @@
     setActiveTextColor : function( value ) {
       this._activeTextColor = value;      
     },
-    
+
     setUnderlineMode : function( value ) {
       this._underlineMode = value;      
     },
 
-    setHasSelectionListener : function( value ) {
+    setHasDefaultSelectionListener : function( value ) {
       if( value ) {
         this.addEventListener( "click", org.eclipse.swt.EventUtil.widgetDefaultSelected, this );
       } else {
diff --git a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/HyperlinkAdapter.js b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/HyperlinkAdapter.js
index 67474e5..528fa85 100644
--- a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/HyperlinkAdapter.js
+++ b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/HyperlinkAdapter.js
@@ -61,7 +61,7 @@
   } ),
 
   listeners : rwt.protocol.AdapterUtil.extendControlListeners( [
-    "selection"
+    "DefaultSelection"
   ] ),
 
   listenerHandler : rwt.protocol.AdapterUtil.extendControlListenerHandler( {} ),
diff --git a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlink.js b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlink.js
index a57bb29..3ef92e5 100644
--- a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlink.js
+++ b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlink.js
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2011 Innoopract Informationssysteme GmbH.
+ * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH 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
@@ -12,7 +12,7 @@
 
 qx.Class.define( "org.eclipse.ui.forms.widgets.ToggleHyperlink", {
   extend : rwt.widgets.base.Image,
-  
+
   construct : function() {
     this.base( arguments );
     this.setCursor( qx.constant.Style.CURSOR_HAND );
@@ -25,12 +25,12 @@
     this.addEventListener( "mousemove", this._onMouseMove, this );
     this.addEventListener( "mouseout", this._onMouseOut, this );
   },
-  
+
   destruct : function() {
     this.removeEventListener( "mousemove", this._onMouseMove, this );
     this.removeEventListener( "mouseout", this._onMouseOut, this );
   },
-    
+
   members : {
 
     setImages : function( collapseNormal, collapseHover, expandNormal, expandHover ) {
@@ -46,7 +46,7 @@
       this._updateImage();
     },
 
-    setHasSelectionListener : function( value ) {
+    setHasDefaultSelectionListener : function( value ) {
       if( value ) {
         this.addEventListener( "click", org.eclipse.swt.EventUtil.widgetDefaultSelected, this );
       } else {
@@ -58,7 +58,7 @@
       this._hover = true;
       this._updateImage();
     },
-      
+
     _onMouseOut : function( evt ) {
       this._hover = false;
       this._updateImage();
@@ -75,6 +75,6 @@
     }
 
   }
-  
+
 } );
 
diff --git a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlinkAdapter.js b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlinkAdapter.js
index 0cb6c0f..4aeff56 100644
--- a/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlinkAdapter.js
+++ b/bundles/org.eclipse.rap.ui.forms/js/org/eclipse/ui/forms/widgets/ToggleHyperlinkAdapter.js
@@ -36,7 +36,7 @@
   } ),
 
   listeners : rwt.protocol.AdapterUtil.extendControlListeners( [
-    "selection"
+    "DefaultSelection"
   ] ),
 
   listenerHandler : rwt.protocol.AdapterUtil.extendControlListenerHandler( {} ),
diff --git a/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA.java b/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA.java
index fa00f98..ce338ec 100644
--- a/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA.java
+++ b/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA.java
@@ -16,13 +16,14 @@
 import org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory;
 import org.eclipse.rap.rwt.internal.protocol.IClientObject;
 import org.eclipse.rap.rwt.lifecycle.*;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.forms.internal.widgets.IHyperlinkAdapter;
 import org.eclipse.ui.forms.widgets.Hyperlink;
 
 
+@SuppressWarnings("restriction")
 public class HyperlinkLCA extends AbstractWidgetLCA {
 
   private static final String TYPE = "forms.widgets.Hyperlink"; //$NON-NLS-1$
@@ -33,7 +34,7 @@
   private static final String PROP_UNDERLINE_MODE = "underlineMode"; //$NON-NLS-1$
   private static final String PROP_ACTIVE_FOREGROUND = "activeForeground"; //$NON-NLS-1$
   private static final String PROP_ACTIVE_BACKGROUND = "activeBackground"; //$NON-NLS-1$
-  private static final String PROP_SELECTION_LISTENER = "selection"; //$NON-NLS-1$
+  private static final String PROP_DEFAULT_SELECTION_LISTENER = "DefaultSelection"; //$NON-NLS-1$
 
   private static final int DEFAULT_UNDERLINE_MODE = 0;
 
@@ -43,6 +44,7 @@
     WidgetLCAUtil.processHelp( widget );
   }
 
+  @Override
   public void preserveValues( Widget widget ) {
     Hyperlink hyperlink = ( Hyperlink )widget;
     ControlLCAUtil.preserveValues( hyperlink );
@@ -56,10 +58,11 @@
     WidgetLCAUtil.preserveProperty( hyperlink,
                                     PROP_ACTIVE_BACKGROUND,
                                     getActiveBackground( hyperlink ) );
-    boolean hasListener = SelectionEvent.hasListener( hyperlink );
-    WidgetLCAUtil.preserveListener( hyperlink, PROP_SELECTION_LISTENER, hasListener );
+    boolean hasListener = hyperlink.isListening( SWT.DefaultSelection );
+    WidgetLCAUtil.preserveListener( hyperlink, PROP_DEFAULT_SELECTION_LISTENER, hasListener );
   }
 
+  @Override
   public void renderInitialization( Widget widget ) throws IOException {
     Hyperlink hyperlink = ( Hyperlink )widget;
     IClientObject clientObject = ClientObjectFactory.getClientObject( hyperlink );
@@ -68,6 +71,7 @@
     clientObject.set( "style", WidgetLCAUtil.getStyles( hyperlink, ALLOWED_STYLES ) ); //$NON-NLS-1$
   }
 
+  @Override
   public void renderChanges( Widget widget ) throws IOException {
     Hyperlink hyperlink = ( Hyperlink )widget;
     ControlLCAUtil.renderChanges( hyperlink );
@@ -86,10 +90,11 @@
                                   PROP_ACTIVE_BACKGROUND,
                                   getActiveBackground( hyperlink ),
                                   null );
-    boolean hasListener = SelectionEvent.hasListener( hyperlink );
-    WidgetLCAUtil.renderListener( hyperlink, PROP_SELECTION_LISTENER, hasListener, false );
+    boolean hasListener = hyperlink.isListening( SWT.DefaultSelection );
+    WidgetLCAUtil.renderListener( hyperlink, PROP_DEFAULT_SELECTION_LISTENER, hasListener, false );
   }
 
+  @Override
   public void renderDispose( Widget widget ) throws IOException {
     ClientObjectFactory.getClientObject( widget ).destroy();
   }
diff --git a/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA.java b/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA.java
index cba0994..2af6e68 100644
--- a/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA.java
+++ b/bundles/org.eclipse.rap.ui.forms/rap/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA.java
@@ -17,7 +17,7 @@
 import org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory;
 import org.eclipse.rap.rwt.internal.protocol.IClientObject;
 import org.eclipse.rap.rwt.lifecycle.*;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.forms.widgets.*;
@@ -27,13 +27,14 @@
  * This class serves as the LCA for org.eclipse.ui.forms.widgets.TreeNode and
  * org.eclipse.ui.forms.widgets.Twistie.
  */
+@SuppressWarnings("restriction")
 public final class ToggleHyperlinkLCA extends AbstractWidgetLCA {
 
   private static final String TYPE = "forms.widgets.ToggleHyperlink"; //$NON-NLS-1$
 
   private static final String PROP_IMAGES = "images"; //$NON-NLS-1$
   private static final String PROP_EXPANDED = "expanded"; //$NON-NLS-1$
-  private static final String PROP_SELECTION_LISTENER = "selection"; //$NON-NLS-1$
+  private static final String PROP_DEFAULT_SELECTION_LISTENER = "DefaultSelection"; //$NON-NLS-1$
 
   private static final String PREFIX = "resource/widget/rap/hyperlink/"; //$NON-NLS-1$
   private static final String MINUS_GIF = PREFIX + "minus.gif"; //$NON-NLS-1$
@@ -48,13 +49,14 @@
 
   private static final Image[] DEFAULT_IMAGES = new Image[] { null, null, null, null };
 
+  @Override
   public void preserveValues( Widget widget ) {
     ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
     ControlLCAUtil.preserveValues( hyperlink );
     WidgetLCAUtil.preserveCustomVariant( hyperlink );
     WidgetLCAUtil.preserveProperty( hyperlink, PROP_EXPANDED, hyperlink.isExpanded() );
-    boolean hasListener = SelectionEvent.hasListener( hyperlink );
-    WidgetLCAUtil.preserveListener( hyperlink, PROP_SELECTION_LISTENER, hasListener );
+    boolean hasListener = hyperlink.isListening( SWT.DefaultSelection );
+    WidgetLCAUtil.preserveListener( hyperlink, PROP_DEFAULT_SELECTION_LISTENER, hasListener );
   }
 
   public void readData( Widget widget ) {
@@ -64,6 +66,7 @@
     ControlLCAUtil.processDefaultSelection( widget, null );
   }
 
+  @Override
   public void renderInitialization( Widget widget ) throws IOException {
     ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
     IClientObject clientObject = ClientObjectFactory.getClientObject( hyperlink );
@@ -72,15 +75,17 @@
     WidgetLCAUtil.renderProperty( hyperlink, PROP_IMAGES, getImages( hyperlink ), DEFAULT_IMAGES );
   }
 
+  @Override
   public void renderChanges( Widget widget ) throws IOException {
     ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
     ControlLCAUtil.renderChanges( hyperlink );
     WidgetLCAUtil.renderCustomVariant( hyperlink );
     WidgetLCAUtil.renderProperty( hyperlink, PROP_EXPANDED, hyperlink.isExpanded(), false );
-    boolean hasListener = SelectionEvent.hasListener( hyperlink );
-    WidgetLCAUtil.renderListener( hyperlink, PROP_SELECTION_LISTENER, hasListener, false );
+    boolean hasListener = hyperlink.isListening( SWT.DefaultSelection );
+    WidgetLCAUtil.renderListener( hyperlink, PROP_DEFAULT_SELECTION_LISTENER, hasListener, false );
   }
 
+  @Override
   public void renderDispose( Widget widget ) throws IOException {
     ClientObjectFactory.getClientObject( widget ).destroy();
   }
diff --git a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/KeyEventSupportTest.js b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/KeyEventSupportTest.js
index e88ea49..a14ea8c 100644
--- a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/KeyEventSupportTest.js
+++ b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/KeyEventSupportTest.js
@@ -441,6 +441,18 @@
       this._disposeTextWidget( text );
     },
 
+    testNotifyTraverse : function() {
+      var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
+      var text = this._createTextWidget();
+
+      TestUtil.press( text, 9, false );
+
+      var msg = TestUtil.getMessageObject();
+      assertEquals( 9, msg.findNotifyProperty( "w3", "Traverse", "keyCode" ) );
+      assertEquals( 0, msg.findNotifyProperty( "w3", "Traverse", "charCode" ) );
+      this._disposeTextWidget( text );
+    },
+
     testKeyCodeLowerCase : function() {
       var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
       var text = this._createTextWidget();
@@ -688,7 +700,8 @@
         "target" : "w3",
         "action" : "listen",
         "properties" : {
-          "KeyDown" : true
+          "KeyDown" : true,
+          "Traverse" : true
         }
       } );
       var text = rwt.protocol.ObjectRegistry.getObject( "w3" );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil_Test.java
index 5865090..9779fd1 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil_Test.java
@@ -293,7 +293,7 @@
     shell.addListener( SWT.KeyDown, listener );
     shell.addListener( SWT.KeyUp, listener );
 
-    fakeKeyDown( getId( shell ), 27, 0, "" );
+    fakeTraverse( getId( shell ), 27, 0, "" );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 3, eventLog.size() );
@@ -1047,7 +1047,6 @@
     assertEquals( Boolean.FALSE, message.findListenProperty( control, "MenuDetect" ) );
   }
 
-
   private void fakeKeyDown( String target, int keyCode, int charCode, String modifier ) {
     Map<String, Object> properties = new HashMap<String, Object>();
     properties.put( ClientMessageConst.EVENT_PARAM_KEY_CODE, Integer.valueOf( keyCode ) );
@@ -1056,6 +1055,15 @@
     Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_KEY_DOWN, properties  );
   }
 
+  private void fakeTraverse( String target, int keyCode, int charCode, String modifier ) {
+    Map<String, Object> properties = new HashMap<String, Object>();
+    properties.put( ClientMessageConst.EVENT_PARAM_KEY_CODE, Integer.valueOf( keyCode ) );
+    properties.put( ClientMessageConst.EVENT_PARAM_CHAR_CODE, Integer.valueOf( charCode ) );
+    properties.put( ClientMessageConst.EVENT_PARAM_MODIFIER, modifier );
+    Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_KEY_DOWN, properties  );
+    Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_TRAVERSE, properties  );
+  }
+
   private static void fakeSelectionEvent( Control control, String key, String value ) {
     String id = getId( control );
     Map<String, Object> parameters = new HashMap<String,Object>();
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/widgets/FileUpload_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/widgets/FileUpload_Test.java
index 797ddbc..2bf73ad 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/widgets/FileUpload_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/widgets/FileUpload_Test.java
@@ -21,7 +21,6 @@
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
@@ -167,29 +166,29 @@
   public void testAddRemoveSelectionListener() {
     FileUpload upload = new FileUpload( shell, SWT.NONE );
     SelectionListener listener = new SelectionAdapter() {};
-    assertFalse( SelectionEvent.hasListener( upload ) );
+    assertFalse( upload.isListening( SWT.Selection ) );
     upload.addSelectionListener( listener );
-    assertTrue( SelectionEvent.hasListener( upload ) );
+    assertTrue( upload.isListening( SWT.Selection ) );
     upload.removeSelectionListener( listener );
-    assertFalse( SelectionEvent.hasListener( upload ) );
+    assertFalse( upload.isListening( SWT.Selection ) );
   }
 
   public void testAddSelectionListenerRegistersUntypedListeners() {
     FileUpload upload = new FileUpload( shell, SWT.NONE );
 
     upload.addSelectionListener( mock( SelectionListener.class ) );
-    
+
     assertTrue( upload.isListening( SWT.Selection ) );
     assertTrue( upload.isListening( SWT.DefaultSelection ) );
   }
-  
+
   public void testRemoveSelectionListenerUnregistersUntypedListeners() {
     FileUpload upload = new FileUpload( shell, SWT.NONE );
     SelectionListener listener = mock( SelectionListener.class );
     upload.addSelectionListener( listener );
 
     upload.removeSelectionListener( listener );
-    
+
     assertFalse( upload.isListening( SWT.Selection ) );
     assertFalse( upload.isListening( SWT.DefaultSelection ) );
   }
@@ -253,6 +252,7 @@
     Fixture.tearDown();
   }
 
+  @SuppressWarnings( "resource" )
   private Image createImage( String name ) {
     ClassLoader loader = Fixture.class.getClassLoader();
     InputStream stream = loader.getResourceAsStream( name );
diff --git a/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA_Test.java b/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA_Test.java
index 4a4a3f5..ed4b90e 100644
--- a/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA_Test.java
+++ b/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/hyperlinkkit/HyperlinkLCA_Test.java
@@ -246,7 +246,7 @@
     lca.renderChanges( hyperlink );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( hyperlink, "selection" ) );
+    assertEquals( Boolean.TRUE, message.findListenProperty( hyperlink, "DefaultSelection" ) );
   }
 
   @SuppressWarnings("serial")
@@ -263,7 +263,7 @@
     lca.renderChanges( hyperlink );
 
     Message message = Fixture.getProtocolMessage();
-    assertNull( message.findListenOperation( hyperlink, "selection" ) );
+    assertNull( message.findListenOperation( hyperlink, "DefaultSelection" ) );
   }
 
   private IHyperlinkAdapter getAdapter( Hyperlink hyperlink ) {
diff --git a/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA_Test.java b/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA_Test.java
index c77b32c..ba065b8 100644
--- a/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA_Test.java
+++ b/tests/org.eclipse.rap.ui.forms.test/src/org/eclipse/ui/forms/internal/widgets/togglehyperlinkkit/ToggleHyperlinkLCA_Test.java
@@ -106,7 +106,7 @@
     lca.renderChanges( twistie );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( twistie, "selection" ) );
+    assertEquals( Boolean.TRUE, message.findListenProperty( twistie, "DefaultSelection" ) );
   }
 
   @SuppressWarnings("serial")
@@ -124,7 +124,7 @@
     lca.renderChanges( twistie );
 
     Message message = Fixture.getProtocolMessage();
-    assertNull( message.findListenOperation( twistie, "selection" ) );
+    assertNull( message.findListenOperation( twistie, "DefaultSelection" ) );
   }
 
   public void testRenderInitialExpanded() throws IOException {
