diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/JarImportOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/JarImportOperation.java
index 746ea85..4f5fd6a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/JarImportOperation.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/JarImportOperation.java
@@ -273,4 +273,38 @@
 		return true;
 	}
 	
+	protected String[] getTopLevelResources(File file) {
+		ArrayList result = new ArrayList();
+		ZipFile zipFile = null;
+		try {
+			zipFile = new ZipFile(file);
+			ZipFileStructureProvider provider = new ZipFileStructureProvider(zipFile);
+			List children = provider.getChildren(provider.getRoot());
+			if (children != null && !children.isEmpty()) {
+				for (int i = 0; i < children.size(); i++) {
+					Object curr = children.get(i);
+					if (provider.isFolder(curr)) {
+						if (!isClassFolder(provider, curr)) 
+							result.add(provider.getLabel(curr) + "/");
+						else {
+							if (!result.contains("."))
+								result.add(".");
+						}
+					} else {
+						result.add(provider.getLabel(curr));
+					}
+				}
+			}			
+		} catch (IOException e) {
+		} finally {
+			if (zipFile != null) {
+				try {
+					zipFile.close();
+				} catch (IOException e) {
+				}
+			}
+		}	
+		return (String[])result.toArray(new String[result.size()]);
+	}
+	
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
index 08e1a70..092fa4a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
@@ -299,9 +299,33 @@
 				}
 			}	
 		}
+		configureBinIncludes(buildModel, model);
 		buildModel.save();
 	}
 	
+	private void configureBinIncludes(WorkspaceBuildModel buildModel, IPluginModelBase model) throws CoreException {
+		IBuildEntry entry = buildModel.getBuild(true).getEntry("bin.includes");
+		if (entry == null) {
+			entry = buildModel.getFactory().createEntry("bin.includes");
+			File location = new File(model.getInstallLocation());
+			if (location.isDirectory()) {
+				File[] files = location.listFiles();
+				for (int i = 0; i < files.length; i++) {
+					String token = files[i].getName();
+					if (files[i].isDirectory())
+						token = token + "/"; //$NON-NLS-1$
+					entry.addToken(token);
+				}
+			} else {
+				String[] tokens = getTopLevelResources(location);
+				for (int i = 0; i < tokens.length; i++) {
+					entry.addToken(tokens[i]);
+				}
+			}
+			buildModel.getBuild().add(entry);
+		}
+	}
+	
 	private String addBuildEntry(WorkspaceBuildModel model, String key, String value) throws CoreException {
 		IBuild build = model.getBuild(true);
 		IBuildEntry entry = build.getEntry(key);
