Index: /trunk/java-utils/src/main/java/de/ugoe/cs/util/console/CommandExecuter.java
===================================================================
--- /trunk/java-utils/src/main/java/de/ugoe/cs/util/console/CommandExecuter.java	(revision 668)
+++ /trunk/java-utils/src/main/java/de/ugoe/cs/util/console/CommandExecuter.java	(revision 669)
@@ -9,8 +9,9 @@
 import java.security.InvalidParameterException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
@@ -176,8 +177,8 @@
     /**
      * <p>
-     * reads all available commands from the registered command packages and returns a list of
-     * their names
-     * </p>
-     *
+     * reads all available commands from the registered command packages and returns a list of their
+     * names
+     * </p>
+     * 
      * @return an array containing the names of the available commands.
      */
@@ -187,5 +188,5 @@
         packages.addAll(commandPackageList);
         packages.add(defaultPackage);
-        
+
         FilenameFilter filter = new FilenameFilter() {
             @Override
@@ -194,19 +195,29 @@
             }
         };
-        
-        List<String> classNames = new ArrayList<String>();
+
+        SortedSet<String> classNames = new TreeSet<String>(new Comparator<String>() {
+            @Override
+            public int compare(String arg1, String arg2) {
+                String str1 = arg1.substring(arg1.lastIndexOf('.') + cmdPrefix.length() + 1);
+                String str2 = arg2.substring(arg2.lastIndexOf('.') + cmdPrefix.length() + 1);
+                return str1.compareTo(str2);
+            }
+
+        });
+
         for (String packageName : packages) {
             String path = packageName.replace('.', '/');
             try {
                 Enumeration<URL> resources = ClassLoader.getSystemResources(path);
-                
+
                 while (resources.hasMoreElements()) {
                     URL resource = resources.nextElement();
                     File packageDir = new File(resource.getFile());
-                    
+
                     if (packageDir.isDirectory()) {
                         for (File classFile : packageDir.listFiles(filter)) {
-                            String className = classFile.getName().substring
-                                (0, classFile.getName().lastIndexOf('.'));
+                            String className =
+                                classFile.getName().substring(0,
+                                                              classFile.getName().lastIndexOf('.'));
                             classNames.add(packageName + "." + className);
                         }
@@ -219,5 +230,5 @@
                         {
                             String jarFile = resource.getFile().substring("file:".length(), index);
-                            
+
                             // we have to read the package content from a jar file
                             JarInputStream jarInputStream = null;
@@ -227,6 +238,6 @@
                             catch (Exception e) {
                                 e.printStackTrace();
-                                Console.traceln
-                                    (Level.WARNING, "could not read contents of jar " + jarFile);
+                                Console.traceln(Level.WARNING, "could not read contents of jar " +
+                                    jarFile);
                             }
 
@@ -237,6 +248,7 @@
                                     (entry.getName().startsWith(path)))
                                 {
-                                    String className = entry.getName().substring
-                                        (path.length(), entry.getName().lastIndexOf('.'));
+                                    String className =
+                                        entry.getName().substring(path.length(),
+                                                                  entry.getName().lastIndexOf('.'));
                                     classNames.add(packageName + "." + className);
                                 }
@@ -251,31 +263,14 @@
             }
         }
-        
-        Collections.sort(classNames, new Comparator<String>() {
-            @Override
-            public int compare(String arg1, String arg2) {
-                String str1 = arg1.substring(arg1.lastIndexOf('.') + cmdPrefix.length() + 1);
-                String str2 = arg2.substring(arg2.lastIndexOf('.') + cmdPrefix.length() + 1);
-                return str1.compareTo(str2);
-            }
-            
-        });
+
         for (String className : classNames) {
-            String commandStr =
-                className.substring(className.lastIndexOf('.') + cmdPrefix.length() + 1);
-            
-            // commands may be found twice as a package may be available twice on the
-            // class path. Therefore check, if the command was already dumped before
-            // dumping it.
-            if (!commands.contains(commandStr)) {
-                // class may still be inner classes. Therefore load the command, to
-                // see if it is really available and a command.
-                Command cmd = loadCMD(className);
-                if (cmd != null) {
-                    commands.add(cmd);
-                }
-            }
-        }
-        
+            // class may still be inner classes. Therefore load the command, to
+            // see if it is really available and a command.
+            Command cmd = loadCMD(className);
+            if (cmd != null) {
+                commands.add(cmd);
+            }
+        }
+
         Command[] commandArray = commands.toArray(new Command[commands.size()]);
         return commandArray;
