diff --git a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.core.prefs
index 8b08f1b..f6c095d 100644
--- a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Apr 24 21:03:23 PDT 2008
+#Sun Jan 27 19:49:22 PST 2008
 eclipse.preferences.version=1
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
@@ -20,12 +20,10 @@
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -44,12 +42,8 @@
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
@@ -62,18 +56,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
@@ -153,9 +142,6 @@
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
 org.eclipse.jdt.core.formatter.indentation.size=4
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
diff --git a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.ui.prefs
index 5e70d08..56ac991 100644
--- a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,4 @@
-#Sat Mar 01 03:38:47 PST 2008
+#Mon Jan 28 19:23:21 PST 2008
 cleanup_settings_version=2
 eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
@@ -8,7 +8,6 @@
 org.eclipse.jdt.ui.exception.name=e
 org.eclipse.jdt.ui.gettersetter.use.is=true
 org.eclipse.jdt.ui.javadoc=false
-org.eclipse.jdt.ui.keywordthis=false
 org.eclipse.jdt.ui.overrideannotation=true
 org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\n * \n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\n * Copyright (c) 2004, 2007 Mylyn project committers and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *******************************************************************************/\n\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ignore\n${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ignore</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\n * \n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Jsdoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
 sp_cleanup.add_default_serial_version_id=true
@@ -23,9 +22,9 @@
 sp_cleanup.always_use_parentheses_in_expressions=false
 sp_cleanup.always_use_this_for_non_static_field_access=false
 sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=true
-sp_cleanup.correct_indentation=true
-sp_cleanup.format_source_code=true
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
 sp_cleanup.format_source_code_changes_only=false
 sp_cleanup.make_local_variable_final=false
 sp_cleanup.make_parameters_final=false
@@ -33,12 +32,12 @@
 sp_cleanup.make_variable_declarations_final=true
 sp_cleanup.never_use_blocks=false
 sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.on_save_use_additional_actions=false
 sp_cleanup.organize_imports=true
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
 sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
 sp_cleanup.remove_trailing_whitespaces=true
diff --git a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.mylar.tasklist.prefs b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.mylar.tasklist.prefs
new file mode 100644
index 0000000..a6cf96a
--- /dev/null
+++ b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.mylar.tasklist.prefs
@@ -0,0 +1,4 @@
+#Fri Oct 20 16:54:30 PDT 2006
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.pde.prefs b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.pde.prefs
index e8f2d56..769b229 100644
--- a/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.pde.prefs
+++ b/org.eclipse.mylyn.pde.ui/.settings/org.eclipse.pde.prefs
@@ -1,16 +1,10 @@
-#Tue Apr 15 11:07:59 PDT 2008
-compilers.incompatible-environment=1
-compilers.p.build=1
-compilers.p.deprecated=1
-compilers.p.discouraged-class=2
-compilers.p.missing-bundle-classpath-entries=1
-compilers.p.missing-packages=1
+#Thu Nov 03 15:45:55 PST 2005
+compilers.p.deprecated=2
 compilers.p.no-required-att=0
 compilers.p.not-externalized-att=2
 compilers.p.unknown-attribute=0
 compilers.p.unknown-class=0
 compilers.p.unknown-element=0
-compilers.p.unknown-identifier=1
 compilers.p.unknown-resource=0
 compilers.p.unresolved-ex-points=0
 compilers.p.unresolved-import=0
diff --git a/org.eclipse.mylyn.pde.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.pde.ui/META-INF/MANIFEST.MF
index ef6a3c5..42ff2a4 100644
--- a/org.eclipse.mylyn.pde.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.pde.ui/META-INF/MANIFEST.MF
@@ -1,8 +1,8 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Mylyn PDE Bridge
+Bundle-Name: Mylyn PDE UI Plug-in
 Bundle-SymbolicName: org.eclipse.mylyn.pde.ui;singleton:=true
-Bundle-Version: 3.0.0.qualifier
+Bundle-Version: 2.3.2.qualifier
 Bundle-Vendor: Eclipse.org
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.eclipse.ui,
@@ -13,6 +13,7 @@
  org.eclipse.jface.text,
  org.eclipse.ui.ide,
  org.eclipse.pde.ui;bundle-version="[3.3.0,3.4.0)",
+ org.eclipse.debug.core,
  org.eclipse.debug.ui,
  org.eclipse.ui.editors,
  org.eclipse.search,
@@ -21,17 +22,16 @@
  org.eclipse.jdt.launching,
  org.eclipse.jdt.junit,
  org.eclipse.jdt.debug.ui,
- org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.context.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.ide.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.java.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.commons.core;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.monitor.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.resources.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.monitor.core;bundle-version="[3.0.0,4.0.0)"
+ org.eclipse.mylyn.tasks.core;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.context.ui;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.ide.ui;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.java.ui;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.monitor.ui;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.monitor.core;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.resources.ui;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.mylyn.context.core;bundle-version="[2.3.0,3.0.0)"
 Bundle-Activator: org.eclipse.mylyn.internal.pde.ui.PdeUiBridgePlugin
-Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
 Bundle-ClassPath: .
-Export-Package: org.eclipse.mylyn.internal.pde.ui;x-internal:=true,
- org.eclipse.mylyn.internal.pde.ui.junit;x-internal:=true
+Export-Package: org.eclipse.mylyn.internal.pde.ui
 
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeContextLabelProvider.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeContextLabelProvider.java
index 98eae06..def9d3a 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeContextLabelProvider.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeContextLabelProvider.java
@@ -9,7 +9,7 @@
 package org.eclipse.mylyn.internal.pde.ui;
 
 import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
-import org.eclipse.mylyn.context.core.ContextCore;
+import org.eclipse.mylyn.context.core.ContextCorePlugin;
 import org.eclipse.mylyn.context.core.IInteractionElement;
 import org.eclipse.mylyn.context.core.IInteractionRelation;
 import org.eclipse.mylyn.internal.context.ui.AbstractContextLabelProvider;
@@ -20,7 +20,6 @@
 /**
  * @author Mik Kersten
  */
-@SuppressWarnings("restriction")
 public class PdeContextLabelProvider extends AbstractContextLabelProvider {
 
 	public static final String LABEL_RELATION = "referenced by";
@@ -37,7 +36,8 @@
 
 	@Override
 	protected String getText(IInteractionElement node) {
-		AbstractContextStructureBridge bridge = ContextCore.getStructureBridge(PdeStructureBridge.CONTENT_TYPE);
+		AbstractContextStructureBridge bridge = ContextCorePlugin.getDefault().getStructureBridge(
+				PdeStructureBridge.CONTENT_TYPE);
 		return bridge.getLabel(bridge.getObjectForHandle(node.getHandleIdentifier()));
 	}
 
@@ -53,7 +53,8 @@
 
 	@Override
 	protected String getTextForObject(Object object) {
-		AbstractContextStructureBridge bridge = ContextCore.getStructureBridge(PdeStructureBridge.CONTENT_TYPE);
+		AbstractContextStructureBridge bridge = ContextCorePlugin.getDefault().getStructureBridge(
+				PdeStructureBridge.CONTENT_TYPE);
 		return bridge.getLabel(object);
 	}
 }
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeEditingMonitor.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeEditingMonitor.java
index 40f5867..49d9c64 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeEditingMonitor.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeEditingMonitor.java
@@ -20,8 +20,8 @@
 import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.internal.ide.ui.XmlNodeHelper;
+import org.eclipse.mylyn.internal.ide.xml.XmlNodeHelper;
+import org.eclipse.mylyn.monitor.core.StatusHandler;
 import org.eclipse.mylyn.monitor.ui.AbstractUserInteractionMonitor;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.IPluginObject;
@@ -60,9 +60,8 @@
 			// fix bug when user is looking in the cvs repository since the
 			// input
 			// is not a FileEditorInput
-			if (!(editor.getEditorInput() instanceof FileEditorInput)) {
+			if (!(editor.getEditorInput() instanceof FileEditorInput))
 				return;
-			}
 
 			// make sure that the selection is a text selection
 			if (!(editor.getSelection() instanceof TextSelection || editor.getSelection() instanceof StructuredSelection)) {
@@ -106,9 +105,8 @@
 						}
 
 						String nodeString = getStringOfNode(node);
-						if (nodeString == null) {
+						if (nodeString == null)
 							return;
-						}
 
 						// create the helper to get the handle for the node
 						XmlNodeHelper xnode = new XmlNodeHelper(fei.getFile().getFullPath().toString(),
@@ -121,17 +119,15 @@
 						super.handleElementSelection(part, xnode, contributeToContext);
 					}
 				} catch (Exception e) {
-					StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN,
-							"Could not resolve selection", e));
+					StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN, "Could not resolve selection", e));
 				}
 			}
 		}
 	}
 
 	public static String getStringOfNode(IDocumentNode node) {
-		if (node == null) {
+		if (node == null)
 			return null;
-		}
 		String s = node.getXMLTagName();
 		for (IDocumentAttribute a : node.getNodeAttributes()) {
 			s += a.getAttributeName() + "=" + a.getAttributeValue();
@@ -148,18 +144,15 @@
 			IPluginModelBase model = (IPluginModelBase) page.getInputContext().getModel();
 			PluginObjectNode node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getLibraries(),
 					offset, hashCode);
-			if (node == null) {
+			if (node == null)
 				node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getImports(), offset,
 						hashCode);
-			}
-			if (node == null) {
+			if (node == null)
 				node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getExtensionPoints(),
 						offset, hashCode);
