diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
index 5f76350..d0479cb 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -2018,6 +2018,7 @@
 	OS.class_addMethod(cls, OS.sel_mouseDown_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_resetCursorRects, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_updateTrackingAreas, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_menuForEvent_, proc3, "@:@");
 	//TODO hitTestProc and drawRectProc should be set Control.setRegion()? 
 	OS.objc_registerClassPair(cls);
 
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
index eb2f5e4..f7f5349 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
@@ -1027,6 +1027,18 @@
 	return (int)checkColumn.dataCell().cellSize().width;
 }
 
+public Rectangle getClientArea () {
+	checkWidget ();
+	Rectangle rect = super.getClientArea ();
+	NSTableHeaderView headerView = ((NSTableView) view).headerView ();
+	if (headerView != null) {
+		int height =  (int) headerView.bounds ().height;
+		rect.y -= height;
+		rect.height += height;
+	}
+	return rect;
+}
+
 TableColumn getColumn (id id) {
 	for (int i = 0; i < columnCount; i++) {
 		if (columns[i].nsColumn.id == id.id) {
@@ -1619,29 +1631,30 @@
 	return view.id == headerView.id;
 }
 
-/*
- * Feature in Cocoa: Table views do not change the selection when the user
- * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
- * clicked-on row ourselves.
- */
 int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	NSEvent event = new NSEvent(theEvent);
-	NSTableView table = (NSTableView)view;
-	
-	// get the current selections for the table view. 
-	NSIndexSet selectedRowIndexes = table.selectedRowIndexes();
-	
-	// select the row that was clicked before showing the menu for the event
-	NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
-	int /*long*/ row = table.rowAtPoint(mousePoint);
-	
-	// figure out if the row that was just clicked on is currently selected
-	if (selectedRowIndexes.containsIndex(row) == false) {
-		NSIndexSet indexes = new NSIndexSet (NSIndexSet.indexSetWithIndex (row));
-		table.selectRowIndexes (indexes, false);
+	if (id != headerView.id) {
+		/*
+		 * Feature in Cocoa: Table views do not change the selection when the user
+		 * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
+		 * clicked-on row ourselves.
+		 */
+		NSEvent event = new NSEvent(theEvent);
+		NSTableView table = (NSTableView)view;
+		
+		// get the current selections for the table view. 
+		NSIndexSet selectedRowIndexes = table.selectedRowIndexes();
+		
+		// select the row that was clicked before showing the menu for the event
+		NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
+		int /*long*/ row = table.rowAtPoint(mousePoint);
+		
+		// figure out if the row that was just clicked on is currently selected
+		if (selectedRowIndexes.containsIndex(row) == false) {
+			NSIndexSet indexes = new NSIndexSet (NSIndexSet.indexSetWithIndex (row));
+			table.selectRowIndexes (indexes, false);
+		}
+		// else that row is currently selected, so don't change anything.
 	}
-	// else that row is currently selected, so don't change anything.
-	
 	return super.menuForEvent(id, sel, theEvent);
 }
 
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
index 20556c3..1e53c29 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
@@ -1014,6 +1014,18 @@
 	return (int)checkColumn.dataCell().cellSize().width;
 }
 
+public Rectangle getClientArea () {
+	checkWidget ();
+	Rectangle rect = super.getClientArea ();
+	NSTableHeaderView headerView = ((NSTableView) view).headerView ();
+	if (headerView != null) {
+		int height =  (int) headerView.bounds ().height;
+		rect.y -= height;
+		rect.height += height;
+	}
+	return rect;
+}
+
 TreeColumn getColumn (id id) {
 	for (int i = 0; i < columnCount; i++) {
 		if (columns[i].nsColumn.id == id.id) {
@@ -1580,28 +1592,30 @@
 	return view.id == headerView.id;
 }
 
-/*
- * Feature in Cocoa: Table views do not change the selection when the user
- * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
- * clicked-on row ourselves.
- */
 int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	NSEvent event = new NSEvent(theEvent);
-	NSOutlineView tree = (NSOutlineView)view;
-	
-	// get the current selections for the outline view. 
-	NSIndexSet selectedRowIndexes = tree.selectedRowIndexes();
-	
-	// select the row that was clicked before showing the menu for the event
-	NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
-	int /*long*/ row = tree.rowAtPoint(mousePoint);
-	
-	// figure out if the row that was just clicked on is currently selected
-	if (selectedRowIndexes.containsIndex(row) == false) {
-		NSIndexSet indexes = new NSIndexSet (NSIndexSet.indexSetWithIndex (row));
-		tree.selectRowIndexes (indexes, false);
+	if (id != headerView.id) {
+		/*
+		 * Feature in Cocoa: Table views do not change the selection when the user
+		 * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
+		 * clicked-on row ourselves.
+		 */
+		NSEvent event = new NSEvent(theEvent);
+		NSOutlineView tree = (NSOutlineView)view;
+		
+		// get the current selections for the outline view. 
+		NSIndexSet selectedRowIndexes = tree.selectedRowIndexes();
+		
+		// select the row that was clicked before showing the menu for the event
+		NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
+		int /*long*/ row = tree.rowAtPoint(mousePoint);
+		
+		// figure out if the row that was just clicked on is currently selected
+		if (selectedRowIndexes.containsIndex(row) == false) {
+			NSIndexSet indexes = new NSIndexSet (NSIndexSet.indexSetWithIndex (row));
+			tree.selectRowIndexes (indexes, false);
+		}
+		// else that row is currently selected, so don't change anything.
 	}
-	// else that row is currently selected, so don't change anything.
 	
 	return super.menuForEvent(id, sel, theEvent);
 }
