Index: branches/new_class_id/src/lib/lang/new_object_list.h
===================================================================
--- branches/new_class_id/src/lib/lang/new_object_list.h	(revision 9691)
+++ branches/new_class_id/src/lib/lang/new_object_list.h	(revision 9692)
@@ -36,5 +36,5 @@
     NewObjectListDefinitionID(ClassName, -1)
 
-
+class BaseObject;
 //! The superclass that all NewObjectLists follow.
 /**
@@ -44,5 +44,23 @@
 {
 public:
-  //! An iterator Base-Class, for iterator-casting and storing.
+  class base_iterator
+  {
+  public:
+    virtual base_iterator operator++() = 0;
+    virtual base_iterator operator--() = 0;
+    virtual BaseObject* operator*() = 0;
+    virtual base_iterator& operator=(const base_iterator& iterator) = 0;
+    virtual bool operator==(const base_iterator& iterator) = 0;
+  protected:
+    void* _it;
+  };
+
+  virtual base_iterator& base_begin() = 0;
+  virtual base_iterator& base_end() = 0;
+
+  //! A fast iterator Base-Class, for iterator-casting and storing.
+  /**
+   * @note This Iterator is explicitely used only for storage purposes
+   */
   class IteratorBase { };
 
@@ -76,6 +94,6 @@
 
 protected:
-  typedef std::map<int, NewObjectListBase*> classIDMap;    //!< The Generic Map.
-  typedef std::map<std::string, NewObjectListBase*> classNameMap;//!< The Generic Map.
+  typedef std::map<int, NewObjectListBase*>         classIDMap;   //!< The Generic Map.
+  typedef std::map<std::string, NewObjectListBase*> classNameMap; //!< The Generic Map.
 
   NewClassID                    _identity;          //!< The Identity of the Class (ID and Name).
@@ -108,4 +126,8 @@
   typedef typename list::const_iterator  const_iterator;
 
+  virtual base_iterator& base_begin() { };
+  virtual base_iterator& base_end() { };
+
+
 class Iterator : public NewObjectListBase::IteratorBase
   {
Index: branches/new_class_id/src/lib/script_engine/script.cc
===================================================================
--- branches/new_class_id/src/lib/script_engine/script.cc	(revision 9691)
+++ branches/new_class_id/src/lib/script_engine/script.cc	(revision 9692)
@@ -24,5 +24,5 @@
 
 #include "class_list.h"
-CREATE_SCRIPTABLE_CLASS(Script, CL_SCRIPT,
+CREATE_SCRIPTABLE_CLASS(Script, Script::classID(),
                     addMethod("addObject", ExecutorLua2<Script,const std::string&, const std::string& >(&Script::addObject))
                     ->addMethod("registerClass", ExecutorLua1<Script,const std::string&>(&Script::registerClass))
@@ -31,7 +31,9 @@
                      );
 
+NewObjectListDefinition(Script);
+
 Script::Script(const TiXmlElement* root)
 {
-  this->setClassID(CL_SCRIPT, "Script");
+  this->registerObject(this, Script::_objectList);
 
   returnCount = argumentCount = 0;
@@ -64,5 +66,5 @@
   luaopen_math(luaState);
   luaopen_debug(luaState);
-  
+
   this->loadFile(filename);
 
@@ -100,8 +102,8 @@
    std::string filedest(ResourceManager::getInstance()->getDataDir());
    filedest += "scripts/" + filename;
-   
+
    this->addThisScript();
    this->registerStandartClasses();
-   
+
    if(currentFile.length() != 0)
    {
@@ -295,5 +297,5 @@
        lua_remove(luaState,-1*returnCount);
        returnCount--;
-       
+
      }
    }
@@ -375,5 +377,5 @@
  {
    bool success = false;
-   
+
    //this->registerClass(std::string("Vector"));
     this->registerClass("ScriptTrigger");
@@ -382,6 +384,6 @@
    return success;
  }
- 
- 
+
+
  void Script::registerClass( const std::string& className)
  {
@@ -400,5 +402,5 @@
      }
    }
- 
+
  }
 
