diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
index 70b7aa5..ed20655 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
@@ -24,8 +24,8 @@
 import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.json.JsonValue;
-import org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler;
 import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
+import org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.internal.widgets.CellToolTipUtil;
 import org.eclipse.swt.internal.widgets.ICellToolTipAdapter;
@@ -196,7 +196,7 @@
   public void handleNotifyDefaultSelection( Grid grid, JsonObject properties ) {
     GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
     if( item != null ) {
-      Event event = createSelectionEvent( SWT.Selection, properties );
+      Event event = createSelectionEvent( SWT.DefaultSelection, properties );
       event.item = item;
       grid.notifyListeners( SWT.DefaultSelection, event );
     }
@@ -208,9 +208,12 @@
    * @param item (string) id of expanded item
    */
   public void handleNotifyExpand( Grid grid, JsonObject properties ) {
-    Event event = new Event();
-    event.item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
-    grid.notifyListeners( SWT.Expand, event );
+    GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
+    if( item != null ) {
+      Event event = new Event();
+      event.item = item;
+      grid.notifyListeners( SWT.Expand, event );
+    }
   }
 
   /*
@@ -219,9 +222,12 @@
    * @param item (string) id of collapsed item
    */
   public void handleNotifyCollapse( Grid grid, JsonObject properties ) {
-    Event event = new Event();
-    event.item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
-    grid.notifyListeners( SWT.Collapse, event );
+    GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
+    if( item != null ) {
+      Event event = new Event();
+      event.item = item;
+      grid.notifyListeners( SWT.Collapse, event );
+    }
   }
 
   /*
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
index ee31cf7..bf07661 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
@@ -11,12 +11,12 @@
 package org.eclipse.nebula.widgets.grid.internal.gridkit;
 
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
+import static org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil.getId;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_COLLAPSE;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_EXPAND;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SELECTION;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SET_DATA;
-import static org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil.getId;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 import static org.mockito.Matchers.any;
@@ -255,6 +255,19 @@
   }
 
   @Test
+  public void testHandleNotifyExpand_withDisposedItem() {
+    Grid spyGrid = spy( grid );
+    handler = new GridOperationHandler( spyGrid );
+    GridItem item = new GridItem( spyGrid, SWT.NONE );
+    item.dispose();
+
+    JsonObject properties = new JsonObject().add( "item", getId( item ) );
+    handler.handleNotify( EVENT_EXPAND, properties );
+
+    verify( spyGrid, never() ).notifyListeners( eq( SWT.Expand ), any( Event.class ) );
+  }
+
+  @Test
   public void testHandleNotifyCollapse() {
     Grid spyGrid = spy( grid );
     handler = new GridOperationHandler( spyGrid );
@@ -269,6 +282,19 @@
   }
 
   @Test
+  public void testHandleNotifyCollapse_withDisposedItem() {
+    Grid spyGrid = spy( grid );
+    handler = new GridOperationHandler( spyGrid );
+    GridItem item = new GridItem( spyGrid, SWT.NONE );
+    item.dispose();
+
+    JsonObject properties = new JsonObject().add( "item", getId( item ) );
+    handler.handleNotify( EVENT_COLLAPSE, properties );
+
+    verify( spyGrid, never() ).notifyListeners( eq( SWT.Collapse ), any( Event.class ) );
+  }
+
+  @Test
   public void testHandleNotifySetData() {
     Grid spyGrid = spy( grid );
     handler = new GridOperationHandler( spyGrid );
