Adopt widgets to the recent changes in the event system
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 );
-    }
-  }
 }