diff --git a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java
index 9be5093..95b1651 100644
--- a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java
+++ b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java
@@ -81,7 +81,6 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -631,7 +630,7 @@
 
   private static Set<IVersionedId> getExtraUnits(Annotation annotation)
   {
-    Set<IVersionedId> extraUnits = new HashSet<>();
+    Set<IVersionedId> extraUnits = new LinkedHashSet<>();
 
     String values = annotation.getDetails().get(ANNOTATION_EXTRA_UNITS);
     if (!StringUtil.isEmpty(values))
@@ -675,13 +674,13 @@
       List<String> preferredURLs, boolean generateImplicitUnits, boolean minimizeImplicitUnits, boolean singleLocation, boolean sortLocations,
       boolean ignoreJavaRequirements, IProgressMonitor monitor)
   {
-    Set<String> workspaceIDs = new HashSet<>();
+    Set<String> workspaceIDs = new LinkedHashSet<>();
     for (IInstallableUnit iu : workspaceIUInfos.keySet())
     {
       workspaceIDs.add(iu.getId());
     }
 
-    Set<IInstallableUnit> profileIUs = new HashSet<>();
+    Set<IInstallableUnit> profileIUs = new LinkedHashSet<>();
     for (IInstallableUnit iu : P2Util.asIterable(profile.query(QueryUtil.createIUAnyQuery(), monitor)))
     {
       String id = iu.getId();
@@ -775,7 +774,7 @@
   }
 
   private static Map<IMetadataRepository, Set<IInstallableUnit>> assignUnits(Map<String, IMetadataRepository> queryables, Set<IVersionedId> extraUnits,
-      boolean generateImplicitUnits, boolean minimizeImplicitUnits, boolean singleLocation, boolean sortLocations, boolean igoreJavaRquirements,
+      boolean generateImplicitUnits, boolean minimizeImplicitUnits, boolean singleLocation, boolean sortLocations, boolean ignoreJavaRequirements,
       Set<IInstallableUnit> resolvedIUs, IProgressMonitor monitor)
   {
     Map<IMetadataRepository, Set<IInstallableUnit>> result = sortLocations ? new TreeMap<>(new Comparator<IMetadataRepository>()
@@ -787,6 +786,14 @@
       }
     }) : new LinkedHashMap<>();
 
+    if (!sortLocations)
+    {
+      for (IMetadataRepository metadataRepository : queryables.values())
+      {
+        CollectionUtil.getSet(result, metadataRepository);
+      }
+    }
+
     if (singleLocation)
     {
       IQueryable<IInstallableUnit> queryable = QueryUtil.compoundQueryable(queryables.values());
@@ -804,7 +811,7 @@
 
           if (!generateImplicitUnits)
           {
-            RootAnalyzer.removeImplicitUnits(ius, queryable, monitor, false, igoreJavaRquirements);
+            RootAnalyzer.removeImplicitUnits(ius, queryable, monitor, false, ignoreJavaRequirements);
           }
           else if (minimizeImplicitUnits)
           {
@@ -841,7 +848,7 @@
 
       if (!generateImplicitUnits)
       {
-        RootAnalyzer.removeImplicitUnits(result, monitor, false, igoreJavaRquirements);
+        RootAnalyzer.removeImplicitUnits(result, monitor, false, ignoreJavaRequirements);
       }
       else if (minimizeImplicitUnits)
       {