-			}
-			if (node == null) {
+			if (node == null)
 				node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getExtensions(), offset,
 						hashCode);
-			}
 			if (node == null) {
 				node = (PluginObjectNode) PdeEditingMonitor.findNode(new IPluginObject[] { model.getPluginBase() },
 						offset, hashCode);
@@ -179,16 +172,13 @@
 
 		PluginObjectNode node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getLibraries(),
 				num, hashCode);
-		if (node == null) {
+		if (node == null)
 			node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getImports(), num, hashCode);
-		}
-		if (node == null) {
+		if (node == null)
 			node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getExtensionPoints(), num,
 					hashCode);
-		}
-		if (node == null) {
+		if (node == null)
 			node = (PluginObjectNode) PdeEditingMonitor.findNode(model.getPluginBase().getExtensions(), num, hashCode);
-		}
 		if (node == null) {
 			node = (PluginObjectNode) PdeEditingMonitor.findNode(new IPluginObject[] { model.getPluginBase() }, num,
 					hashCode);
@@ -200,30 +190,27 @@
 	 * COPIED FROM ManifestSourcePage
 	 */
 	private static IDocumentNode findNode(IPluginObject[] nodes, int offset, boolean hashCode) {
-		for (IPluginObject element : nodes) {
-			IDocumentNode node = (IDocumentNode) element;
+		for (int i = 0; i < nodes.length; i++) {
+			IDocumentNode node = (IDocumentNode) nodes[i];
 			IDocumentNode[] children = node.getChildNodes();
 
 			// changed region - added to check the children to make it work
 			// properly
 			IDocumentNode node2 = null;
-			if (children.length > 0) {
+			if (children.length > 0)
 				node2 = PdeEditingMonitor.findNode(children, offset, hashCode);
-				// end changed region
-			}
+			// end changed region
 
-			if (node2 != null && node2 instanceof IPluginObject) {
+			if (node2 != null && node2 instanceof IPluginObject)
 				return node2;
-			}
 
 			if (!hashCode) {
 				if (offset >= node.getOffset() && offset < node.getOffset() + node.getLength()) {
 					return node;
 				}
 			} else {
-				if (getStringOfNode(node).hashCode() == offset) {
+				if (getStringOfNode(node).hashCode() == offset)
 					return node;
-				}
 			}
 		}
 		return null;
@@ -233,24 +220,22 @@
 	 * Copy of previous, taking different arguments
 	 */
 	private static IDocumentNode findNode(IDocumentNode[] nodes, int offset, boolean hashCode) {
-		for (IDocumentNode node : nodes) {
+		for (int i = 0; i < nodes.length; i++) {
+			IDocumentNode node = nodes[i];
 			IDocumentNode[] children = node.getChildNodes();
 			IDocumentNode node2 = null;
-			if (children.length > 0) {
+			if (children.length > 0)
 				node2 = PdeEditingMonitor.findNode(children, offset, hashCode);
-			}
-			if (node2 != null) {
+			if (node2 != null)
 				return node2;
-			}
 
 			if (!hashCode) {
 				if (offset >= node.getOffset() && offset < node.getOffset() + node.getLength()) {
 					return node;
 				}
 			} else {
-				if (getStringOfNode(node).hashCode() == offset) {
+				if (getStringOfNode(node).hashCode() == offset)
 					return node;
-				}
 			}
 		}
 		return null;
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeStructureBridge.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeStructureBridge.java
index a1205c9..01d050b 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeStructureBridge.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeStructureBridge.java
@@ -22,11 +22,11 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.mylyn.commons.core.StatusHandler;
 import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
+import org.eclipse.mylyn.context.core.ContextCorePlugin;
 import org.eclipse.mylyn.context.core.IInteractionElement;
-import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
-import org.eclipse.mylyn.internal.ide.ui.XmlNodeHelper;
+import org.eclipse.mylyn.internal.ide.xml.XmlNodeHelper;
+import org.eclipse.mylyn.monitor.core.StatusHandler;
 import org.eclipse.pde.internal.core.text.build.BuildEntry;
 import org.eclipse.pde.internal.core.text.plugin.PluginNode;
 import org.eclipse.pde.internal.core.text.plugin.PluginObjectNode;
@@ -307,8 +307,7 @@
 				}
 				return null;
 			} catch (Throwable t) {
-				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN,
-						"Could not find element for: " + marker));
+				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN, "Could not find element for: " + marker));
 				return null;
 			}
 		} else if (resource instanceof IFile) {
@@ -323,8 +322,7 @@
 					return handle;
 				}
 			} catch (Exception e) {
-				StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN,
-						"Unable to get handle for offset in object", e));
+				StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN, "Unable to get handle for offset in object", e));
 			}
 		}
 		return null;
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridge.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridge.java
index b64abd3..c4f9782 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridge.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridge.java
@@ -29,9 +29,10 @@
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeExpansionEvent;
 import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.mylyn.commons.core.StatusHandler;
 import org.eclipse.mylyn.context.core.IInteractionElement;
 import org.eclipse.mylyn.context.ui.AbstractContextUiBridge;