Index: branches/new_class_id/src/lib/script_engine/script.h
===================================================================
--- branches/new_class_id/src/lib/script_engine/script.h	(revision 9691)
+++ branches/new_class_id/src/lib/script_engine/script.h	(revision 9692)
@@ -22,4 +22,5 @@
 class Script : public BaseObject
 {
+  NewObjectListDeclaration(Script);
   public:
     Script(const TiXmlElement* root = NULL);
@@ -33,5 +34,5 @@
     bool loadFile(const std::string& filename);
     void addObject( const std::string& className,const std::string& objectName);
-    void registerClass(const std::string& className);                           //!< Register a class but dont add any instances 
+    void registerClass(const std::string& className);                           //!< Register a class but dont add any instances
 
     /// QUERRYING
Index: branches/new_class_id/src/lib/script_engine/script_class.cc
===================================================================
--- branches/new_class_id/src/lib/script_engine/script_class.cc	(revision 9691)
+++ branches/new_class_id/src/lib/script_engine/script_class.cc	(revision 9692)
@@ -19,4 +19,5 @@
 #include <cassert>
 
+NewObjectListDefinition(ScriptClass);
 /**
  * @brief standard constructor
@@ -27,5 +28,5 @@
 {
   assert(scriptMethods != NULL);
-  this->setClassID(CL_SCRIPT_CLASS, "ScriptClass");
+  this->registerObject(this, Shell::_objectList);
 
   this->_classID = classID;
Index: branches/new_class_id/src/lib/shell/shell.cc
===================================================================
--- branches/new_class_id/src/lib/shell/shell.cc	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell.cc	(revision 9692)
@@ -54,4 +54,5 @@
   ->completionPlugin(0, OrxShell::CompletorFileSystem(".ttf", "fonts/"));
 
+  NewObjectListDefinition(Shell);
 
   /**
@@ -60,5 +61,6 @@
   Shell::Shell ()
   {
-    this->setClassID(CL_SHELL, "Shell");
+    this->registerObject(this, Shell::_objectList);
+
     this->setName("Shell");
 
Index: branches/new_class_id/src/lib/shell/shell.h
===================================================================
--- branches/new_class_id/src/lib/shell/shell.h	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell.h	(revision 9692)
@@ -48,5 +48,5 @@
   class Shell : public Element2D, public EventListener
   {
-
+    NewObjectListDeclaration(Shell);
   public:
     Shell();
Index: branches/new_class_id/src/lib/shell/shell_buffer.h
===================================================================
--- branches/new_class_id/src/lib/shell/shell_buffer.h	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_buffer.h	(revision 9692)
@@ -24,5 +24,4 @@
   class ShellBuffer
   {
-
   public:
     virtual ~ShellBuffer();
Index: branches/new_class_id/src/lib/shell/shell_command.cc
===================================================================
--- branches/new_class_id/src/lib/shell/shell_command.cc	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_command.cc	(revision 9692)
@@ -21,5 +21,4 @@
 #include "compiler.h"
 #include "debug.h"
-#include "class_list.h"
 
 #include "key_names.h"
@@ -28,4 +27,5 @@
 {
   SHELL_COMMAND(debug, ShellCommandClass, help);
+  NewObjectListDefinition(ShellCommand);
 
 
@@ -38,5 +38,5 @@
   ShellCommand::ShellCommand(const std::string& commandName, const std::string& className, Executor* executor)
   {
-    this->setClassID(CL_SHELL_COMMAND, "ShellCommand");
+    this->registerObject(this, ShellCommand::_objectList);
     PRINTF(4)("create shellcommand '%s' for class '%s'\n", commandName.c_str(), className.c_str());
     this->setName(commandName);
@@ -94,10 +94,9 @@
   void ShellCommand::unregisterCommand(const std::string& commandName, const std::string& className)
   {
-
     ShellCommandClass* cmdClass = ShellCommandClass::acquireCommandClass(className);
     if (cmdClass != NULL)
     {
       CmdList::iterator cmd;
-      for (cmd = cmdClass->commandList.begin(); cmd != cmdClass->commandList.end(); cmd++)
+      for (cmd = cmdClass->_commandList.begin(); cmd != cmdClass->_commandList.end(); cmd++)
         if (commandName == (*cmd)->getName())
         {
@@ -119,8 +118,8 @@
 
     CmdList::const_iterator elem;
-    for (unsigned int i = 0; i < cmdClass->commandList.size(); i++)
-    {
-      if (commandName == cmdClass->commandList[i]->getName())
-        return (cmdClass->commandList[i]);
+    for (unsigned int i = 0; i < cmdClass->_commandList.size(); i++)
+    {
+      if (commandName == cmdClass->_commandList[i]->getName())
+        return (cmdClass->_commandList[i]);
     }
     return NULL;
Index: branches/new_class_id/src/lib/shell/shell_command.h
===================================================================
--- branches/new_class_id/src/lib/shell/shell_command.h	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_command.h	(revision 9692)
@@ -58,4 +58,6 @@
   class ShellCommand : public BaseObject
   {
+    NewObjectListDeclaration(ShellCommand);
+
     friend class ShellCommandClass;
   public:
Index: branches/new_class_id/src/lib/shell/shell_command_class.cc
===================================================================
--- branches/new_class_id/src/lib/shell/shell_command_class.cc	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_command_class.cc	(revision 9692)
@@ -21,5 +21,4 @@
 
 #include "debug.h"
-#include "class_list.h"
 #include "compiler.h"
 
@@ -28,4 +27,6 @@
 namespace OrxShell
 {
+  NewObjectListDefinition(ShellCommandClass);
+
   CmdClassList* ShellCommandClass::commandClassList = NULL;
 
@@ -35,7 +36,7 @@
    */
   ShellCommandClass::ShellCommandClass(const std::string& className)
-      : className(className)
-  {
-    this->setClassID(CL_SHELL_COMMAND_CLASS, "ShellCommandClass");
+      : _className(className)
+  {
+    this->registerObject(this, ShellCommandClass::_objectList);
     this->setName(className);
 
Index: branches/new_class_id/src/lib/shell/shell_command_class.h
===================================================================
--- branches/new_class_id/src/lib/shell/shell_command_class.h	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_command_class.h	(revision 9692)
@@ -25,8 +25,10 @@
   class ShellCommandClass : public BaseObject
   {
+    NewObjectListDeclaration(ShellCommandClass);
+
     friend class ShellCommand;
   public:
     /** @returns the CommandClassList */
-    static const CmdClassList& getCommandClassList() { return *ShellCommandClass::commandClassList; };
+    static const CmdClassList& getCommandClassList() { return *ShellCommandClass::_commandClassList; };
 
     static bool getCommandListOfClass(const std::string& className, std::list<std::string>& stringList);
@@ -34,5 +36,5 @@
     static void unregisterAllCommands();
     static ShellCommandClass* getCommandClass(const std::string& className);
-    ClassID getClassID();
+    NewClassID getClassID();
     static bool exists(const std::string& className);
 
@@ -51,9 +53,9 @@
 
   private:
-    const std::string                      className;                 //!< The Name of the Class. This should match the ClassName of the Commands Class.
-    ClassID                                classID;                   //!< The classID of this Class
-    CmdList                                commandList;               //!< A list of Commands from this Class
+    const std::string                      _className;                 //!< The Name of the Class. This should match the ClassName of the Commands Class.
+    NewClassID                             _classID;                   //!< The classID of this Class
+    CmdList                                _commandList;               //!< A list of Commands from this Class
 
-    static CmdClassList*                   commandClassList;          //!< A list of Classes
+    static CmdClassList*                   _commandClassList;          //!< A list of Classes
   };
 }
Index: branches/new_class_id/src/lib/shell/shell_input.cc
===================================================================
--- branches/new_class_id/src/lib/shell/shell_input.cc	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_input.cc	(revision 9692)
@@ -24,4 +24,5 @@
 #include "compiler.h"
 #include "key_names.h"
+
 
 namespace OrxShell
@@ -31,4 +32,5 @@
   ->setAlias("help");
 
+  NewObjectListDefinition(ShellInput);
 
   /**
@@ -39,6 +41,7 @@
       : Text ("")
   {
+    this->registerObject(this, ShellInput::_objectList);
+
     this->pressedKey = SDLK_FIRST;
-    this->setClassID(CL_SHELL_INPUT, "ShellInput");
 
     this->inputLine = "";
Index: branches/new_class_id/src/lib/shell/shell_input.h
===================================================================
--- branches/new_class_id/src/lib/shell/shell_input.h	(revision 9691)
+++ branches/new_class_id/src/lib/shell/shell_input.h	(revision 9692)
@@ -30,4 +30,5 @@
   class ShellInput : public Text,  public EventListener
   {
+    NewObjectListDeclaration(ShellInput);
 
   public:
