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 0639828..cbbbe50 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
@@ -62,29 +62,7 @@
 					} else {
 						IPackageFragmentRoot root = getPackageFragmentRoot(entry);
 						if (root == null) {
-							String path = entry.getSourceAttachmentLocation();
-							ISourceContainer container = null;
-							if (path == null) {
-								// use the archive itself
-								path = entry.getLocation();
-							}
-							if (path != null) {
-								// check if file or folder
-								File file = new File(path);
-								if (file.isDirectory()) {
-									IResource resource = entry.getResource();
-									if (resource instanceof IContainer) {
-										container = new FolderSourceContainer((IContainer) resource, false);
-									} else {
-										container = new DirectorySourceContainer(file, false);
-									}
-								} else {
-									container = new ExternalArchiveSourceContainer(path, true);
-								}
-								if (!containers.contains(container)) {
-									containers.add(container);
-								}
-							}
+							addSourceAttachment(entry, containers);
 						} else {
 							ISourceContainer container = new PackageFragmentRootSourceContainer(root);
 							if (!containers.contains(container)) {
@@ -117,6 +95,39 @@
 	}
 
 	/**
+	 * Tries to find and attach source containers for given runtime classpath entry
+	 *
+	 * @param entry
+	 *            non null
+	 * @param containers
+	 */
+	private static void addSourceAttachment(IRuntimeClasspathEntry entry, List<ISourceContainer> containers) {
+		String path = entry.getSourceAttachmentLocation();
+		ISourceContainer container = null;
+		if (path == null) {
+			// use the archive itself
+			path = entry.getLocation();
+		}
+		if (path != null) {
+			// check if file or folder
+			File file = new File(path);
+			if (file.isDirectory()) {
+				IResource resource = entry.getResource();
+				if (resource instanceof IContainer) {
+					container = new FolderSourceContainer((IContainer) resource, false);
+				} else {
+					container = new DirectorySourceContainer(file, false);
+				}
+			} else {
+				container = new ExternalArchiveSourceContainer(path, true);
+			}
+			if (!containers.contains(container)) {
+				containers.add(container);
+			}
+		}
+	}
+
+	/**
 	 * Returns whether the source attachments of the given package fragment
 	 * root and runtime classpath entry are equal.
 	 * <p>
@@ -212,6 +223,7 @@
 	private static void getPackageFragmentRootContainers(IRuntimeClasspathEntry entry, List<ISourceContainer> containers) {
 		IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
 		IPath entryPath = entry.getPath();
+		boolean found = false;
 		try {
 			IJavaProject[] jps = model.getJavaProjects();
 			for (int i = 0; i < jps.length; i++) {
@@ -225,6 +237,7 @@
 							PackageFragmentRootSourceContainer container = new PackageFragmentRootSourceContainer(root);
 							if (!containers.contains(container)) {
 								containers.add(container);
+								found = true;
 							}
 						}
 					}
@@ -234,5 +247,9 @@
 		catch (JavaModelException e) {
 			LaunchingPlugin.log(e);
 		}
+
+		if (!found) {
+			addSourceAttachment(entry, containers);
+		}
 	}
 }
