diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/Grid.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/Grid.java
index a8c5dbc..78b6c41 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/Grid.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/Grid.java
@@ -27,9 +27,7 @@
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.TreeEvent;
 import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
@@ -44,6 +42,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.TypedListener;
 
 
 /**
@@ -223,7 +222,12 @@
    */
   public void addSelectionListener( SelectionListener listener ) {
     checkWidget();
-    SelectionEvent.addListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Selection, typedListener );
+    addListener( SWT.DefaultSelection, typedListener );
   }
 
   /**
@@ -242,7 +246,11 @@
    */
   public void removeSelectionListener( SelectionListener listener ) {
     checkWidget();
-    SelectionEvent.removeListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Selection, listener );
+    removeListener( SWT.DefaultSelection, listener );
   }
 
   /**
@@ -267,7 +275,12 @@
    */
   public void addTreeListener( TreeListener listener ) {
     checkWidget();
-    TreeEvent.addListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Expand, typedListener );
+    addListener( SWT.Collapse, typedListener );
   }
 
   /**
@@ -286,7 +299,11 @@
    */
   public void removeTreeListener( TreeListener listener ) {
     checkWidget();
-    TreeEvent.removeListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Expand, listener );
+    removeListener( SWT.Collapse, listener );
   }
 
   /**
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
index fd25242..d9d89a0 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
@@ -12,14 +12,13 @@
 
 import org.eclipse.rap.rwt.graphics.Graphics;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.TypedListener;
 
 
 /**
@@ -224,7 +223,12 @@
    */
   public void addSelectionListener( SelectionListener listener ) {
     checkWidget();
-    SelectionEvent.addListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Selection, typedListener );
+    addListener( SWT.DefaultSelection, typedListener );
   }
 
   /**
@@ -245,7 +249,11 @@
    */
   public void removeSelectionListener( SelectionListener listener ) {
     checkWidget();
-    SelectionEvent.removeListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Selection, listener );
+    removeListener( SWT.DefaultSelection, listener );
   }
 
   /**
@@ -268,7 +276,12 @@
    */
   public void addControlListener( ControlListener listener ) {
     checkWidget();
-    ControlEvent.addListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Move, typedListener );
+    addListener( SWT.Resize, typedListener );
   }
 
   /**
@@ -290,7 +303,11 @@
    */
   public void removeControlListener( ControlListener listener ) {
     checkWidget();
-    ControlEvent.removeListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Move, listener );
+    removeListener( SWT.Resize, listener );
   }
 
   /**
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
index b713fc4..f6f44f1 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
@@ -14,11 +14,11 @@
 import java.util.List;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TreeEvent;
 import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.TypedListener;
 
 
 /**
@@ -120,7 +120,12 @@
    */
   public void addTreeListener( TreeListener listener ) {
     checkWidget();
-    TreeEvent.addListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Expand, typedListener );
+    addListener( SWT.Collapse, typedListener );
   }
 
   /**
@@ -142,7 +147,11 @@
    */
   public void removeTreeListener( TreeListener listener ) {
     checkWidget();
-    TreeEvent.removeListener( this, listener );
+    if( listener == null ) {
+      SWT.error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Expand, listener );
+    removeListener( SWT.Collapse, listener );
   }
 
   /**
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
index d805d12..a72a3dc 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
@@ -26,9 +26,10 @@
 import org.eclipse.rap.rwt.lifecycle.ProcessActionRunner;
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
-import org.eclipse.swt.events.TreeEvent;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.internal.widgets.ItemLCAUtil;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Widget;
 
 
@@ -104,10 +105,11 @@
           group.setExpanded( expanded );
         }
       } );
-      if( TreeEvent.hasListener( group ) ) {
-        int eventType = expanded ? TreeEvent.TREE_EXPANDED : TreeEvent.TREE_COLLAPSED;
-        TreeEvent event = new TreeEvent( group, null, eventType );
-        event.processEvent();
+      if( expanded && group.isListening( SWT.Expand ) ) {
+        processGroupExpandedEvent( group );
+      }
+      if( !expanded && group.isListening( SWT.Collapse ) ) {
+        processGroupCollapsedEvent( group );
       }
     }
   }
@@ -166,4 +168,17 @@
     }
     return result;
   }
+
+  /////////////////////////////////
+  // Process expand/collapse events
+
+  private static void processGroupExpandedEvent( GridColumnGroup group ) {
+    Event event = new Event();
+    group.notifyListeners( SWT.Expand, event );
+  }
+
+  private static void processGroupCollapsedEvent( GridColumnGroup group ) {
+    Event event = new Event();
+    group.notifyListeners( SWT.Collapse, event );
+  }
 }
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 16187c0..3e3238a 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
@@ -117,6 +117,7 @@
     ControlLCAUtil.processKeyEvents( grid );
     ControlLCAUtil.processMenuDetect( grid );
     WidgetLCAUtil.processHelp( grid );
+    EventLCAUtil.processScrollBarSelection( grid );
   }
 
   @Override
@@ -336,11 +337,11 @@
     boolean result = false;
     ScrollBar horizontalBar = grid.getHorizontalBar();
     if( horizontalBar != null ) {
-      result = result || SelectionEvent.hasListener( horizontalBar );
+      result = result || horizontalBar.isListening( SWT.Selection );
     }
     ScrollBar verticalBar = grid.getVerticalBar();
     if( verticalBar != null ) {
-      result = result || SelectionEvent.hasListener( verticalBar );
+      result = result || verticalBar.isListening( SWT.Selection );
     }
     return result;
   }
@@ -352,12 +353,6 @@
   private static void processScrollBarSelection( ScrollBar scrollBar, int selection ) {
     if( scrollBar != null ) {
       scrollBar.setSelection( selection );
-      if( SelectionEvent.hasListener( scrollBar ) ) {
-        SelectionEvent evt = new SelectionEvent( scrollBar, null, SelectionEvent.WIDGET_SELECTED );
-        evt.stateMask = EventLCAUtil.readStateMask( scrollBar,
-                                                    ClientMessageConst.EVENT_WIDGET_SELECTED );
-        evt.processEvent();
-      }
     }
   }
 
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
index a6332ef..6cff3b2 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
@@ -17,7 +17,6 @@
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.TreeAdapter;
-import org.eclipse.swt.events.TreeEvent;
 import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
@@ -85,10 +84,12 @@
     TreeListener listener = new TreeAdapter() {};
     group.addTreeListener( listener );
 
-    assertTrue( TreeEvent.hasListener( group ) );
+    assertTrue( group.isListening( SWT.Expand ) );
+    assertTrue( group.isListening( SWT.Collapse ) );
 
     group.removeTreeListener( listener );
-    assertFalse( TreeEvent.hasListener( group ) );
+    assertFalse( group.isListening( SWT.Expand ) );
+    assertFalse( group.isListening( SWT.Collapse ) );
   }
 
   public void testGetHeaderText_Initial() {
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 d52c620..3e19955 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
@@ -23,7 +23,6 @@
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
@@ -481,13 +480,16 @@
   public void testAddRemoveControlListener() {
     GridColumn column = new GridColumn( grid, SWT.NONE );
     ControlListener listener = new ControlAdapter() { };
-    assertFalse( ControlEvent.hasListener( column ) );
+    assertFalse( column.isListening( SWT.Move ) );
+    assertFalse( column.isListening( SWT.Resize ) );
 
     column.addControlListener( listener );
-    assertTrue( ControlEvent.hasListener( column ) );
+    assertTrue( column.isListening( SWT.Move ) );
+    assertTrue( column.isListening( SWT.Resize ) );
 
     column.removeControlListener( listener );
-    assertFalse( ControlEvent.hasListener( column ) );
+    assertFalse( column.isListening( SWT.Move ) );
+    assertFalse( column.isListening( SWT.Resize ) );
   }
 
   public void testAddControlListener_NullArgument() {
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/Grid_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/Grid_Test.java
index 22d4c07..9b6e784 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/Grid_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/Grid_Test.java
@@ -28,10 +28,8 @@
 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.events.TreeAdapter;
-import org.eclipse.swt.events.TreeEvent;
 import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
@@ -366,20 +364,24 @@
     SelectionListener listener = new SelectionAdapter() {};
     grid.addSelectionListener( listener );
 
-    assertTrue( SelectionEvent.hasListener( grid ) );
+    assertTrue( grid.isListening( SWT.Selection ) );
+    assertTrue( grid.isListening( SWT.DefaultSelection ) );
 
     grid.removeSelectionListener( listener );
-    assertFalse( SelectionEvent.hasListener( grid ) );
+    assertFalse( grid.isListening( SWT.Selection ) );
+    assertFalse( grid.isListening( SWT.DefaultSelection ) );
   }
 
   public void testAddRemoveTreeListener() {
     TreeListener listener = new TreeAdapter() {};
     grid.addTreeListener( listener );
 
-    assertTrue( TreeEvent.hasListener( grid ) );
+    assertTrue( grid.isListening( SWT.Expand ) );
+    assertTrue( grid.isListening( SWT.Collapse ) );
 
     grid.removeTreeListener( listener );
-    assertFalse( TreeEvent.hasListener( grid ) );
+    assertFalse( grid.isListening( SWT.Expand ) );
+    assertFalse( grid.isListening( SWT.Collapse ) );
   }
 
   public void testClearAll() {
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
index 81fc716..0670431 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
@@ -14,15 +14,18 @@
 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.lifecycle.WidgetUtil.getId;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridColumnGroup;
 import org.eclipse.nebula.widgets.grid.internal.gridcolumngroupkit.GridColumnGroupLCA;
+import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -31,8 +34,8 @@
 import org.eclipse.rap.rwt.testfixture.Message.DestroyOperation;
 import org.eclipse.rap.rwt.testfixture.Message.Operation;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TreeAdapter;
 import org.eclipse.swt.events.TreeEvent;
+import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.internal.graphics.ImageFactory;
@@ -41,6 +44,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.mockito.ArgumentCaptor;
 
 import junit.framework.TestCase;
 
@@ -242,30 +246,30 @@
   }
 
   public void testProcessTreeEvent_Expanded() {
-    List<TreeEvent> events = new LinkedList<TreeEvent>();
-    group.addTreeListener( new LoggingTreeListener( events ) );
+    TreeListener treeListener = mock( TreeListener.class );
+    group.addTreeListener( treeListener );
     group.setExpanded( false );
 
     Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_TREE_EXPANDED, null );
     Fixture.readDataAndProcessAction( group );
 
-    assertEquals( 1, events.size() );
-    TreeEvent event = events.get( 0 );
-    assertEquals( SWT.Expand, event.getID() );
+    ArgumentCaptor<TreeEvent> captor = ArgumentCaptor.forClass( TreeEvent.class );
+    verify( treeListener, times( 1 ) ).treeExpanded( captor.capture() );
+    TreeEvent event = captor.getValue();
     assertEquals( group, event.getSource() );
     assertTrue( group.getExpanded() );
   }
 
   public void testProcessTreeEvent_Collapsed() {
-    List<TreeEvent> events = new LinkedList<TreeEvent>();
-    group.addTreeListener( new LoggingTreeListener( events ) );
+    TreeListener treeListener = mock( TreeListener.class );
+    group.addTreeListener( treeListener );
 
     Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_TREE_COLLAPSED, null );
     Fixture.readDataAndProcessAction( group );
 
-    assertEquals( 1, events.size() );
-    TreeEvent event = events.get( 0 );
-    assertEquals( SWT.Collapse, event.getID() );
+    ArgumentCaptor<TreeEvent> captor = ArgumentCaptor.forClass( TreeEvent.class );
+    verify( treeListener, times( 1 ) ).treeCollapsed( captor.capture() );
+    TreeEvent event = captor.getValue();
     assertEquals( group, event.getSource() );
     assertFalse( group.getExpanded() );
   }
@@ -407,7 +411,7 @@
   }
 
   public void testRenderCustomVariant() throws IOException {
-    group.setData( WidgetUtil.CUSTOM_VARIANT, "blue" );
+    group.setData( RWT.CUSTOM_VARIANT, "blue" );
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
@@ -418,7 +422,7 @@
     Fixture.markInitialized( display );
     Fixture.markInitialized( group );
 
-    group.setData( WidgetUtil.CUSTOM_VARIANT, "blue" );
+    group.setData( RWT.CUSTOM_VARIANT, "blue" );
     Fixture.preserveWidgets();
     lca.renderChanges( group );
 
@@ -426,21 +430,4 @@
     assertNull( message.findSetOperation( group, "customVariant" ) );
   }
 
-  //////////////////
-  // Helping classes
-
-  private static class LoggingTreeListener extends TreeAdapter {
-    private final List<TreeEvent> events;
-    private LoggingTreeListener( List<TreeEvent> events ) {
-      this.events = events;
-    }
-    @Override
-    public void treeExpanded( TreeEvent event ) {
-      events.add( event );
-    }
-    @Override
-    public void treeCollapsed( TreeEvent event ) {
-      events.add( event );
-    }
-  }
 }
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 a1813b8..0bac66e 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
@@ -14,6 +14,11 @@
 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.lifecycle.WidgetUtil.getId;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -518,10 +523,11 @@
   }
 
   public void testReadWidth() {
-    final List<ControlEvent> events = new LinkedList<ControlEvent>();
     GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
-    columns[ 0 ].addControlListener( new LoggingControlListener( events ) );
-    columns[ 1 ].addControlListener( new LoggingControlListener( events ) );
+    ControlListener controlListener0 = mock( ControlListener.class );
+    columns[ 0 ].addControlListener( controlListener0 );
+    ControlListener controlListener1 = mock( ControlListener.class );
+    columns[ 1 ].addControlListener( controlListener1 );
 
     // Simulate request that initializes widgets
     Fixture.fakeNewRequest( display );
@@ -535,25 +541,22 @@
     Fixture.fakeCallOperation( getId( columns[ 0 ] ), "resize", parameters );
     Fixture.executeLifeCycleFromServerThread();
 
-    assertEquals( 2, events.size() );
-    ControlEvent event = events.get( 0 );
-    assertSame( columns[ 0 ], event.widget );
-    assertEquals( SWT.Resize, event.getID() );
+    verify( controlListener0, times( 1 ) ).controlResized( any( ControlEvent.class ) );
     assertEquals( newWidth, columns[ 0 ].getWidth() );
-    event = events.get( 1 );
-    assertSame( columns[ 1 ], event.widget );
-    assertEquals( SWT.Move, event.getID() );
+    verify( controlListener1, times( 1 ) ).controlMoved( any( ControlEvent.class ) );
     Message message = Fixture.getProtocolMessage();
     assertEquals( Integer.valueOf( newWidth ), message.findSetProperty( columns[ 0 ], "width" ) );
     assertEquals( Integer.valueOf( newLeft ), message.findSetProperty( columns[ 1 ], "left" ) );
   }
 
   public void testReadLeft() {
-    final List<ControlEvent> events = new LinkedList<ControlEvent>();
     GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
-    column.addControlListener( new LoggingControlListener( events ) );
-    columns[ 0 ].addControlListener( new LoggingControlListener( events ) );
-    columns[ 1 ].addControlListener( new LoggingControlListener( events ) );
+    ControlListener controlListener = mock( ControlListener.class );
+    column.addControlListener( controlListener );
+    ControlListener controlListener0 = mock( ControlListener.class );
+    columns[ 0 ].addControlListener( controlListener0 );
+    ControlListener controlListener1 = mock( ControlListener.class );
+    columns[ 1 ].addControlListener( controlListener1 );
 
     // Simulate request that initializes widgets
     Fixture.fakeNewRequest( display );
@@ -566,13 +569,10 @@
     Fixture.fakeCallOperation( getId( columns[ 0 ] ), "move", parameters );
     Fixture.executeLifeCycleFromServerThread();
 
-    assertEquals( 2, events.size() );
-    ControlEvent event = events.get( 0 );
-    assertSame( columns[ 0 ], event.widget );
-    assertEquals( SWT.Move, event.getID() );
-    event = events.get( 1 );
-    assertSame( column, event.widget );
-    assertEquals( SWT.Move, event.getID() );
+
+    verify( controlListener, times( 1 ) ).controlMoved( any( ControlEvent.class ) );
+    verify( controlListener0, times( 1 ) ).controlMoved( any( ControlEvent.class ) );
+    verify( controlListener1, times( 0 ) ).controlMoved( any( ControlEvent.class ) );
     Message message = Fixture.getProtocolMessage();
     assertEquals( Integer.valueOf( 20 ), message.findSetProperty( column, "left" ) );
     assertEquals( Integer.valueOf( 0 ), message.findSetProperty( columns[ 0 ], "left" ) );
@@ -977,19 +977,4 @@
     assertEquals( JSONObject.NULL, message.findSetProperty( column, "footerImage" ) );
   }
 
-  //////////////////
-  // Helping classes
-
-  private static class LoggingControlListener implements ControlListener {
-    private final List<ControlEvent> events;
-    private LoggingControlListener( List<ControlEvent> events ) {
-      this.events = events;
-    }
-    public void controlMoved( ControlEvent event ) {
-      events.add( event );
-    }
-    public void controlResized( ControlEvent event ) {
-      events.add( event );
-    }
-  }
 }
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
index 084df96..af7f0c1 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
@@ -16,11 +16,11 @@
 import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_TREE_EXPANDED;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridItem;
 import org.eclipse.rap.rwt.RWT;
@@ -32,9 +32,8 @@
 import org.eclipse.rap.rwt.testfixture.Message.CreateOperation;
 import org.eclipse.rap.rwt.testfixture.Message.DestroyOperation;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TreeAdapter;
 import org.eclipse.swt.events.TreeEvent;
+import org.eclipse.swt.events.TreeListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
@@ -42,6 +41,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.mockito.ArgumentCaptor;
 
 import junit.framework.TestCase;
 
@@ -620,33 +620,33 @@
   }
 
   public void testProcessTreeEvent_Expanded() {
-    List<TreeEvent> events = new LinkedList<TreeEvent>();
-    grid.addTreeListener( new LoggingTreeListener( events ) );
+    TreeListener treeListener = mock( TreeListener.class );
+    grid.addTreeListener( treeListener );
     new GridItem( item, SWT.NONE );
 
     Fixture.fakeNotifyOperation( getId( item ), ClientMessageConst.EVENT_TREE_EXPANDED, null );
     Fixture.readDataAndProcessAction( item );
 
-    assertEquals( 1, events.size() );
-    SelectionEvent event = events.get( 0 );
-    assertEquals( SWT.Expand, event.getID() );
+    ArgumentCaptor<TreeEvent> captor = ArgumentCaptor.forClass( TreeEvent.class );
+    verify( treeListener, times( 1 ) ).treeExpanded( captor.capture() );
+    TreeEvent event = captor.getValue();
     assertEquals( grid, event.getSource() );
     assertEquals( item, event.item );
     assertTrue( item.isExpanded() );
   }
 
   public void testProcessTreeEvent_Collapsed() {
-    List<TreeEvent> events = new LinkedList<TreeEvent>();
-    grid.addTreeListener( new LoggingTreeListener( events ) );
+    TreeListener treeListener = mock( TreeListener.class );
+    grid.addTreeListener( treeListener );
     new GridItem( item, SWT.NONE );
     item.setExpanded( true );
 
     Fixture.fakeNotifyOperation( getId( item ), ClientMessageConst.EVENT_TREE_COLLAPSED, null );
     Fixture.readDataAndProcessAction( item );
 
-    assertEquals( 1, events.size() );
-    SelectionEvent event = events.get( 0 );
-    assertEquals( SWT.Collapse, event.getID() );
+    ArgumentCaptor<TreeEvent> captor = ArgumentCaptor.forClass( TreeEvent.class );
+    verify( treeListener, times( 1 ) ).treeCollapsed( captor.capture() );
+    TreeEvent event = captor.getValue();
     assertEquals( grid, event.getSource() );
     assertEquals( item, event.item );
     assertFalse( item.isExpanded() );
@@ -666,21 +666,4 @@
     assertTrue( jsonEquals( "[ false, true ]", actual ) );
   }
 
-  //////////////////
-  // Helping classes
-
-  private static class LoggingTreeListener extends TreeAdapter {
-    private final List<TreeEvent> events;
-    private LoggingTreeListener( List<TreeEvent> events ) {
-      this.events = events;
-    }
-    @Override
-    public void treeExpanded( TreeEvent event ) {
-      events.add( event );
-    }
-    @Override
-    public void treeCollapsed( TreeEvent event ) {
-      events.add( event );
-    }
-  }
 }
