diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA.java
index 7f14837..fd8035e 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA.java
@@ -35,7 +35,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.Font;
 import org.eclipse.swt.internal.widgets.ItemLCAUtil;
 import org.eclipse.swt.widgets.Widget;
@@ -58,7 +57,7 @@
   private static final String PROP_FOOTER_FONT = "footerFont";
   private static final String PROP_FOOTER_TEXT = "footerText";
   private static final String PROP_FOOTER_IMAGE = "footerImage";
-  private static final String PROP_SELECTION_LISTENER = "selection";
+  private static final String PROP_SELECTION_LISTENER = "Selection";
 
   private static final int ZERO = 0;
   private static final String DEFAULT_ALIGNMENT = "left";
@@ -100,7 +99,7 @@
     preserveProperty( column, PROP_FOOTER_FONT, column.getFooterFont() );
     preserveProperty( column, PROP_FOOTER_TEXT, column.getFooterText() );
     preserveProperty( column, PROP_FOOTER_IMAGE, column.getFooterImage() );
-    preserveListener( column, PROP_SELECTION_LISTENER, SelectionEvent.hasListener( column ) );
+    preserveListener( column, PROP_SELECTION_LISTENER, column.isListening( SWT.Selection ) );
   }
 
   @Override
@@ -121,7 +120,7 @@
     renderFont( column, PROP_FOOTER_FONT, column.getFooterFont() );
     renderProperty( column, PROP_FOOTER_TEXT, column.getFooterText(), "" );
     renderProperty( column, PROP_FOOTER_IMAGE, column.getFooterImage(), null );
-    renderListener( column, PROP_SELECTION_LISTENER, SelectionEvent.hasListener( column ), false );
+    renderListener( column, PROP_SELECTION_LISTENER, column.isListening( SWT.Selection ), false );
   }
 
   @Override
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
index 3e3238a..05b2094 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
@@ -38,7 +38,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.internal.events.EventLCAUtil;
 import org.eclipse.swt.internal.widgets.CellToolTipUtil;
 import org.eclipse.swt.internal.widgets.ICellToolTipAdapter;
@@ -81,7 +80,8 @@
   private static final String PROP_SORT_COLUMN = "sortColumn";
   private static final String PROP_SCROLLBARS_VISIBLE = "scrollBarsVisible";
   private static final String PROP_SCROLLBARS_SELECTION_LISTENER = "scrollBarsSelection";
-  private static final String PROP_SELECTION_LISTENER = "selection";
+  private static final String PROP_SELECTION_LISTENER = "Selection";
+  private static final String PROP_DEFAULT_SELECTION_LISTENER = "DefaultSelection";
   // TODO: [if] Sync toolTipText in GridItemLCA when it's possible on the client
   private static final String PROP_ENABLE_CELL_TOOLTIP = "enableCellToolTip";
   private static final String PROP_CELL_TOOLTIP_TEXT = "cellToolTipText";
@@ -111,8 +111,8 @@
     readScrollLeft( grid );
     readTopItemIndex( grid );
     readCellToolTipTextRequested( grid );
-    processSelectionEvent( grid, ClientMessageConst.EVENT_WIDGET_SELECTED );
-    processSelectionEvent( grid, ClientMessageConst.EVENT_WIDGET_DEFAULT_SELECTED );
+    processSelectionEvent( grid, ClientMessageConst.EVENT_SELECTION );
+    processSelectionEvent( grid, ClientMessageConst.EVENT_DEFAULT_SELECTION );
     ControlLCAUtil.processEvents( grid );
     ControlLCAUtil.processKeyEvents( grid );
     ControlLCAUtil.processMenuDetect( grid );
@@ -144,8 +144,11 @@
     preserveProperty( grid, PROP_SCROLLBARS_VISIBLE, getScrollBarsVisible( grid ) );
     preserveListener( grid,
                       PROP_SCROLLBARS_SELECTION_LISTENER,
-                      hasScrollBarsSelectionListener( grid ) );
-    preserveListener( grid, PROP_SELECTION_LISTENER, SelectionEvent.hasListener( grid ) );
+                      EventLCAUtil.hasScrollBarsSelectionListener( grid ) );
+    preserveListener( grid, PROP_SELECTION_LISTENER, grid.isListening( SWT.Selection ) );
+    preserveListener( grid,
+                      PROP_DEFAULT_SELECTION_LISTENER,
+                      grid.isListening( SWT.DefaultSelection ) );
     preserveProperty( grid, PROP_ENABLE_CELL_TOOLTIP, CellToolTipUtil.isEnabledFor( grid ) );
     preserveProperty( grid, PROP_CELL_TOOLTIP_TEXT, null );
   }
@@ -177,9 +180,13 @@
                     DEFAULT_SCROLLBARS_VISIBLE );
     renderListener( grid,
                     PROP_SCROLLBARS_SELECTION_LISTENER,
-                    hasScrollBarsSelectionListener( grid ),
+                    EventLCAUtil.hasScrollBarsSelectionListener( grid ),
                     false );
-    renderListener( grid, PROP_SELECTION_LISTENER, SelectionEvent.hasListener( grid ), false );
+    renderListener( grid, PROP_SELECTION_LISTENER, grid.isListening( SWT.Selection ), false );
+    renderListener( grid,
+                    PROP_DEFAULT_SELECTION_LISTENER,
+                    grid.isListening( SWT.DefaultSelection ),
+                    false );
     renderProperty( grid, PROP_ENABLE_CELL_TOOLTIP, CellToolTipUtil.isEnabledFor( grid ), false );
     renderProperty( grid, PROP_CELL_TOOLTIP_TEXT, getCellToolTipText( grid ), null );
   }
@@ -333,19 +340,6 @@
     return new boolean[] { horizontalBarVisible, verticalBarVisible };
   }
 
-  private static boolean hasScrollBarsSelectionListener( Grid grid ) {
-    boolean result = false;
-    ScrollBar horizontalBar = grid.getHorizontalBar();
-    if( horizontalBar != null ) {
-      result = result || horizontalBar.isListening( SWT.Selection );
-    }
-    ScrollBar verticalBar = grid.getVerticalBar();
-    if( verticalBar != null ) {
-      result = result || verticalBar.isListening( SWT.Selection );
-    }
-    return result;
-  }
-
   private static GridItem getItem( Grid grid, String itemId ) {
     return ( GridItem )WidgetUtil.find( grid, itemId );
   }
@@ -360,7 +354,7 @@
     if( WidgetLCAUtil.wasEventSent( grid, eventName ) ) {
       GridItem item = getItem( grid, readEventPropertyValue( grid, eventName, EVENT_PARAM_ITEM ) );
       if( item != null ) {
-        if( eventName.equals( ClientMessageConst.EVENT_WIDGET_SELECTED ) ) {
+        if( eventName.equals( ClientMessageConst.EVENT_SELECTION ) ) {
           String detail = readEventPropertyValue( grid, eventName, EVENT_PARAM_DETAIL );
           if( "check".equals( detail ) ) {
             String index = readEventPropertyValue( grid, eventName, EVENT_PARAM_INDEX );
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
index 3e19955..9064d88 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
@@ -27,7 +27,6 @@
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
@@ -448,13 +447,13 @@
   public void testAddRemoveSelectionListener() {
     GridColumn column = new GridColumn( grid, SWT.NONE );
     SelectionListener listener = new SelectionAdapter() { };
-    assertFalse( SelectionEvent.hasListener( column ) );
+    assertFalse( column.isListening( SWT.Selection ) );
 
     column.addSelectionListener( listener );
-    assertTrue( SelectionEvent.hasListener( column ) );
+    assertTrue( column.isListening( SWT.Selection ) );
 
     column.removeSelectionListener( listener );
-    assertFalse( SelectionEvent.hasListener( column ) );
+    assertFalse( column.isListening( SWT.Selection ) );
   }
 
   public void testAddSelectionListener_NullArgument() {
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
index 5231437..8d7ff25 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
@@ -487,7 +487,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( column, "selection" ) );
+    assertEquals( Boolean.TRUE, message.findListenProperty( column, "Selection" ) );
   }
 
   public void testRenderRemoveSelectionListener() throws Exception {
@@ -501,7 +501,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( column, "selection" ) );
+    assertEquals( Boolean.FALSE, message.findListenProperty( column, "Selection" ) );
   }
 
   public void testRenderSelectionListenerUnchanged() throws Exception {
@@ -514,7 +514,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertNull( message.findListenOperation( column, "selection" ) );
+    assertNull( message.findListenOperation( column, "Selection" ) );
   }
 
   public void testReadWidth() {
@@ -826,7 +826,7 @@
     } );
 
     Fixture.fakeNewRequest( display );
-    Fixture.fakeNotifyOperation( getId( column ), ClientMessageConst.EVENT_WIDGET_SELECTED, null );
+    Fixture.fakeNotifyOperation( getId( column ), ClientMessageConst.EVENT_SELECTION, null );
     Fixture.readDataAndProcessAction( column );
 
     assertEquals( 1, events.size() );
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
index 302d61d..fb244f9 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
@@ -14,8 +14,8 @@
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
 import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_WIDGET_DEFAULT_SELECTED;
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_WIDGET_SELECTED;
+import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION;
+import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SELECTION;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
 
 import java.io.IOException;
@@ -769,7 +769,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "selection" ) );
+    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Selection" ) );
+    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "DefaultSelection" ) );
   }
 
   public void testRenderRemoveSelectionListener() throws Exception {
@@ -783,7 +784,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( grid, "selection" ) );
+    assertEquals( Boolean.FALSE, message.findListenProperty( grid, "Selection" ) );
+    assertEquals( Boolean.FALSE, message.findListenProperty( grid, "DefaultSelection" ) );
   }
 
   public void testRenderSelectionListenerUnchanged() throws Exception {
@@ -796,7 +798,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertNull( message.findListenOperation( grid, "selection" ) );
+    assertNull( message.findListenOperation( grid, "Selection" ) );
+    assertNull( message.findListenOperation( grid, "DefaultSelection" ) );
   }
 
   public void testRenderInitialEnableCellToolTip() throws IOException {
@@ -909,7 +912,7 @@
     Fixture.fakeNewRequest( display );
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_WIDGET_SELECTED, parameters );
+    Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
@@ -930,7 +933,7 @@
     parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
     parameters.put( ClientMessageConst.EVENT_PARAM_DETAIL, "check" );
     parameters.put( ClientMessageConst.EVENT_PARAM_INDEX, Integer.valueOf( 3 ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_WIDGET_SELECTED, parameters );
+    Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
@@ -950,7 +953,7 @@
     Fixture.fakeNewRequest( display );
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_WIDGET_DEFAULT_SELECTED, parameters );
+    Fixture.fakeNotifyOperation( getId( grid ), EVENT_DEFAULT_SELECTION, parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
