diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
index 0f08938..25e679e 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
@@ -80,7 +80,7 @@
   }
 
   protected boolean allowProcessing() {
-    return EventUtil.isAccessible( widget );
+    return EventUtil.allowProcessing( sourceEvent );
   }
 
   /**
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ShellEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ShellEvent.java
index 559d163..2489ce7 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ShellEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ShellEvent.java
@@ -11,8 +11,6 @@
  ******************************************************************************/
 package org.eclipse.swt.events;
 
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
 
 
@@ -32,8 +30,6 @@
 
   private static final long serialVersionUID = 1L;
 
-  private static final int[] EVENT_TYPES = { SWT.Close, SWT.Activate, SWT.Deactivate };
-
   /**
    * A flag indicating whether the operation should be allowed.
    * Setting this field to <code>false</code> will cancel the operation.
@@ -51,31 +47,4 @@
     doit = event.doit;
   }
 
-  /**
-   * @since 2.0
-   * @deprecated not part of the API, do not use in application code
-   */
-  @Deprecated
-  public static boolean hasListener( Adaptable adaptable ) {
-    return hasListener( adaptable, EVENT_TYPES );
-  }
-
-  /**
-   * @since 2.0
-   * @deprecated not part of the API, do not use in application code
-   */
-  @Deprecated
-  public static void addListener( Adaptable adaptable, ShellListener listener ) {
-    addListener( adaptable, EVENT_TYPES, listener );
-  }
-
-  /**
-   * @since 2.0
-   * @deprecated not part of the API, do not use in application code
-   */
-  @Deprecated
-  public static void removeListener( Adaptable adaptable, ShellListener listener ) {
-    removeListener( adaptable, EVENT_TYPES, listener );
-  }
-
 }
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/EventUtil.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/EventUtil.java
index 63caa3f..0f05a2a 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/EventUtil.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/EventUtil.java
@@ -14,7 +14,9 @@
 import org.eclipse.rap.rwt.internal.service.ContextProvider;
 import org.eclipse.rap.rwt.service.IServiceStore;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.events.EventTypes;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Shell;
@@ -43,8 +45,35 @@
     return eventTime.intValue();
   }
 
