diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
index 2f715bf..4270cac 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,8 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Monitor;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.Text;
@@ -163,7 +165,28 @@
 	private void layoutShell() {
 		Composite parent = text.getParent();
 		Rectangle tempBounds = parent.getBounds();
-		Rectangle compBounds = text.getDisplay().map(parent, null, tempBounds);
+		Display display = text.getDisplay();
+		Rectangle compBounds = display.map(parent, null, tempBounds);
+		for (Monitor monitor : display.getMonitors()) {
+			if (monitor.getBounds().contains(compBounds.x, compBounds.y)) {
+				Rectangle monitorBounds = monitor.getBounds();
+				int width = Math.max(350, compBounds.width);
+				int height = 250;
+
+				if (compBounds.x + width > monitorBounds.width) {
+					compBounds.x = monitorBounds.width - width;
+				}
+
+				if (compBounds.y + height > monitorBounds.height) {
+					compBounds.y = compBounds.y - tempBounds.height - height;
+				}
+
+				shell.setBounds(compBounds.x, compBounds.y + compBounds.height, width, height);
+				shell.layout();
+				return;
+			}
+		}
+
 		Rectangle monitorBounds = text.getMonitor().getBounds();
 		int width = Math.max(350, compBounds.width);
 		int height = 250;
