diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandGroup.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandGroup.java
index 817225b533dd7a9d9bf67f227e4e1f1896f099e7..36ec753faf43a332d6501020c2b30fcf10e81405 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandGroup.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandGroup.java
@@ -3,7 +3,10 @@ package ohi.andre.consolelauncher.commands;
 import android.content.Context;
 
 import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import ohi.andre.consolelauncher.tuils.Tuils;
@@ -11,35 +14,68 @@ import ohi.andre.consolelauncher.tuils.Tuils;
 public class CommandGroup {
 
     private String packageName;
-
-    private List<String> commands;
+    private CommandAbstraction[] commands;
+    private String[] commandNames;
 
     public CommandGroup(Context c, String packageName) {
         this.packageName = packageName;
 
+        List<String> cmds;
         try {
-            this.commands = Tuils.getClassesInPackage(packageName, c);
+            cmds = Tuils.getClassesInPackage(packageName, c);
         } catch (IOException e) {
+            return;
         }
 
-        Collections.sort(commands);
-    }
+        List<CommandAbstraction> cmdAbs = new ArrayList<>();
+        Iterator<String> iterator = cmds.iterator();
+        while (iterator.hasNext()) {
+            String s = iterator.next();
+            CommandAbstraction ca = buildCommand(s);
+            if(ca != null) {
+                cmdAbs.add(ca);
+            } else {
+                iterator.remove();
+            }
+        }
 
-    public CommandAbstraction getCommandByName(String name) throws Exception {
-        for (int count = 0; count < commands.size(); count++) {
-            String cmdName = commands.get(count);
-            if (!cmdName.equals(name))
-                continue;
+        Collections.sort(cmds);
+        commandNames = new String[cmds.size()];
+        cmds.toArray(commandNames);
+        commands = new CommandAbstraction[cmdAbs.size()];
+        cmdAbs.toArray(commands);
+    }
 
-            String fullCmdName = packageName + "." + cmdName;
-            return Tuils.getCommandInstance(fullCmdName);
+    public CommandAbstraction getCommandByName(String name) {
+        for(CommandAbstraction c : commands) {
+            if(c.getClass().getName().endsWith(Tuils.DOT.concat(name))) {
+                return c;
+            }
         }
 
         return null;
     }
 
-    public List<String> getCommands() {
+    private CommandAbstraction buildCommand(String name) {
+        String fullCmdName = packageName + Tuils.DOT + name;
+        try {
+            Class<CommandAbstraction> clazz = (Class<CommandAbstraction>) Class.forName(fullCmdName);
+            if(CommandAbstraction.class.isAssignableFrom(clazz)) {
+                Constructor<CommandAbstraction> constructor = clazz.getConstructor();
+                return constructor.newInstance();
+            }
+            return null;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    public CommandAbstraction[] getCommands() {
         return commands;
     }
 
+    public String[] getCommandNames() {
+        return commandNames;
+    }
+
 }