diff --git a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/EasymportJob.java b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/EasymportJob.java
index 710261d..b600b87 100644
--- a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/EasymportJob.java
+++ b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/EasymportJob.java
@@ -20,7 +20,9 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.SortedMap;
 import java.util.SortedSet;
+import java.util.TreeMap;
 import java.util.TreeSet;
 
 import org.eclipse.core.resources.IContainer;
@@ -136,41 +138,51 @@
 	        }
 
 			if (directoriesToImport != null) {
-				SortedSet<File> bottomUpDirectoriesToImport = new TreeSet<>(new Comparator<File>() {
-					@Override
+				Comparator<File> rootToLeafComparator = new Comparator<File>() {
 					public int compare(File arg0, File arg1) {
-						int lengthDiff = arg1.getAbsolutePath().length() - arg0.getAbsolutePath().length();
+						int lengthDiff = arg0.getAbsolutePath().length() - arg1.getAbsolutePath().length();
 						if (lengthDiff != 0) {
 							return lengthDiff;
 						} else {
 							return arg0.compareTo(arg1);
 						}
 					}
-				});
-				bottomUpDirectoriesToImport.addAll(this.directoriesToImport);
-				JobGroup multiDirectoriesJobGroup = new JobGroup("Importing selected directories", 20, 1);
-				for (final File directoryToImport : bottomUpDirectoriesToImport) {
+				};
+				SortedSet<File> directories = new TreeSet<>(rootToLeafComparator);
+				directories.addAll(this.directoriesToImport);
+				SortedMap<File, IProject> leafToRootProjects = new TreeMap<>(Collections.reverseOrder(rootToLeafComparator));
+				final Set<IProject> alreadyConfiguredProjects = new HashSet<>();
+				for (final File directoryToImport : directories) {
 					final boolean alreadyAnEclipseProject = new File(directoryToImport, IProjectDescription.DESCRIPTION_FILE_NAME).isFile();
-					Job directoryJob = new Job("Processing " + directoryToImport.getName()) {
-						protected IStatus run(IProgressMonitor monitor) {
-							try {
-								IProject newProject = toExistingOrNewProject(directoryToImport, monitor, IResource.BACKGROUND_REFRESH);
-								if (configureProjects) {
-									importProjectAndChildrenRecursively(newProject, deepChildrenDetection, !alreadyAnEclipseProject, monitor);
-								}
-								return Status.OK_STATUS;
-							} catch (Exception ex) {
-								return new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), ex.getMessage(), ex);
-							}
-						}
-					};
-					// Job1 on path1 and Job2 on path2 can be run in parallel IFF path1 isn't a prefix of path2 and vice-versa
-					directoryJob.setRule(new SubdirectoryOrSameNameSchedulingRule(directoryToImport));
-					directoryJob.setUser(true);
-					directoryJob.setJobGroup(multiDirectoriesJobGroup);
-					directoryJob.schedule();
+					IProject newProject = toExistingOrNewProject(directoryToImport, monitor, IResource.BACKGROUND_REFRESH);
+					if (alreadyAnEclipseProject) {
+						alreadyConfiguredProjects.add(newProject);
+					}
+					leafToRootProjects.put(directoryToImport, newProject);
 				}
-				multiDirectoriesJobGroup.join(0, monitor);
+				if (configureProjects) {
+					JobGroup multiDirectoriesJobGroup = new JobGroup("Configuring selected directories", 20, 1);
+					for (final IProject newProject : leafToRootProjects.values()) {
+						Job directoryJob = new Job("Configuring " + newProject.getName()) {
+							protected IStatus run(IProgressMonitor monitor) {
+								try {
+									importProjectAndChildrenRecursively(newProject, EasymportJob.this.deepChildrenDetection, !alreadyConfiguredProjects.contains(newProject), monitor);
+									return Status.OK_STATUS;
+								} catch (Exception ex) {
+									return new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), ex.getMessage(), ex);
+								}
+							}
+						};
+						// Job1 on path1 and Job2 on path2 can be run in parallel IFF path1 isn't a prefix of path2 and vice-versa
+						directoryJob.setRule(new SubdirectoryOrSameNameSchedulingRule(newProject));
+						directoryJob.setUser(true);
+						directoryJob.setJobGroup(multiDirectoriesJobGroup);
+						directoryJob.schedule();
+					}
+					multiDirectoriesJobGroup.join(0, monitor);
+				}
+				
+
 			} else { // no specific projects included, consider only root
 				File rootProjectFile = new File(this.rootDirectory, IProjectDescription.DESCRIPTION_FILE_NAME);
 				boolean isRootANewProject = !rootProjectFile.isFile();
@@ -253,7 +265,7 @@
 	}
 
 	private Set<IProject> searchAndImportChildrenProjectsRecursively(IContainer parentContainer, Set<IPath> directoriesToExclude, final IProgressMonitor progressMonitor) throws Exception {
-		for (IProject processedProjects : this.report.keySet()) {
+		for (IProject processedProjects : Collections.synchronizedSet(this.report.keySet())) {
 			if (processedProjects.getLocation().equals(parentContainer.getLocation())) {
 				return Collections.EMPTY_SET;
 			}
diff --git a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/ImportProposalsWizardPage.java b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/ImportProposalsWizardPage.java
index 61a032e..176e137 100644
--- a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/ImportProposalsWizardPage.java
+++ b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/ImportProposalsWizardPage.java
@@ -233,8 +233,8 @@
 
 	private void selectionChanged() {
 		Object[] selected = tree.getCheckedElements();
-		EasymportJob importJob = getWizard().getImportJob(); 
-		Set<File> excludedDirectories = new HashSet<>(importJob.getImportProposals(null).keySet());
+		EasymportJob importJob = getWizard().getImportJob();
+		Set<File> excludedDirectories = new HashSet(((Map<File, ?>)this.tree.getInput()).keySet());
 		Set<File> selectedProjects = new HashSet<File>();
 		for (Object item : selected) {
 			File directory = (File)item;
diff --git a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/SubdirectoryOrSameNameSchedulingRule.java b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/SubdirectoryOrSameNameSchedulingRule.java
index 08cf5a9..1c7d107 100644
--- a/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/SubdirectoryOrSameNameSchedulingRule.java
+++ b/bundles/org.eclipse.e4.ui.importer/src/org/eclipse/ui/internal/wizards/datatransfer/SubdirectoryOrSameNameSchedulingRule.java
@@ -31,7 +31,11 @@
 	public SubdirectoryOrSameNameSchedulingRule(File directory) {
 		this.directory = directory;
 	}
-	
+
+	public SubdirectoryOrSameNameSchedulingRule(IResource resource) {
+		this(resource.getLocation().toFile());
+	}
+
 	@Override
 	public boolean contains(ISchedulingRule rule) {
 		return rule == this || rule instanceof IResource;