+import org.eclipse.mylyn.monitor.core.StatusHandler;
+import org.eclipse.mylyn.resources.ResourcesUiBridgePlugin;
 import org.eclipse.pde.internal.core.text.plugin.PluginObjectNode;
 import org.eclipse.pde.internal.ui.editor.FormOutlinePage;
 import org.eclipse.pde.internal.ui.editor.ISortableContentOutlinePage;
@@ -56,15 +57,14 @@
  */
 public class PdeUiBridge extends AbstractContextUiBridge {
 
-	private final TreeViewerListener treeSelectionChangedListener;
+	private TreeViewerListener treeSelectionChangedListener;
 
 	public PdeUiBridge() {
 		treeSelectionChangedListener = new TreeViewerListener();
 	}
 
 	/**
-	 * @see
-	 * 	org.eclipse.mylyn.context.ui.AbstractContextUiBridge#open(org.eclipse.mylyn.context.core.IInteractionElement)
+	 * @see org.eclipse.mylyn.context.ui.AbstractContextUiBridge#open(org.eclipse.mylyn.context.core.IInteractionElement)
 	 */
 	@Override
 	public void open(IInteractionElement node) {
@@ -73,11 +73,10 @@
 
 		int first = handle.indexOf(";");
 		String filename = "";
-		if (first == -1) {
+		if (first == -1)
 			filename = handle;
-		} else {
+		else
 			filename = handle.substring(0, first);
-		}
 
 		try {
 			// get the file
@@ -89,8 +88,7 @@
 
 			// if the editor is null, we had a problem and should return
 			if (editor == null) {
-				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN,
-						"Unable to open editor for file: " + filename));
+				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN, "Unable to open editor for file: " + filename));
 				return;
 			}
 
@@ -125,15 +123,18 @@
 	 * Open a file in the appropriate editor
 	 * 
 	 * @param file
-	 * 		The IFile to open
+	 *            The IFile to open
 	 * @param activate
-	 * 		Whether to activate the editor or not
+	 *            Whether to activate the editor or not
 	 * @return The IEditorPart that the file opened in
 	 * @throws PartInitException
 	 */
 	private IEditorPart openInEditor(IFile file, boolean activate) throws PartInitException {
 		if (file != null) {
-			IWorkbenchPage p = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+			IWorkbenchPage p = ResourcesUiBridgePlugin.getDefault()
+					.getWorkbench()
+					.getActiveWorkbenchWindow()
+					.getActivePage();
 			if (p != null && file.exists()) {
 				IEditorPart editorPart = IDE.openEditor(p, file, activate);
 				// initializeHighlightRange(editorPart);
@@ -148,8 +149,8 @@
 		IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
 		if (page != null) {
 			IEditorReference[] references = page.getEditorReferences();
-			for (IEditorReference reference : references) {
-				IEditorPart part = reference.getEditor(false);
+			for (int i = 0; i < references.length; i++) {
+				IEditorPart part = references[i].getEditor(false);
 				if (part != null) {
 					// HACK: find better way to get the filename other than the tooltip
 					if (("/" + part.getTitleToolTip()).equals(node.getHandleIdentifier())) {
@@ -192,8 +193,7 @@
 							}
 						}
 					} catch (Exception e) {
-						StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN,
-								"Failed to get tree viewers", e));
+						StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN, "Failed to get tree viewers", e));
 						return null;
 					}
 				}
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridgePlugin.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridgePlugin.java
index 0656182..25f0af4 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridgePlugin.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/PdeUiBridgePlugin.java
@@ -8,61 +8,43 @@
 
 package org.eclipse.mylyn.internal.pde.ui;
 
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.mylyn.context.ui.IContextUiStartup;
-import org.eclipse.mylyn.monitor.ui.MonitorUi;
+import org.eclipse.mylyn.internal.context.ui.AbstractContextUiPlugin;
+import org.eclipse.mylyn.monitor.ui.MonitorUiPlugin;
+import org.eclipse.ui.IWorkbench;
 import org.osgi.framework.BundleContext;
 
 /**
  * @author Mik Kersten
- * @author Steffen Pingel
  */
