diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/DegreeOfInterest.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/DegreeOfInterest.java
index 6f5d8fd..5246c1f 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/DegreeOfInterest.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/DegreeOfInterest.java
@@ -61,7 +61,7 @@
 		events.add(0, event);
 		InteractionEvent last = collapsedEvents.get(event.getKind());
 		if (last != null) {
-			InteractionEvent aggregateEvent = new InteractionEvent(event.getKind(), event.getContentType(), event
+			InteractionEvent aggregateEvent = new InteractionEvent(event.getKind(), event.getStructureKind(), event
 					.getStructureHandle(), event.getOriginId(), event.getNavigation(), event.getDelta(), last
 					.getInterestContribution()
 					+ event.getInterestContribution(), last.getDate(), event.getEndDate());
@@ -163,7 +163,7 @@
 		allCollapsed.addAll(collapsedEvents.values());
 		if (!allCollapsed.isEmpty()) {
 			allCollapsed.add(0, new InteractionEvent(InteractionEvent.Kind.MANIPULATION, allCollapsed.get(0)
-					.getContentType(), allCollapsed.get(0).getStructureHandle(), MylarContextManager.SOURCE_ID_DECAY,
+					.getStructureKind(), allCollapsed.get(0).getStructureHandle(), MylarContextManager.SOURCE_ID_DECAY,
 					-getDecayValue()));
 		}
 		return allCollapsed;
diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContext.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContext.java
index 4800b05..7137e7b 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContext.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContext.java
@@ -76,7 +76,7 @@
 			numUserEvents++;
 		MylarContextElement node = nodes.get(event.getStructureHandle());
 		if (node == null) {
-			node = new MylarContextElement(event.getContentType(), event.getStructureHandle(), this);
+			node = new MylarContextElement(event.getStructureKind(), event.getStructureHandle(), this);
 			nodes.put(event.getStructureHandle(), node);
 		}
 
@@ -87,7 +87,7 @@
 			if (navigationSource != null) {
 				MylarContextRelation edge = lastEdgeNode.getRelation(event.getStructureHandle());
 				if (edge == null) {
-					edge = new MylarContextRelation(event.getContentType(), event.getNavigation(), lastEdgeNode, node,
+					edge = new MylarContextRelation(event.getStructureKind(), event.getNavigation(), lastEdgeNode, node,
 							this);
 					lastEdgeNode.addEdge(edge);
 				}
diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContextManager.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContextManager.java
index 3d808d5..e2ec0ab 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContextManager.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/MylarContextManager.java
@@ -348,7 +348,7 @@
 			previouslyPropagated = previous.getInterest().isPropagated();
 		}
 		if (event.getKind().isUserEvent()) {
-			decayOffset = ensureIsInteresting(event.getContentType(), event.getStructureHandle(), previous, previousInterest);
+			decayOffset = ensureIsInteresting(event.getStructureKind(), event.getStructureHandle(), previous, previousInterest);
 		}
 		IMylarElement element = currentContext.addEvent(event);
 		List<IMylarElement> interestDelta = new ArrayList<IMylarElement>();
diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/util/SaxContextWriter.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/util/SaxContextWriter.java
index f4db8d2..0ba36e2 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/util/SaxContextWriter.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/internal/core/util/SaxContextWriter.java
@@ -177,7 +177,7 @@
 								.getStructureHandle()));
 				ieAttributes.addAttribute("", MylarContextExternalizer.ATR_STRUCTURE_KIND,
 						MylarContextExternalizer.ATR_STRUCTURE_KIND, "", XmlStringConverter.convertToXmlString(ie
-								.getContentType()));
+								.getStructureKind()));
 
 				handler.startElement("", SaxContextContentHandler.ATTRIBUTE_INTERACTION_EVENT,
 						SaxContextContentHandler.ATTRIBUTE_INTERACTION_EVENT, ieAttributes);
diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/AbstractUserInteractionMonitor.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/AbstractUserInteractionMonitor.java
index 64836b6..51357e3 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/AbstractUserInteractionMonitor.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/AbstractUserInteractionMonitor.java
@@ -50,48 +50,63 @@
 		if (selection == null || selection.isEmpty())
 			return;
 		if (!MylarPlugin.getContextManager().isContextActive()) {
-			return;
+			handleWorkbenchPartSelection(part, selection, false);
 		} else {
-			handleWorkbenchPartSelection(part, selection);
+			handleWorkbenchPartSelection(part, selection, true);
 		}
 	}
 
-	protected abstract void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection);
+	protected abstract void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext);
 
 	/**
 	 * Intended to be called back by subclasses.
 	 */
-	protected InteractionEvent handleElementSelection(IWorkbenchPart part, Object selectedElement) {
+	protected InteractionEvent handleElementSelection(IWorkbenchPart part, Object selectedElement, boolean contributeToContext) {
 		if (selectedElement == null || selectedElement.equals(lastSelectedElement))
 			return null;
 		IMylarStructureBridge bridge = MylarPlugin.getDefault().getStructureBridge(selectedElement);
-		InteractionEvent selectionEvent = new InteractionEvent(InteractionEvent.Kind.SELECTION,
-				bridge.getContentType(), bridge.getHandleIdentifier(selectedElement), part.getSite().getId());
-		MylarPlugin.getContextManager().handleInteractionEvent(selectionEvent);
+		InteractionEvent selectionEvent;
+		if (bridge.getContentType() != null) {
+			selectionEvent = new InteractionEvent(InteractionEvent.Kind.SELECTION,
+					bridge.getContentType(), bridge.getHandleIdentifier(selectedElement), part.getSite().getId());
+		} else {
+			selectionEvent = new InteractionEvent(InteractionEvent.Kind.SELECTION,
+					null, null, part.getSite().getId());			
+		}
+		if (contributeToContext) {
+			MylarPlugin.getContextManager().handleInteractionEvent(selectionEvent);
+		}
+		MylarPlugin.getDefault().notifyInteractionObserved(selectionEvent);
 		return selectionEvent;
 	}
 
 	/**
 	 * Intended to be called back by subclasses.
 	 */
-	protected void handleElementEdit(IWorkbenchPart part, Object selectedElement) {
+	protected void handleElementEdit(IWorkbenchPart part, Object selectedElement, boolean contributeToContext) {
 		if (selectedElement == null)
 			return;
 		IMylarStructureBridge bridge = MylarPlugin.getDefault().getStructureBridge(selectedElement);
-		InteractionEvent selectionEvent = new InteractionEvent(InteractionEvent.Kind.EDIT, bridge.getContentType(),
+		InteractionEvent editEvent = new InteractionEvent(InteractionEvent.Kind.EDIT, bridge.getContentType(),
 				bridge.getHandleIdentifier(selectedElement), part.getSite().getId());
-		MylarPlugin.getContextManager().handleInteractionEvent(selectionEvent);
+		if (contributeToContext) {
+			MylarPlugin.getContextManager().handleInteractionEvent(editEvent);
+		}
+		MylarPlugin.getDefault().notifyInteractionObserved(editEvent);
 	}
 
 	/**
 	 * Intended to be called back by subclasses.
 	 */
-	protected void handleNavigation(IWorkbenchPart part, Object targetElement, String kind) {
+	protected void handleNavigation(IWorkbenchPart part, Object targetElement, String kind, boolean contributeToContext) {
 		IMylarStructureBridge adapter = MylarPlugin.getDefault().getStructureBridge(targetElement);
 		if (adapter.getContentType() != null) {
-			InteractionEvent selectionEvent = new InteractionEvent(InteractionEvent.Kind.SELECTION, adapter
+			InteractionEvent navigationEvent = new InteractionEvent(InteractionEvent.Kind.SELECTION, adapter
 					.getContentType(), adapter.getHandleIdentifier(targetElement), part.getSite().getId(), kind);
-			MylarPlugin.getContextManager().handleInteractionEvent(selectionEvent);
+			if (contributeToContext) {
+				MylarPlugin.getContextManager().handleInteractionEvent(navigationEvent);
+			}
+			MylarPlugin.getDefault().notifyInteractionObserved(navigationEvent);
 		}
 	}
 
diff --git a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/InteractionEvent.java b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/InteractionEvent.java
index bfef3d4..71e9041 100644
--- a/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/InteractionEvent.java
+++ b/org.eclipse.mylyn.context.core/src/org/eclipse/mylyn/provisional/core/InteractionEvent.java
@@ -119,10 +119,6 @@
 		return new InteractionEvent(InteractionEvent.Kind.COMMAND, "null", "null", originId, "null", delta, 1);
 	}
 
-	public String getStructureKind() {
-		return structureKind;
-	}
-
 	/**
 	 * Factory method.
 	 */
@@ -226,7 +222,7 @@
 		return structureHandle;
 	}
 
-	public String getContentType() {
+	public String getStructureKind() {
 		return structureKind;
 	}
 
diff --git a/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/DomContextWriter.java b/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/DomContextWriter.java
index ca6e46a..1b85764 100644
--- a/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/DomContextWriter.java
+++ b/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/DomContextWriter.java
@@ -105,7 +105,7 @@
 		node.setAttribute("StartDate", format.format(e.getDate()));
 		node.setAttribute("EndDate", format.format(e.getEndDate()));
 		node.setAttribute("OriginId", XmlStringConverter.convertToXmlString(e.getOriginId()));
-		node.setAttribute("StructureKind", XmlStringConverter.convertToXmlString(e.getContentType()));
+		node.setAttribute("StructureKind", XmlStringConverter.convertToXmlString(e.getStructureKind()));
 		node.setAttribute("StructureHandle", XmlStringConverter.convertToXmlString(e.getStructureHandle()));
 		node.setAttribute("Navigation", XmlStringConverter.convertToXmlString(e.getNavigation()));
 		node.setAttribute("Delta", XmlStringConverter.convertToXmlString(e.getDelta()));
@@ -127,7 +127,7 @@
 		root.setAttribute("StartDate", format.format(e.getDate()));
 		root.setAttribute("EndDate", format.format(e.getEndDate()));
 		root.setAttribute("OriginId", XmlStringConverter.convertToXmlString(e.getOriginId()));
-		root.setAttribute("StructureKind", XmlStringConverter.convertToXmlString(e.getContentType()));
+		root.setAttribute("StructureKind", XmlStringConverter.convertToXmlString(e.getStructureKind()));
 		root.setAttribute("StructureHandle", XmlStringConverter.convertToXmlString(e.getStructureHandle()));
 		root.setAttribute("Navigation", XmlStringConverter.convertToXmlString(e.getNavigation()));
 		root.setAttribute("Delta", XmlStringConverter.convertToXmlString(e.getDelta()));
diff --git a/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/TestMonitor.java b/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/TestMonitor.java
index bff6ada..4587159 100644
--- a/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/TestMonitor.java
+++ b/org.eclipse.mylyn.context.tests/src/org/eclipse/mylyn/core/tests/support/TestMonitor.java
@@ -58,7 +58,7 @@
 	}
 
 	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		// don't need to do anything here
 
 	}
diff --git a/org.eclipse.mylyn.ide.ui/src/org/eclipse/mylyn/internal/ide/ResourceInteractionMonitor.java b/org.eclipse.mylyn.ide.ui/src/org/eclipse/mylyn/internal/ide/ResourceInteractionMonitor.java
index 3a7c0c7..af57f5c 100644
--- a/org.eclipse.mylyn.ide.ui/src/org/eclipse/mylyn/internal/ide/ResourceInteractionMonitor.java
+++ b/org.eclipse.mylyn.ide.ui/src/org/eclipse/mylyn/internal/ide/ResourceInteractionMonitor.java
@@ -31,14 +31,14 @@
 public class ResourceInteractionMonitor extends AbstractUserInteractionMonitor {
 
 	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		if (selection instanceof StructuredSelection) {
 			StructuredSelection structuredSelection = (StructuredSelection) selection;
 
 			Object selectedObject = structuredSelection.getFirstElement();
 			if (selectedObject instanceof File) {
 				File file = (File) selectedObject;
-				super.handleElementSelection(part, file);
+				super.handleElementSelection(part, file, contributeToContext);
 			}
 		} else if (selection instanceof TextSelection) {
 			if (part instanceof EditorPart) {
@@ -47,7 +47,7 @@
 					if (object instanceof IFile) {
 						IFile file = (IFile) object;
 						if (!MylarPlugin.getDefault().getKnownContentTypes().contains(file.getFileExtension())) {
-							super.handleElementEdit(part, object);
+							super.handleElementEdit(part, object, contributeToContext);
 						}
 					}
 				} catch (Throwable t) {
diff --git a/org.eclipse.mylyn.java.ui/plugin.xml b/org.eclipse.mylyn.java.ui/plugin.xml
index 4fe4169..c3a4afe 100644
--- a/org.eclipse.mylyn.java.ui/plugin.xml
+++ b/org.eclipse.mylyn.java.ui/plugin.xml
@@ -25,6 +25,13 @@
 	          contentType="java"/>
 	</extension>
 	
+	<extension
+          point="org.eclipse.mylar.tasklist.editors">
+       <hyperlinkDetector
+             class="org.eclipse.mylar.internal.java.ui.JavaStackTraceHyperlinkDetector"
+             id="org.eclipse.mylar.java.hyperlink.detector.stack"/>
+    </extension>
+	
 	<!-- Content Assist -->
 	<extension
 		point="org.eclipse.jdt.ui.javaCompletionProposalComputer"
diff --git a/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/JavaEditingMonitor.java b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/JavaEditingMonitor.java
index 81771b8..2848930 100644
--- a/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/JavaEditingMonitor.java
+++ b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/JavaEditingMonitor.java
@@ -50,7 +50,7 @@
 	 * Only public for testing
 	 */
 	@Override
-	public void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	public void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		try {
 			IJavaElement selectedElement = null;
 			if (selection instanceof StructuredSelection) {
@@ -70,7 +70,7 @@
 					}
 				}
 				if (selectedElement != null)
-					super.handleElementSelection(part, selectedElement);
+					super.handleElementSelection(part, selectedElement, contributeToContext);
 			} else {
 				if (selection instanceof TextSelection && part instanceof JavaEditor) {
 					currentEditor = (JavaEditor) part;
@@ -88,30 +88,30 @@
 						if (lastResolvedElement != null && lastSelectedElement != null
 								&& lastResolvedElement.equals(selectedElement)
 								&& !lastSelectedElement.equals(lastResolvedElement)) {
-							super.handleNavigation(part, selectedElement, JavaReferencesProvider.ID);
+							super.handleNavigation(part, selectedElement, JavaReferencesProvider.ID, contributeToContext);
 							selectionResolved = true;
 						} else if (lastSelectedElement != null && lastSelectedElement.equals(lastResolvedElement)
 								&& !lastSelectedElement.equals(selectedElement)) {
-							super.handleNavigation(part, selectedElement, JavaReferencesProvider.ID);
+							super.handleNavigation(part, selectedElement, JavaReferencesProvider.ID, contributeToContext);
 							selectionResolved = true;
 						}
 					} else if (selectedElement != null && lastSelectedElement != null
 							&& !lastSelectedElement.equals(selectedElement)) {
 						if (lastSelectedElement.getElementName().equals(selectedElement.getElementName())) {
 							if (selectedElement instanceof IMethod && lastSelectedElement instanceof IMethod) {
-								super.handleNavigation(part, selectedElement, JavaImplementorsProvider.ID);
+								super.handleNavigation(part, selectedElement, JavaImplementorsProvider.ID, contributeToContext);
 								selectionResolved = true;
 							} else if (selectedElement instanceof IType && lastSelectedElement instanceof IType) {
-								super.handleNavigation(part, selectedElement, JavaImplementorsProvider.ID);
+								super.handleNavigation(part, selectedElement, JavaImplementorsProvider.ID, contributeToContext);
 								selectionResolved = true;
 							}
 						}
 					}
 					if (selectedElement != null) {
 						if (!selectionResolved && selectedElement.equals(lastSelectedElement)) {
-							super.handleElementEdit(part, selectedElement);
+							super.handleElementEdit(part, selectedElement, contributeToContext);
 						} else if (!selectedElement.equals(lastSelectedElement)) {
-							super.handleElementSelection(part, selectedElement);
+							super.handleElementSelection(part, selectedElement, contributeToContext);
 						}
 					}
 
diff --git a/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceFileHyperlink.java b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceFileHyperlink.java
new file mode 100644
index 0000000..e73f034
--- /dev/null
+++ b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceFileHyperlink.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylar.internal.java.ui;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.ui.IDebugModelPresentation;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.debug.ui.actions.OpenTypeAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * @author Rob Elves
+ */
+public class JavaStackTraceFileHyperlink implements IHyperlink {
+
+	IRegion region;
+
+	String traceLine;
+
+	public JavaStackTraceFileHyperlink(IRegion region, String traceLine) {
+		this.region = region;
+		this.traceLine = traceLine;
+	}
+
+	public IRegion getHyperlinkRegion() {
+		return region;
+	}
+
+	public String getHyperlinkText() {
+		// ignore
+		return null;
+	}
+
+	public String getTypeLabel() {
+		// ignore
+		return null;
+	}
+
+	public void open() {
+
+		int lineNumber;
+		try {
+
+			String typeName = getTypeName();
+			lineNumber = getLineNumber();
+
+			// documents start at 0
+			if (lineNumber > 0) {
+				lineNumber--;
+			}
+			Object sourceElement = getSourceElement(typeName);
+			if (sourceElement != null) {
+				IDebugModelPresentation presentation = JDIDebugUIPlugin.getDefault().getModelPresentation();
+				IEditorInput editorInput = presentation.getEditorInput(sourceElement);
+				if (editorInput != null) {
+					String editorId = presentation.getEditorId(editorInput, sourceElement);
+					if (editorId != null) {
+						IEditorPart editorPart = JDIDebugUIPlugin.getActivePage().openEditor(editorInput, editorId);
+						if (editorPart instanceof ITextEditor && lineNumber >= 0) {
+							ITextEditor textEditor = (ITextEditor) editorPart;
+							IDocumentProvider provider = textEditor.getDocumentProvider();
+							provider.connect(editorInput);
+							IDocument document = provider.getDocument(editorInput);
+							try {
+								IRegion line = document.getLineInformation(lineNumber);
+								textEditor.selectAndReveal(line.getOffset(), line.getLength());
+							} catch (BadLocationException e1) {
+								MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+										.getShell(), "Open Type", "Line not found in type.");
+							}
+							provider.disconnect(editorInput);
+						}
+						return;
+					}
+				}
+			}
+			// did not find source
+			MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+					"Type could not be located.");
+		} catch (CoreException e1) {
+			MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+					"Failed to open type.");
+			return;
+		}
+
+	}
+
+	// adapted from JavaStackTraceHyperlink
+	private Object getSourceElement(String typeName) throws CoreException {
+		Object result = null;
+		result = OpenTypeAction.findTypeInWorkspace(typeName);
+		// }
+		return result;
+	}
+
+	// adapted from JavaStackTraceHyperlink
+	private String getTypeName() {
+		int start = traceLine.indexOf('(');
+		int end = traceLine.indexOf(':');
+		if (start >= 0 && end > start) {
+
+			// get File name (w/o .java)
+			String typeName = traceLine.substring(start + 1, end);
+			typeName.indexOf(".");
+			typeName = typeName.substring(0, typeName.indexOf("."));
+
+			String qualifier = traceLine.substring(0, start);
+			// remove the method name
+			start = qualifier.lastIndexOf('.');
+
+			if (start >= 0) {
+				// remove the class name
+				start = new String((String) qualifier.subSequence(0, start)).lastIndexOf('.');
+				if (start == -1) {
+					start = 0; // default package
+				}
+			}
+
+			if (start >= 0) {
+				qualifier = qualifier.substring(0, start);
+			}
+
+			if (qualifier.length() > 0) {
+				typeName = qualifier + "." + typeName; //$NON-NLS-1$
+			}
+			return typeName.trim();
+		}
+
+		return "error"; // TODO: Complain
+	}
+
+	// adapted from JavaStackTraceHyperlink
+	private int getLineNumber() throws CoreException {
+		int index = traceLine.lastIndexOf(':');
+		if (index >= 0) {
+			String numText = traceLine.substring(index + 1);
+			index = numText.indexOf(')');
+			if (index >= 0) {
+				numText = numText.substring(0, index);
+			}
+			try {
+				return Integer.parseInt(numText);
+			} catch (NumberFormatException e) {
+				throw new CoreException(null);
+			}
+		}
+
+		throw new CoreException(null);
+	}
+
+}
diff --git a/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkAdapter.java b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkAdapter.java
new file mode 100644
index 0000000..bef82e1
--- /dev/null
+++ b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkAdapter.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylar.internal.java.ui;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.ui.IDebugModelPresentation;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.debug.ui.actions.OpenTypeAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * @author Robert Elves
+ */
+public final class JavaStackTraceHyperlinkAdapter extends HyperlinkAdapter {
+	public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) {
+		String typeName;
+		int lineNumber;
+		try {
+			String linkText = (String) e.getHref();
+			typeName = getTypeName(linkText);
+			lineNumber = getLineNumber(linkText);
+	
+			// documents start at 0
+			if (lineNumber > 0) {
+				lineNumber--;
+			}
+			Object sourceElement = getSourceElement(typeName);
+			if (sourceElement != null) {
+				IDebugModelPresentation presentation = JDIDebugUIPlugin.getDefault()
+						.getModelPresentation();
+				IEditorInput editorInput = presentation.getEditorInput(sourceElement);
+				if (editorInput != null) {
+					String editorId = presentation.getEditorId(editorInput, sourceElement);
+					if (editorId != null) {
+						IEditorPart editorPart = JDIDebugUIPlugin.getActivePage().openEditor(
+								editorInput, editorId);
+						if (editorPart instanceof ITextEditor && lineNumber >= 0) {
+							ITextEditor textEditor = (ITextEditor) editorPart;
+							IDocumentProvider provider = textEditor.getDocumentProvider();
+							provider.connect(editorInput);
+							IDocument document = provider.getDocument(editorInput);
+							try {
+								IRegion line = document.getLineInformation(lineNumber);
+								textEditor.selectAndReveal(line.getOffset(), line.getLength());
+							} catch (BadLocationException e1) {
+								MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type", "Failed to open type.");
+							}
+							provider.disconnect(editorInput);
+						}
+						return;
+					}
+				}
+			}
+			// did not find source
+			MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+					"Type could not be located.");
+		} catch (CoreException e1) {
+			MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+					"Failed to open type.");
+			return;
+		}
+	}
+	
+	// adapted from JavaStackTraceHyperlink
+	private Object getSourceElement(String typeName) throws CoreException {
+		Object result = null;
+		result = OpenTypeAction.findTypeInWorkspace(typeName);
+		// }
+		return result;
+	}
+
+	// adapted from JavaStackTraceHyperlink
+	private String getTypeName(String linkText) {
+		int start = linkText.indexOf('(');
+		int end = linkText.indexOf(':');
+		if (start >= 0 && end > start) {
+
+			// get File name (w/o .java)
+			String typeName = linkText.substring(start + 1, end);
+			typeName.indexOf(".");
+			typeName = typeName.substring(0, typeName.indexOf("."));
+
+			String qualifier = linkText.substring(0, start);
+			// remove the method name
+			start = qualifier.lastIndexOf('.');
+
+			if (start >= 0) {
+				// remove the class name
+				start = new String((String) qualifier.subSequence(0, start)).lastIndexOf('.');
+				if (start == -1) {
+					start = 0; // default package
+				}
+			}
+
+			if (start >= 0) {
+				qualifier = qualifier.substring(0, start);
+			}
+
+			if (qualifier.length() > 0) {
+				typeName = qualifier + "." + typeName; //$NON-NLS-1$
+			}
+			return typeName;
+		}
+
+		return "error"; // TODO: Complain
+	}
+
+	// adapted from JavaStackTraceHyperlink
+	private int getLineNumber(String linkText) throws CoreException {
+		int index = linkText.lastIndexOf(':');
+		if (index >= 0) {
+			String numText = linkText.substring(index + 1);
+			index = numText.indexOf(')');
+			if (index >= 0) {
+				numText = numText.substring(0, index);
+			}
+			try {
+				return Integer.parseInt(numText);
+			} catch (NumberFormatException e) {
+				throw new CoreException(null);
+			}
+		}
+
+		throw new CoreException(null);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkDetector.java b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkDetector.java
new file mode 100644
index 0000000..630e402
--- /dev/null
+++ b/org.eclipse.mylyn.java.ui/src/org/eclipse/mylyn/internal/java/ui/JavaStackTraceHyperlinkDetector.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylar.internal.java.ui;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
+
+/**
+ * @author Rob Elves
+ */
+public class JavaStackTraceHyperlinkDetector implements IHyperlinkDetector {
+
+	public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
+
+		if (region == null || textViewer == null)
+			return null;
+
+		IDocument document = textViewer.getDocument();
+
+		int offset = region.getOffset();
+
+		// String urlString= null;
+		if (document == null)
+			return null;
+
+		IRegion lineInfo;
+		String line;
+		try {
+			lineInfo = document.getLineInformationOfOffset(offset);
+			line = document.get(lineInfo.getOffset(), lineInfo.getLength());
+		} catch (BadLocationException ex) {
+			return null;
+		}
+
+		// int offsetInLine = offset - lineInfo.getOffset();
+
+		Pattern p = Pattern.compile("[ {1}|\\n].*({1}.*.{1}java:\\d*){1}", Pattern.CASE_INSENSITIVE);
+		Matcher m = p.matcher(line);
+
+		if (m.find()) {
+			IRegion urlRegion = new Region(lineInfo.getOffset() + m.start() + 1, m.end() - m.start());
+			return new IHyperlink[] { new JavaStackTraceFileHyperlink(urlRegion, m.group()) };
+		}
+
+		// StringMatcher javaElementMatcher = new StringMatcher("*(*.java:*)",
+		// true, false);//[\r|\n|\b|^]
+		//		
+		// Position position = javaElementMatcher.find(line, 0, line.length());
+		// if (position != null) {
+		// //String linkText = line.substring(position.getStart() + 1,
+		// position.getEnd() - 1);
+		// IRegion urlRegion= new Region(lineInfo.getOffset() +
+		// position.getStart() + 1, position.getEnd() - position.getStart() -
+		// 2);
+		// return new IHyperlink[] {new JavaStackTraceFileHyperlink(urlRegion,
+		// line)};
+		// }
+		return null;
+	}
+
+}
diff --git a/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/ant/AntEditingMonitor.java b/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/ant/AntEditingMonitor.java
index 42dcc18..6283197 100644
--- a/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/ant/AntEditingMonitor.java
+++ b/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/ant/AntEditingMonitor.java
@@ -39,7 +39,7 @@
 	}
 
 	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		if (part instanceof AntEditor) {
 
 			TextSelection textSelection = null;
@@ -74,7 +74,7 @@
 						return;
 					}
 					XmlNodeHelper xnode = new XmlNodeHelper(fei.getFile().getFullPath().toString(), path);
-					super.handleElementSelection(part, xnode);
+					super.handleElementSelection(part, xnode, contributeToContext);
 				} catch (Exception e) {
 					MylarStatusHandler.log(e, "selection resolve failed");
 				}
diff --git a/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/pde/PdeEditingMonitor.java b/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/pde/PdeEditingMonitor.java
index 5613a51..05b4b5a 100644
--- a/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/pde/PdeEditingMonitor.java
+++ b/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/internal/xml/pde/PdeEditingMonitor.java
@@ -42,7 +42,7 @@
 	}
 
 	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		if (part instanceof ManifestEditor) {
 			TextSelection textSelection = null;
 			IEditorInput in = null;
@@ -111,7 +111,7 @@
 						String name = node.getXMLAttributeValue("name");
 						if (name == null)
 							name = node.getXMLTagName();
-						super.handleElementSelection(part, xnode);
+						super.handleElementSelection(part, xnode, contributeToContext);
 					}
 				} catch (Exception e) {
 					MylarStatusHandler.log(e, "couldn't resolve selection");
