diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java
index 66609a6..76468c0 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 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
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Kelly Campbell - Bug 285607
  *******************************************************************************/
 package org.eclipse.jdt.internal.launching;
 
@@ -149,75 +150,51 @@
 	 */
 	private static IPackageFragmentRoot getPackageFragmentRoot(IRuntimeClasspathEntry entry) {
 		IResource resource = entry.getResource();
-		if (resource == null) { 
-			// Check all package fragment roots for case of external archive.
-			// External jars are shared, so it does not matter which project it
-			// originates from
-			IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
+		if (resource != null) {
+			// find package fragment associated with the resource
+			IProject project = resource.getProject();
+			IJavaProject jp = JavaCore.create(project);
 			try {
-				IJavaProject[] jps = model.getJavaProjects();
-				for (int i = 0; i < jps.length; i++) {
-					IJavaProject jp = jps[i];
-					IProject p =  jp.getProject();
-					if (p.isOpen()) {
-						IPackageFragmentRoot[] allRoots = jp.getPackageFragmentRoots();
-						for (int j = 0; j < allRoots.length; j++) {
-							IPackageFragmentRoot root = allRoots[j];
-							if (root.isExternal() && root.getPath().equals(new Path(entry.getLocation()))) {
-								if (isSourceAttachmentEqual(root, entry)) {
-									// use package fragment root
-									return root;
-								}							
-							}
+				if (project.isOpen() && jp.exists()) {
+					IPackageFragmentRoot root = jp.findPackageFragmentRoot(resource.getFullPath());
+					if (root != null) {
+						// ensure source attachment paths match
+						if (isSourceAttachmentEqual(root, entry)) {
+							// use package fragment root
+							return root;
 						}
 					}
 				}
 			} catch (JavaModelException e) {
 				LaunchingPlugin.log(e);
 			}
-		} else {
-			// check if the archive is a package fragment root
-			IProject project = resource.getProject();
-			IJavaProject jp = JavaCore.create(project);
-			try {
-				if (project.isOpen() && jp.exists()) {
-					IPackageFragmentRoot root = jp.getPackageFragmentRoot(resource);
+		}
+		// Check all package fragment roots for case of external archive.
+		// External jars are shared, so it does not matter which project it
+		// originates from
+		IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
+		Path entryPath = new Path(entry.getLocation());
+		try {
+			IJavaProject[] jps = model.getJavaProjects();
+			for (int i = 0; i < jps.length; i++) {
+				IJavaProject jp = jps[i];
+				IProject p =  jp.getProject();
+				if (p.isOpen()) {
 					IPackageFragmentRoot[] allRoots = jp.getPackageFragmentRoots();
 					for (int j = 0; j < allRoots.length; j++) {
-						if (allRoots[j].equals(root)) {
-							// ensure source attachment paths match
+						IPackageFragmentRoot root = allRoots[j];
+						if (root.isExternal() && root.getPath().equals(entryPath)) {
 							if (isSourceAttachmentEqual(root, entry)) {
 								// use package fragment root
 								return root;
-							}
-						}
-					}
-
-				}
-				// check all other java projects to see if another project references
-				// the archive
-				IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-				IJavaProject[] jps = model.getJavaProjects();
-				for (int i = 0; i < jps.length; i++) {
-					IJavaProject jp1 = jps[i];
-					IProject p = jp1.getProject();
-					if (p.isOpen()) {
-						IPackageFragmentRoot[] allRoots = jp1.getPackageFragmentRoots();
-						for (int j = 0; j < allRoots.length; j++) {
-							IPackageFragmentRoot root = allRoots[j];
-							if (!root.isExternal() && root.getPath().equals(entry.getPath())) {
-								if (isSourceAttachmentEqual(root, entry)) {
-									// use package fragment root
-									return root;
-								}							
-							}
+							}							
 						}
 					}
 				}
-			} catch (JavaModelException e) {
-				LaunchingPlugin.log(e);
-			}		
-		}		
+			}
+		} catch (JavaModelException e) {
+			LaunchingPlugin.log(e);
+		}
 		return null;
 	}	
 }
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/RuntimeClasspathEntry.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/RuntimeClasspathEntry.java
index d8ad951..84918b0 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/RuntimeClasspathEntry.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/RuntimeClasspathEntry.java
@@ -342,10 +342,6 @@
 	protected IResource getResource(IPath path) {
 		if (path != null) {
 			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-			if (path.getDevice() == null) {
-				// search relative to the workspace if no device present
-				return root.findMember(path);
-			} 
 			// look for files or folders with the given path
 			IFile[] files = root.findFilesForLocation(path);
 			if (files.length > 0) {
@@ -355,6 +351,10 @@
 			if (containers.length > 0) {
 				return containers[0];
 			}
+			if (path.getDevice() == null) {
+				// search relative to the workspace if no device present
+				return root.findMember(path);
+			} 
 		}		
 		return null;
 	}