+  public static boolean allowProcessing( Event event ) {
+    boolean result;
+    if( event.widget.isDisposed() ) {
+      result = false;
+    } else {
+      switch( event.type ) {
+        case SWT.Activate:
+        case SWT.Deactivate:
+        case SWT.Move:
+        case SWT.Resize:
+        case SWT.Paint:
+        case SWT.Modify:
+        case SWT.Verify:
+        case SWT.SetData:
+        case EventTypes.PROGRESS_CHANGED:
+        case EventTypes.PROGRESS_COMPLETED:
+          result = true;
+        break;
+        default:
+          result = isAccessible( event.widget );
+        break;
+      }
+    }
+    return result;
+  }
+
   public static boolean isAccessible( Widget widget ) {
-    boolean result = !widget.isDisposed();
+    boolean result;
+    result = !widget.isDisposed();
     if( result ) {
       if( widget instanceof Control ) {
         result = isAccessible( ( Control )widget );
@@ -63,9 +92,7 @@
   }
 
   private static boolean isAccessible( Control control ) {
-    return    control.getEnabled()
-           && control.getVisible()
-           && isShellAccessible( control.getShell() );
+    return control.getEnabled() && control.getVisible() && isShellAccessible( control.getShell() );
   }
 
   private static boolean isAccessible( Menu menu ) {
@@ -73,13 +100,11 @@
   }
 
   private static boolean isAccessible( MenuItem menuItem ) {
-    Shell shell = menuItem.getParent().getShell();
-    return menuItem.getEnabled() && isShellAccessible( shell );
+    return menuItem.getEnabled() && isShellAccessible( menuItem.getParent().getShell() );
   }
 
   private static boolean isAccessible( ToolItem toolItem ) {
-    Shell shell = toolItem.getParent().getShell();
-    return toolItem.getEnabled() && isShellAccessible( shell );
+    return toolItem.getEnabled() && isShellAccessible( toolItem.getParent().getShell() );
   }
 
   private static boolean isShellAccessible( Shell shell ) {
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
index b1650e3..9efa727 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
@@ -1177,7 +1177,7 @@
     while( !result && events.length > 0 ) {
       Event event = events[ 0 ];
       EventList.getInstance().remove( event );
-      if( EventUtil.isAccessible( event.widget ) ) {
+      if( EventUtil.allowProcessing( event ) ) {
         event.widget.notifyListeners( event.type, event );
         result = true;
       } else {
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java
index 1997181..689a8ea 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java
@@ -16,7 +16,6 @@
 import org.eclipse.rap.rwt.lifecycle.ProcessActionRunner;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.ShellEvent;
 import org.eclipse.swt.events.ShellListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
@@ -1081,7 +1080,13 @@
    */
   public void addShellListener( ShellListener listener ) {
     checkWidget();
-    ShellEvent.addListener( this, listener );
+    if( listener == null ) {
+      error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    TypedListener typedListener = new TypedListener( listener );
+    addListener( SWT.Close, typedListener );
+    addListener( SWT.Activate, typedListener );
+    addListener( SWT.Deactivate, typedListener );
   }
 
   /**
@@ -1103,7 +1108,12 @@
    */
   public void removeShellListener( ShellListener listener ) {
     checkWidget();
-    ShellEvent.removeListener( this, listener );
+    if( listener == null ) {
+      error( SWT.ERROR_NULL_ARGUMENT );
+    }
+    removeListener( SWT.Close, listener );
+    removeListener( SWT.Activate, listener );
+    removeListener( SWT.Deactivate, listener );
   }
 
   ///////////
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 3609b76..5f92c99 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
@@ -48,7 +48,6 @@
   private static final String PROP_SHOW_FOCUSED_CONTROL = "showFocusedControl";
   private static final String PROP_SCROLLBARS_VISIBLE = "scrollBarsVisible";
   private static final String PROP_SCROLLBARS_SELECTION_LISTENER = "scrollBarsSelection";
-  private static final String EVENT_SCROLLBAR_SELECTED = "scrollBarSelected";
 
   // Default values
   private static final Point DEFAULT_ORIGIN = new Point( 0, 0 );
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/displaykit/DisplayLCA.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/displaykit/DisplayLCA.java
index 81bc791..8252d9e 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/displaykit/DisplayLCA.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/displaykit/DisplayLCA.java
@@ -15,6 +15,7 @@
 import static org.eclipse.rap.rwt.internal.protocol.ProtocolUtil.readPropertyValueAsString;
 
 import java.io.IOException;
+
 import org.eclipse.rap.rwt.branding.AbstractBranding;
 import org.eclipse.rap.rwt.internal.application.RWTFactory;
 import org.eclipse.rap.rwt.internal.branding.BrandingUtil;
@@ -33,7 +34,6 @@
 import org.eclipse.rap.rwt.internal.theme.ThemeUtil;
 import org.eclipse.rap.rwt.internal.uicallback.UICallBackServiceHandler;
 import org.eclipse.rap.rwt.internal.util.ActiveKeysUtil;
-import org.eclipse.rap.rwt.internal.util.NumberFormatUtil;
 import org.eclipse.rap.rwt.lifecycle.AbstractWidgetLCA;
 import org.eclipse.rap.rwt.lifecycle.IWidgetAdapter;
 import org.eclipse.rap.rwt.lifecycle.IWidgetLifeCycleAdapter;
@@ -365,18 +365,6 @@
     return readPropertyValueAsString( getId( display ), propertyName );
   }
 
-  private static int readIntPropertyValue( Display display, String propertyName, int defaultValue )
-  {
-    String value = readPropertyValue( display, propertyName );
-    int result;
-    if( value == null ) {
-      result = defaultValue;
-    } else {
-      result = NumberFormatUtil.parseInt( value );
-    }
-    return result;
-  }
-
   private static IDisplayAdapter getDisplayAdapter( Display display ) {
     Object adapter = display.getAdapter( IDisplayAdapter.class );
     return ( IDisplayAdapter )adapter;
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/shellkit/ShellLCA.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/shellkit/ShellLCA.java
index 716e8d6..734c018 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/shellkit/ShellLCA.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/shellkit/ShellLCA.java
@@ -29,7 +29,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.ShellEvent;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
@@ -91,7 +90,7 @@
     preserveProperty( shell, PROP_FULLSCREEN, Boolean.valueOf( shell.getFullScreen() ) );
     preserveProperty( shell, PROP_MINIMUM_SIZE, shell.getMinimumSize() );
     preserveProperty( shell, PROP_DEFAULT_BUTTON, shell.getDefaultButton() );
-    preserveListener( shell, PROP_SHELL_LISTENER, ShellEvent.hasListener( shell ) );
+    preserveListener( shell, PROP_SHELL_LISTENER, hasShellListener( shell ) );
   }
 
   public void readData( Widget widget ) {
@@ -269,10 +268,16 @@
     // the "activeControl" property and "controlActivated" event (also sent by the shell and
     // processed in ShellLCA#processActivate).
     // The listener property for this event is rendered by ControlLCAUtil#renderActivateListener
-    boolean newValue = ShellEvent.hasListener( shell );
+    boolean newValue = hasShellListener( shell );
     renderListener( shell, PROP_SHELL_LISTENER, newValue, false );
   }
 
+  private static boolean hasShellListener( Shell shell ) {
+    return shell.isListening( SWT.Close ) 
+        || shell.isListening( SWT.Activate ) 
+        || shell.isListening( SWT.Deactivate );
+  }
+
   private static String getMode( Shell shell ) {
     String result = null;
     if( shell.getMinimized() ) {
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 b6eaea5..4aaff41 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
@@ -72,7 +72,6 @@
   private static final String PROP_ENABLE_CELL_TOOLTIP = "enableCellToolTip";
   private static final String PROP_CELL_TOOLTIP_TEXT = "cellToolTipText";
   private static final String PROP_MARKUP_ENABLED = "markupEnabled";
-  private static final String EVENT_SCROLLBAR_SELECTED = "scrollBarSelected";
 
   private static final int ZERO = 0 ;
   private static final String[] DEFAULT_SELECTION = new String[ 0 ];
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 771604a..9dc4583 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
@@ -81,7 +81,6 @@
   private static final String PROP_ENABLE_CELL_TOOLTIP = "enableCellToolTip";
   private static final String PROP_CELL_TOOLTIP_TEXT = "cellToolTipText";
   private static final String PROP_MARKUP_ENABLED = "markupEnabled";
-  private static final String EVENT_SCROLLBAR_SELECTED = "scrollBarSelected";
 
   private static final int ZERO = 0 ;
   private static final String[] DEFAULT_SELECTION = new String[ 0 ];
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/lifecycle/EventFiltering_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/lifecycle/EventFiltering_Test.java
index 013627c..84c4992 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/lifecycle/EventFiltering_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/lifecycle/EventFiltering_Test.java
@@ -26,6 +26,7 @@
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.events.FocusAdapter;
 import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.SelectionEvent;
@@ -33,11 +34,17 @@
 import org.eclipse.swt.events.ShellEvent;
 import org.eclipse.swt.events.ShellListener;
 import org.eclipse.swt.events.TypedEvent;
+import org.eclipse.swt.internal.events.EventTypes;
+import org.eclipse.swt.internal.widgets.EventUtil;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
 
 
 public class EventFiltering_Test extends TestCase {
@@ -58,7 +65,96 @@
   protected void tearDown() throws Exception {
     Fixture.tearDown();
   }
+  
+  public void testAllowProcessingForActivateEventOnInvisibleControl() {
+    Control control = new Button( shell, SWT.PUSH );
+    control.setEnabled( false );
+    Event event = createEvent( control, SWT.Activate );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForDeactivateEventOnInvisibleControl() {
+    Control control = new Button( shell, SWT.PUSH );
+    control.setEnabled( false );
+    Event event = createEvent( control, SWT.Deactivate );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForProgressEventOnInvisibleBrowser() {
+    Browser browser = new Browser( shell, SWT.NONE );
+    Event event = createEvent( browser, EventTypes.PROGRESS_CHANGED );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
 
+  public void testAllowProcessingForResizeEventOnDisabledControl() {
+    Control control = new Button( shell, SWT.PUSH );
+    control.setEnabled( false );
+    Event event = createEvent( control, SWT.Resize );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForMoveEventOnDisabledControl() {
+    Control control = new Button( shell, SWT.PUSH );
+    control.setEnabled( false );
+    Event event = createEvent( control, SWT.Move );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForModifyEventOnDisabledText() {
+    Text text = new Text( shell, SWT.PUSH );
+    text.setEnabled( false );
+    Event event = createEvent( text, SWT.Modify );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForVerifyEventOnDisabledText() {
+    Text text = new Text( shell, SWT.PUSH );
+    text.setEnabled( false );
+    Event event = createEvent( text, SWT.Verify );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForPaintEventOnDisabledControl() {
+    Control control = new Canvas( shell, SWT.PUSH );
+    control.setEnabled( false );
+    Event event = createEvent( control, SWT.Paint );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
+  public void testAllowProcessingForSetDataEventOnDisabledControl() {
+    Control text = new Canvas( shell, SWT.PUSH );
+    text.setEnabled( false );
+    Event event = createEvent( text, SWT.SetData );
+    
+    boolean accessible = EventUtil.allowProcessing( event );
+    
+    assertTrue( accessible );
+  }
+  
   public void testЕventNotFiredOnDisabledButton() {
     Button button = new Button( shell, SWT.PUSH );
     button.setEnabled( false );
@@ -176,4 +272,11 @@
     verify( selectionListener ).widgetSelected( any( SelectionEvent.class ) );
   }
 
+  private static Event createEvent( Widget widget, int eventType ) {
+    Event result = new Event();
+    result.widget = widget;
+    result.type = eventType;
+    return result;
+  }
+
 }
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
index 1482d14..6b3fe45 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
@@ -22,6 +22,7 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import junit.framework.TestCase;
@@ -60,7 +61,7 @@
 
   private Display display;
   private Shell shell;
-  private java.util.List<TypedEvent> log;
+  private List<TypedEvent> log;
   private Control sourceControl;
   private Control targetControl;
   private DragSource dragSource;
@@ -70,7 +71,6 @@
   @Override
   protected void setUp() throws Exception {
     Fixture.setUp();
-    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     display = new Display();
     shell = new Shell( display );
     shell.open();
@@ -78,6 +78,7 @@
     targetControl = new Label( shell, SWT.NONE );
     log = new ArrayList<TypedEvent>();
     Fixture.fakeNewRequest( display );
+    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     transfers = new Transfer[] {
       HTMLTransfer.getInstance(),
       TextTransfer.getInstance()
@@ -185,7 +186,7 @@
     createDropTarget( DND.DROP_MOVE );
     addLogger( dragSource );
     addLogger( dropTarget );
-    addSetDataListener( dragSource, "text" );
+    addSetDragDataListener( dragSource, "text" );
 
     fakeDropTargetEvent( "dropAccept", 1 );
     fakeDragSourceEvent( "dragFinished", 2 );
@@ -200,7 +201,7 @@
     createDropTarget( DND.DROP_MOVE );
     addLogger( dragSource );
     addLogger( dropTarget );
-    addSetDataListener( dragSource, "Hello World!" );
+    addSetDragDataListener( dragSource, "Hello World!" );
 
 
     createDropTargetEvent( "dropAccept", 0, 0, "move", getTextType(), 1 );
@@ -217,7 +218,7 @@
     createDropTarget( DND.DROP_MOVE );
     addLogger( dragSource );
     addLogger( dropTarget );
-    addSetDataListener( dragSource, new Date() );
+    addSetDragDataListener( dragSource, new Date() );
 
     SWTException exception = null;
 
@@ -251,7 +252,7 @@
       }
     } );
     addLogger( dragSource );
-    addSetDataListener( dragSource, "data" );
+    addSetDragDataListener( dragSource, "data" );
 
 
     fakeDropTargetEvent( "dropAccept", 1 );
@@ -327,7 +328,7 @@
     createDragSource( DND.DROP_MOVE | DND.DROP_COPY );
     createDropTarget( DND.DROP_MOVE | DND.DROP_COPY );
     addLogger( dragSource );
-    addSetDataListener( dragSource, "text Data" );
+    addSetDragDataListener( dragSource, "text Data" );
     dropTarget.addDropListener( new DropTargetAdapter() {
       @Override
       public void dropAccept( DropTargetEvent event ) {
@@ -403,9 +404,9 @@
   public void testDragSetDataDataType() {
     createDragSource( DND.DROP_MOVE );
     createDropTarget( DND.DROP_MOVE );
+    addSetDragDataListener( dragSource, "string" );
     addLogger( dropTarget );
     addLogger( dragSource );
-    addSetDataListener( dragSource, "string" );
 
     fakeDropTargetEvent( "dropAccept", 0 );
     Fixture.readDataAndProcessAction( display );
@@ -472,14 +473,14 @@
   public void testDropAcceptWithDetailChangedOnEnter() {
     createDragSource( DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_COPY );
     createDropTarget( DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_COPY );
-    addSetDataListener( dragSource, "some data" );
-    addLogger( dropTarget );
+    addSetDragDataListener( dragSource, "some data" );
     dropTarget.addDropListener( new DropTargetAdapter() {
       @Override
       public void dragEnter( DropTargetEvent event ) {
         event.detail = DND.DROP_COPY;
       }
     } );
+    addLogger( dropTarget );
 
     Fixture.executeLifeCycleFromServerThread(); // clear pending message operations
     Fixture.fakeNewRequest( display );
@@ -779,10 +780,10 @@
   }
 
   private void addLogger( DropTarget dropTarget ) {
-    dropTarget.addDropListener( new LogingDropTargetListener() );
+    dropTarget.addDropListener( new LoggingDropTargetListener() );
   }
 
-  private class LogingDropTargetListener implements DropTargetListener {
+  private class LoggingDropTargetListener implements DropTargetListener {
     public void dragEnter( DropTargetEvent event ) {
       log.add( event );
     }
@@ -811,7 +812,7 @@
     return result;
   }
 
-  private void addSetDataListener( DragSource dragSource, final Object data ) {
+  private void addSetDragDataListener( DragSource dragSource, final Object data ) {
     dragSource.addDragListener( new DragSourceAdapter() {
       @Override
       public void dragSetData( DragSourceEvent event ) {
@@ -820,12 +821,12 @@
     } );
   }
 
-  private DropTargetEvent getDropTargetEvent( int i ) {
-    return ( DropTargetEvent )log.get( i );
+  private DropTargetEvent getDropTargetEvent( int index ) {
+    return ( DropTargetEvent )log.get( index );
   }
 
-  private DragSourceEvent getDragSourceEvent( int i ) {
-    return ( DragSourceEvent )log.get( i );
+  private DragSourceEvent getDragSourceEvent( int index ) {
+    return ( DragSourceEvent )log.get( index );
   }
 
 }
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/shellkit/ShellLCA_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/shellkit/ShellLCA_Test.java
index b6f43bd..c641c0e 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/shellkit/ShellLCA_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/shellkit/ShellLCA_Test.java
@@ -74,6 +74,7 @@
     display = new Display();
     shell = new Shell( display );
     Fixture.fakeNewRequest( display );
+    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
   }
 
   @Override
@@ -271,8 +272,9 @@
   }
 
   public void testUntypedActivateEvent() {
-    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     shell.open();
+    Shell otherShell = new Shell( display );
+    otherShell.open();
     Listener listener = mock( Listener.class );
     shell.addListener( SWT.Activate, listener );
 
@@ -283,8 +285,9 @@
   }
 
   public void testTypedActivateEvent() {
-    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     shell.open();
+    Shell otherShell = new Shell( display );
+    otherShell.open();
     ShellListener listener = mock( ShellListener.class );
     shell.addShellListener( listener );
 
@@ -319,7 +322,6 @@
   }
 
   public void testShellActivate() {
-    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     final StringBuilder activateEventLog = new StringBuilder();
     Listener activateListener = new Listener() {
       public void handleEvent( Event event ) {
@@ -366,8 +368,6 @@
 
     assertSame( shellToActivate, display.getActiveShell() );
     String expected = "deactivated:activeShell|activated:shellToActivate|";
-System.out.println( "expected " + expected );    
-System.out.println( "actual   " + activateEventLog.toString() );    
     assertEquals( expected, activateEventLog.toString() );
     assertEquals( expected, shellEventLog.toString() );
     // Ensure that no setActive javaScript code is rendered for client-side activated Shell
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java
index 4412504..5d18e46 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java
@@ -16,6 +16,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -400,11 +401,8 @@
     Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     shell.setSize( 100, 100 );
     Table table = new Table( shell, SWT.VIRTUAL );
-    table.addListener( SWT.SetData, new Listener() {
-      public void handleEvent( Event event ) {
-        fail( "Must not trigger SetData event" );
-      }
-    } );
+    Listener setDataListener = mock( Listener.class );
+    table.addListener( SWT.SetData, setDataListener );
     
     Fixture.fakePhase( PhaseId.READ_DATA );
     table.setItemCount( 1 );
@@ -413,11 +411,9 @@
 
     Fixture.fakePhase( PhaseId.PROCESS_ACTION );
     table.setItemCount( 0 );
-    int eventCount = 0;
     while( display.readAndDispatch() ) {
-      eventCount++;
     }
-    assertEquals( 1, eventCount );
+    verifyZeroInteractions( setDataListener );
   }
 
   public void testGetItemMetrics() {
@@ -728,9 +724,8 @@
     Fixture.readDataAndProcessAction( table );
 
     ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class );
-    verify( listener, times( 1 ) ).widgetSelected( captor.capture() );
+    verify( listener ).widgetSelected( captor.capture() );
     assertSame( table.getItem( 2 ), captor.getValue().item );
-    assertEquals( "", captor.getValue().text );
   }
 
   public void testRenderNonNegativeImageWidth() {