-public class PdeUiBridgePlugin extends Plugin {
-
-	public static class PdeUiBrideStartup implements IContextUiStartup {
-
-		public void lazyStartup() {
-			PdeUiBridgePlugin.getDefault().lazyStart();
-		}
-
-	}
+public class PdeUiBridgePlugin extends AbstractContextUiPlugin {
 
 	public static final String ID_PLUGIN = "org.eclipse.mylyn.pde.ui";
-
-	private static PdeUiBridgePlugin INSTANCE;
-
-	public static PdeUiBridgePlugin getDefault() {
-		return INSTANCE;
-	}
-
+	
 	private PdeEditingMonitor pdeEditingMonitor;
 
 	public PdeUiBridgePlugin() {
-	}
-
-	private void lazyStart() {
-		pdeEditingMonitor = new PdeEditingMonitor();
-		MonitorUi.getSelectionMonitors().add(pdeEditingMonitor);
-	}
-
-	private void lazyStop() {
-		if (pdeEditingMonitor != null) {
-			MonitorUi.getSelectionMonitors().remove(pdeEditingMonitor);
-		}
+		// ignore
 	}
 
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
-		INSTANCE = this;
 	}
 
 	@Override
-	public void stop(BundleContext context) throws Exception {
-		lazyStop();
+	protected void lazyStart(IWorkbench workbench) {
+		pdeEditingMonitor = new PdeEditingMonitor();
+		MonitorUiPlugin.getDefault().getSelectionMonitors().add(pdeEditingMonitor);
+	}
 
+	@Override
+	protected void lazyStop() {
+		MonitorUiPlugin.getDefault().getSelectionMonitors().remove(pdeEditingMonitor);
+	}
+	
+	@Override
+	public void stop(BundleContext context) throws Exception {
 		super.stop(context);
-		INSTANCE = null;
 	}
 
 }
diff --git a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/XmlJavaRelationProvider.java b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/XmlJavaRelationProvider.java
index 24209f8..6d763b6 100644
--- a/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/XmlJavaRelationProvider.java
+++ b/org.eclipse.mylyn.pde.ui/src/org/eclipse/mylyn/internal/pde/ui/XmlJavaRelationProvider.java
@@ -34,19 +34,18 @@
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.mylyn.commons.core.StatusHandler;
 import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
-import org.eclipse.mylyn.context.core.ContextCore;
+import org.eclipse.mylyn.context.core.AbstractRelationProvider;
+import org.eclipse.mylyn.context.core.ContextCorePlugin;
 import org.eclipse.mylyn.context.core.IDegreeOfSeparation;
 import org.eclipse.mylyn.context.core.IInteractionElement;
-import org.eclipse.mylyn.internal.context.core.AbstractRelationProvider;
-import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
 import org.eclipse.mylyn.internal.context.core.DegreeOfSeparation;
 import org.eclipse.mylyn.internal.context.core.IActiveSearchListener;
 import org.eclipse.mylyn.internal.context.core.IActiveSearchOperation;
-import org.eclipse.mylyn.internal.ide.ui.XmlNodeHelper;
+import org.eclipse.mylyn.internal.ide.xml.XmlNodeHelper;
 import org.eclipse.mylyn.internal.java.ui.search.XmlActiveSearchUpdater;
-import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
+import org.eclipse.mylyn.monitor.core.StatusHandler;
+import org.eclipse.mylyn.resources.ResourcesUiBridgePlugin;
 import org.eclipse.search.core.text.TextSearchScope;
 import org.eclipse.search.internal.ui.text.FileSearchQuery;
 import org.eclipse.search.internal.ui.text.FileSearchResult;
@@ -58,7 +57,6 @@
  * @author Shawn Minto
  * @author Mik Kersten
  */
-@SuppressWarnings("restriction")
 public class XmlJavaRelationProvider extends AbstractRelationProvider {
 
 	public static final String SOURCE_ID = "org.eclipse.mylyn.xml.search.references";
@@ -90,25 +88,22 @@
 
 	@Override
 	protected void findRelated(final IInteractionElement node, int degreeOfSeparation) {
-		if (!node.getContentType().equals("java")) {
+		if (!node.getContentType().equals("java"))
 			return;
-		}
 		IJavaElement javaElement = JavaCore.create(node.getHandleIdentifier());
-		if (javaElement == null || javaElement instanceof ICompilationUnit || !javaElement.exists()) {
+		if (javaElement == null || javaElement instanceof ICompilationUnit || !javaElement.exists())
 			return;
-		}
 		if (!acceptElement(javaElement)) {
 			return;
 		}
 
 		TextSearchScope scope = createTextSearchScope(degreeOfSeparation);
-		if (scope != null) {
+		if (scope != null)
 			runJob(node, javaElement, degreeOfSeparation, getId());
-		}
 	}
 
 	protected TextSearchScope createTextSearchScope(int degreeOfSeparation) {
-		Set<IInteractionElement> landmarks = ContextCore.getContextManager().getActiveLandmarks();
+		List<IInteractionElement> landmarks = ContextCorePlugin.getContextManager().getActiveLandmarks();
 
 		switch (degreeOfSeparation) {
 		case 1:
@@ -123,16 +118,14 @@
 					IResource element = null;
 					int first = handle.indexOf(";");
 					String filename = handle;
-					if (first != -1) {
+					if (first != -1)
 						filename = handle.substring(0, first);
-					}
 					try {
 						// change the file into a document
 						IPath path = new Path(filename);
 						element = ((Workspace) ResourcesPlugin.getWorkspace()).newResource(path, IResource.FILE);
 					} catch (Exception e) {
-						StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN,
-								"Scope creation failed", e));
+						StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN, "Scope creation failed", e));
 					}
 					l.add(element);
 				}
