Index: trunk/src/lib/lang/class_list.cc
===================================================================
--- trunk/src/lib/lang/class_list.cc	(revision 5328)
+++ trunk/src/lib/lang/class_list.cc	(revision 5329)
@@ -24,7 +24,9 @@
 #include <string.h>
 #include <math.h>
+#include "shell_command.h"
 
 using namespace std;
 
+SHELL_COMMAND_STATIC(debug, ClassList, ClassList::debug);
 
 /**
Index: trunk/src/lib/shell/shell.cc
===================================================================
--- trunk/src/lib/shell/shell.cc	(revision 5328)
+++ trunk/src/lib/shell/shell.cc	(revision 5329)
@@ -65,5 +65,5 @@
   // Element2D and generals
   this->setAbsCoor2D(3, -400);
-  this->textSize = 15;
+  this->textSize = 20;
   this->lineSpacing = 0;
   this->bActive = false;
Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 5328)
+++ trunk/src/lib/shell/shell_command.cc	(revision 5329)
@@ -422,5 +422,4 @@
   if (ShellCommandClass::commandClassList == NULL)
     return false;
-
 
   long classID = CL_NULL;                 //< the classID retrieved from the Class.
@@ -482,27 +481,30 @@
     }
 
-    if (classID != CL_NULL && inputSplits.getCount() >= 2 && objectList != NULL)
-    {
-      // Checking for a Match in the Objects of classID (else take the first)
-      tIterator<BaseObject>* itBO = objectList->getIterator();
-      BaseObject* enumBO = itBO->firstElement();
-      while(enumBO)
+    if (commandClass != NULL && inputSplits.getCount() >= 2)
+    {
+      if (objectList != NULL)
       {
-        if (enumBO->getName() != NULL && !strcasecmp(enumBO->getName(), inputSplits.getString(1)))
+        // Checking for a Match in the Objects of classID (else take the first)
+        tIterator<BaseObject>* itBO = objectList->getIterator();
+        BaseObject* enumBO = itBO->firstElement();
+        while(enumBO)
         {
-          objectPointer = enumBO;
-          fktPos++;
-          break;
-        }
-        enumBO = itBO->nextElement();
+          if (enumBO->getName() != NULL && !strcasecmp(enumBO->getName(), inputSplits.getString(1)))
+          {
+            objectPointer = enumBO;
+            fktPos = 2;
+            break;
+          }
+          enumBO = itBO->nextElement();
+         }
+         delete itBO;
+
+      //
+        if (objectPointer == NULL)
+          objectPointer = objectList->firstElement();
       }
-      delete itBO;
-
-      //
-      if (objectPointer == NULL)
-        objectPointer = objectList->firstElement();
-
+      printf("test\n");
       // match a function.
-      if (commandClass != NULL && objectPointer != NULL && (fktPos == 1 || (fktPos == 2 && inputSplits.getCount() >= 3)))
+      if (commandClass != NULL && (fktPos == 1 || (fktPos == 2 && inputSplits.getCount() >= 3)))
       {
         tIterator<ShellCommandBase>* itCMD = commandClass->commandList->getIterator();
@@ -512,4 +514,9 @@
           if (!strcmp(enumCMD->getName(), inputSplits.getString(fktPos)))
           {
+            if (objectPointer == NULL && enumCMD->functorType == ShellCommand_Objective)
+            {
+              delete itCMD;
+              return false;
+            }
             if (inputSplits.getCount() > fktPos+1)
               enumCMD->executeCommand(objectPointer, executionString+inputSplits.getOffset(fktPos +1));
@@ -622,13 +629,4 @@
 
   return this;
-}
-
-
-/**
- * see ShellCommandBase::debug()
- */
-void ShellCommandBase::debugDyn()
-{
-  this->debug();
 }
 
Index: trunk/src/lib/shell/shell_command.h
===================================================================
--- trunk/src/lib/shell/shell_command.h	(revision 5328)
+++ trunk/src/lib/shell/shell_command.h	(revision 5329)
@@ -39,4 +39,19 @@
 #define SHELL_COMMAND(command, class, function) \
         ShellCommandBase* shell_command_##class##_##command = ShellCommand<class>::registerCommand(#command, #class, &class::function)
+/**
+ * an easy to use Macro to create a Command
+ * @param command the name of the command (without "" around the string)
+ * @param class the name of the class to apply this command to (without the "" around the string)
+ * @param function the function to call
+ *
+ * MEANING:
+ *  ShellCommandBase* someUniqueVarName =
+ *       ShellCommand<ClassName>::registerCommand("commandNameInShell", "ClassName", &ClassName::FunctionToCall);
+ *
+ * In the Shell you would call this Command using:
+ * $ ClassName [ObjectName] commandNameInShell [parameters]
+ */
+#define SHELL_COMMAND_STATIC(command, class, function) \
+                         ShellCommandBase* shell_command_##class##_##command = ShellCommandStatic<class>::registerCommand(#command, #class, function)
 
 
@@ -110,6 +125,4 @@
     static bool isRegistered(const char* commandName, const char* className, unsigned int paramCount, ...);
     static const char* paramToString(long parameter);
-
-    void debugDyn();
 
   private:
Index: trunk/src/lib/shell/shell_completion.cc
===================================================================
--- trunk/src/lib/shell/shell_completion.cc	(revision 5328)
+++ trunk/src/lib/shell/shell_completion.cc	(revision 5329)
@@ -107,5 +107,4 @@
     completeType |= SHELLC_CLASS;
     completeType |= SHELLC_ALIAS;
-
   }
   else if (inputSplits.getCount() == 1 && emptyComplete == false)
Index: trunk/src/lib/util/helper_functions.cc
===================================================================
--- trunk/src/lib/util/helper_functions.cc	(revision 5328)
+++ trunk/src/lib/util/helper_functions.cc	(revision 5329)
@@ -29,4 +29,6 @@
 bool isBool(const char* BOOL, bool defaultValue)
 {
+  if (BOOL == NULL)
+    return defaultValue;
   if(!strcmp(BOOL, "1") || !strcmp( BOOL,"true") || !strcmp(BOOL,"TRUE"))
     return true;
@@ -40,5 +42,8 @@
 int isInt(const char* INT, int defaultValue)
 {
+  if (INT == NULL)
+    return defaultValue;
   char* endPtr = NULL;
+
   int result = strtol(INT, &endPtr, 10);
 
@@ -51,4 +56,6 @@
 float isFloat(const char* FLOAT, float defaultValue)
 {
+  if (FLOAT == NULL)
+    return defaultValue;
   char* endPtr = NULL;
   double result = strtod(FLOAT, &endPtr);
