diff --git a/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java b/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java
index f0611d8..3f8c3dc 100644
--- a/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java
+++ b/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java
@@ -20,9 +20,7 @@
 import java.io.InputStream;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.Hashtable;
@@ -76,6 +74,7 @@
                     path = path.substring(0, path.length() - 1);
                 }
                 if ( !checkPath(resourceProvider, installables, path, resourceType) ) {
+                    logger.info("Launchpad {} will be installed: {}", resourceType, path);
                     final URL url = resourceProvider.getResource(path);
                     Dictionary<String, Object> dict = null;
                     if ( InstallableResource.TYPE_FILE.equals(resourceType) ) {
@@ -121,46 +120,7 @@
         checkPath(resourceProvider, installables, ROOT_INSTALL_PATH, InstallableResource.TYPE_FILE);
 
         final InstallableResource [] toInstall = installables.toArray(new InstallableResource []{});
-        // sort by url to have lower start levels first
-        Arrays.sort(toInstall, new ResourceComparator());
-        for(final InstallableResource rsrc : toInstall ) {
-            logger.info("Launchpad {} will be installed: {}", rsrc.getType(), rsrc.getId());
-        }
         installer.registerResources("launchpad", (toInstall));
         logger.info("{} resources registered with OsgiInstaller", toInstall.length);
     }
-
-    /**
-     * Resource comparator
-     */
-    private static final class ResourceComparator implements Comparator<InstallableResource> {
-
-        private Integer getStartLevel(final InstallableResource ir) {
-            try {
-                final Integer level = Integer.valueOf((String)ir.getDictionary().get(InstallableResource.INSTALLATION_HINT));
-                if ( level == 0 ) {
-                    return 100;
-                }
-                return level;
-            } catch ( final NumberFormatException ignore) {
-                return 1000;
-            }
-        }
-
-        /**
-         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-         */
-        public int compare(final InstallableResource o1,
-                           final InstallableResource o2) {
-            int result = o2.getType().compareTo(o1.getType());
-            if ( result == 0 ) {
-                if ( o1.getType() == InstallableResource.TYPE_PROPERTIES ) {
-                    result = o1.getId().compareTo(o2.getId());
-                } else {
-                    result = getStartLevel(o1).compareTo(getStartLevel(o2));
-                }
-            }
-            return result;
-        }
-    }
 }
\ No newline at end of file