@@ -147,7 +140,8 @@
 			// create a search scope for the projects of landmarks
 			Set<IProject> projectsToSearch = new HashSet<IProject>();
 			for (IInteractionElement landmark : landmarks) {
-				AbstractContextStructureBridge bridge = ContextCore.getStructureBridge(landmark.getContentType());
+				AbstractContextStructureBridge bridge = ContextCorePlugin.getDefault().getStructureBridge(
+						landmark.getContentType());
 				IResource resource = ResourcesUiBridgePlugin.getDefault().getResourceForElement(landmark, true);
 				IProject project = null;
 				if (resource != null) {
@@ -193,9 +187,8 @@
 		// get the fully qualified name and if it is null, don't search
 		String fullyQualifiedName = getFullyQualifiedName(javaElement);
 
-		if (fullyQualifiedName == null) {
+		if (fullyQualifiedName == null)
 			return;
-		}
 
 		// Create the search query
 		final XMLSearchOperation query = (XMLSearchOperation) getSearchOperation(node, 0, degreeOfSeparation);
@@ -207,9 +200,8 @@
 
 				public void searchCompleted(List<?> l) {
 					// deal with File
-					if (l.isEmpty()) {
+					if (l.isEmpty())
 						return;
-					}
 
 					Map<String, String> nodes = new HashMap<String, String>();
 
@@ -217,16 +209,17 @@
 						FileSearchResult fsr = (FileSearchResult) l.get(0);
 
 						Object[] far = fsr.getElements();
-						for (Object element : far) {
-							Match[] mar = fsr.getMatches(element);
+						for (int i = 0; i < far.length; i++) {
+							Match[] mar = fsr.getMatches(far[i]);
 
-							if (element instanceof File) {
-								File f = (File) element;
+							if (far[i] instanceof File) {
+								File f = (File) far[i];
 
 								// change the file into a document
 								// FileEditorInput fei = new FileEditorInput(f);
 
-								for (Match m : mar) {
+								for (int j = 0; j < mar.length; j++) {
+									Match m = mar[j];
 									try {
 										AbstractContextStructureBridge bridge = ContextCorePlugin.getDefault()
 												.getStructureBridge(f.getName());
@@ -243,8 +236,7 @@
 											}
 										}
 									} catch (Exception e) {
-										StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN,
-												"Unable to create match", e));
+										StatusHandler.log(new Status(IStatus.ERROR, PdeUiBridgePlugin.ID_PLUGIN, "Unable to create match", e));
 									}
 								}
 							}
@@ -273,9 +265,8 @@
 	public IActiveSearchOperation getSearchOperation(IInteractionElement node, int limitTo, int degreeOfSeparation) {
 		IJavaElement javaElement = JavaCore.create(node.getHandleIdentifier());
 		TextSearchScope scope = createTextSearchScope(degreeOfSeparation);
-		if (scope == null) {
+		if (scope == null)
 			return null;
-		}
 
 		String fullyQualifiedName = getFullyQualifiedName(javaElement);
 
@@ -283,21 +274,19 @@
 	}
 
 	private String getFullyQualifiedName(IJavaElement je) {
-		if (!(je instanceof IMember)) {
+		if (!(je instanceof IMember))
 			return null;
-		}
 
 		IMember m = (IMember) je;
-		if (m.getDeclaringType() == null) {
+		if (m.getDeclaringType() == null)
 			return ((IType) m).getFullyQualifiedName();
-		} else {
+		else
 			return m.getDeclaringType().getFullyQualifiedName() + "." + m.getElementName();
-		}
 	}
 
 	public static class XMLSearchJob extends Job {
 
-		private final XMLSearchOperation op;
+		private XMLSearchOperation op;
 
 		/**
 		 * Constructor
@@ -333,8 +322,7 @@
 				}
 				return fResult;
 			} catch (Exception e) {
-				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN,
-						"Failed to get search result: " + e.getMessage()));
+				StatusHandler.log(new Status(IStatus.WARNING, PdeUiBridgePlugin.ID_PLUGIN, "Failed to get search result: " + e.getMessage()));
 			}
 			return super.getSearchResult();
 		}
@@ -346,9 +334,8 @@
 				ISearchResult result = getSearchResult();
 				if (result instanceof FileSearchResult) {
 					List<Object> l = new ArrayList<Object>();
-					if (((FileSearchResult) result).getElements().length != 0) {
+					if (((FileSearchResult) result).getElements().length != 0)
 						l.add(result);
-					}
 
 					notifySearchCompleted(l);
 				}
@@ -368,7 +355,7 @@
 		}
 
 		/** List of listeners wanting to know about the searches */
-		private final List<IActiveSearchListener> listeners = new ArrayList<IActiveSearchListener>();
+		private List<IActiveSearchListener> listeners = new ArrayList<IActiveSearchListener>();
 
 		/**
 		 * Add a listener for when the bugzilla search is completed
