diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
index 4364f16..681fc3c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 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
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IDebugElement;
@@ -95,7 +96,7 @@
 				if (source == null) {
 					//resort to looking through the workspace projects for the
 					//type as the source locators failed.
-					source = findTypeInWorkspace(type.getName());
+					source = findTypeInWorkspace(type.getName(), false);
 				}
 			}
 		}
@@ -133,10 +134,15 @@
 	 * or <code>null</code> if none.
 	 * 
 	 * @param typeName fully qualified type name
+	 * @param findOnlyUniqueMatch
+	 *            if <code>true</code>, this method only returns a type iff
+	 *            there's only a single match in the workspace, and
+	 *            <code>null</code> otherwise. If <code>false</code>, it returns
+	 *            the first match.
 	 * @return type or <code>null</code>
-	 * @throws JavaModelException
+	 * @throws CoreException if search failed
 	 */
-	public static IType findTypeInWorkspace(String typeName) throws CoreException {
+	public static IType findTypeInWorkspace(String typeName, boolean findOnlyUniqueMatch) throws CoreException {
 		int dot= typeName.lastIndexOf('.');
 		char[][] qualifications;
 		String simpleName;
@@ -149,6 +155,14 @@
 		}
 		char[][] typeNames= new char[][] { simpleName.toCharArray() };
 		
+		if (findOnlyUniqueMatch) {
+			return findUniqueTypeInWorkspace(qualifications, typeNames);
+		}
+		return findAnyTypeInWorkspace(qualifications, typeNames);
+	}
+
+	private static IType findAnyTypeInWorkspace(char[][] qualifications,
+			char[][] typeNames) throws JavaModelException {
 		class ResultException extends RuntimeException {
 			private static final long serialVersionUID= 1L;
 			private final IType fType;
@@ -170,6 +184,26 @@
 		return null;
 	}
 	
+	private static IType findUniqueTypeInWorkspace(char[][] qualifications,
+			char[][] typeNames) throws JavaModelException {
+		final IType[] result = { null };
+		TypeNameMatchRequestor requestor= new TypeNameMatchRequestor() {
+			public void acceptTypeNameMatch(TypeNameMatch match) {
+				if (result[0] == null) {
+					result[0]= match.getType();
+				} else {
+					throw new OperationCanceledException();
+				}
+			}
+		};
+		try {
+			new SearchEngine().searchAllTypeNames(qualifications, typeNames, SearchEngine.createWorkspaceScope(), requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null);
+		} catch (OperationCanceledException e) {
+			return null;
+		}
+		return result[0];
+	}
+	
 	
 	protected void typeHierarchyError() {
 		showErrorMessage(ActionMessages.ObjectActionDelegate_Unable_to_display_type_hierarchy__The_selected_source_element_is_not_contained_in_the_workspace__1); 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceHyperlink.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceHyperlink.java
index 7a6b4a5..b669ddb 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceHyperlink.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 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
@@ -39,14 +39,15 @@
 import org.eclipse.ui.texteditor.ITextEditor;
 
 /**
- * A hyperlink from a stack trace line of the form "*(*.java:*)"
+ * A hyper-link from a stack trace line of the form "*(*.java:*)"
  */
 public class JavaStackTraceHyperlink implements IHyperlink {
 	
 	private TextConsole fConsole;
 
 	/**
-	 * Constructor for JavaStackTraceHyperlink.
+	 * Constructor
+	 * @param console the {@link TextConsole} this link detector is attached to
 	 */
 	public JavaStackTraceHyperlink(TextConsole console) {
 		fConsole = console;
@@ -90,6 +91,7 @@
 	 * Starts a search for the type with the given name. Reports back to 'searchCompleted(...)'.
 	 * 
 	 * @param typeName the type to search for
+	 * @param lineNumber the line number to open the editor on
 	 */
 	protected void startSourceSearch(final String typeName, final int lineNumber) {
 		Job search = new Job(ConsoleMessages.JavaStackTraceHyperlink_2) {
@@ -98,12 +100,14 @@
 				ILaunch launch = getLaunch();
 				Object result = null;
 				try {
-					if (launch != null) {
+					// search for the type in the workspace
+					result = OpenTypeAction.findTypeInWorkspace(typeName, true);
+					if (result == null && launch != null) {
 						result = JavaDebugUtils.resolveSourceElement(JavaDebugUtils.generateSourceName(typeName), getLaunch());
 					}
 					if (result == null) {
-						// search for the type in the workspace
-						result = OpenTypeAction.findTypeInWorkspace(typeName);
+						// search for any type in the workspace
+						result = OpenTypeAction.findTypeInWorkspace(typeName, false);
 					}
 					searchCompleted(result, typeName, lineNumber, null);
 				} catch (CoreException e) {
@@ -116,6 +120,14 @@
 		search.schedule();
 	}
 	
+	/**
+	 * Reported back to from {@link JavaStackTraceHyperlink#startSourceSearch(String, int)} when results are found
+	 * 
+	 * @param source the source object
+	 * @param typeName the fully qualified type name
+	 * @param lineNumber the line number in the type
+	 * @param status the error status or <code>null</code> if none
+	 */
 	protected void searchCompleted(final Object source, final String typeName, final int lineNumber, final IStatus status) {
 		UIJob job = new UIJob("link search complete") { //$NON-NLS-1$
 			@Override
@@ -173,10 +185,10 @@
 	}
 
 	/**
-	 * Returns the launch associated with this hyperlink, or
+	 * Returns the launch associated with this hyper-link, or
 	 *  <code>null</code> if none
 	 * 
-	 * @return the launch associated with this hyperlink, or
+	 * @return the launch associated with this hyper-link, or
 	 *  <code>null</code> if none
 	 */
 	private ILaunch getLaunch() {
@@ -189,7 +201,8 @@
 
 	/**
 	 * Returns the fully qualified name of the type to open
-	 *  
+	 * 
+	 * @param linkText the complete text of the link to be parsed
 	 * @return fully qualified type name
 	 * @exception CoreException if unable to parse the type name
 	 */
@@ -234,6 +247,8 @@
 	/**
 	 * Returns the line number associated with the stack trace or -1 if none.
 	 * 
+	 * @param linkText the complete text of the link to be parsed
+	 * @return the line number for the stack trace or -1 if one cannot be computed or has not been provided
 	 * @exception CoreException if unable to parse the number
 	 */
 	protected int getLineNumber(String linkText) throws CoreException {
@@ -267,6 +282,7 @@
 	/**
 	 * Returns this link's text
 	 * 
+	 * @return the complete text of the link, never <code>null</code>
 	 * @exception CoreException if unable to retrieve the text
 	 */
 	protected String getLinkText() throws CoreException {
