Index: branches/new_class_id/src/lib/graphics/effects/atmospheric_engine.cc
===================================================================
--- branches/new_class_id/src/lib/graphics/effects/atmospheric_engine.cc	(revision 9692)
+++ branches/new_class_id/src/lib/graphics/effects/atmospheric_engine.cc	(revision 9693)
@@ -23,5 +23,5 @@
 #include "util/loading/factory.h"
 
-NewObjectListDefinition(AtmosphericEngine);
+NewObjectListDefinitionID(AtmosphericEngine, CL_ATMOS_ENGINE);
 
 /**
Index: branches/new_class_id/src/lib/lang/new_object_list.h
===================================================================
--- branches/new_class_id/src/lib/lang/new_object_list.h	(revision 9692)
+++ branches/new_class_id/src/lib/lang/new_object_list.h	(revision 9693)
@@ -44,19 +44,4 @@
 {
 public:
-  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.
   /**
@@ -93,4 +78,43 @@
   static bool classNameExists(const std::string& className);
 
+public:
+  class base_iterator
+  {
+  public:
+    /// @NOTE Do not use this class. For internal handling.
+    class __base_iterator_base
+    {
+    public:
+      virtual void operator++(int) = 0;
+      virtual void operator++() = 0;
+      virtual void operator--(int) = 0;
+      virtual void operator--() = 0;
+      virtual BaseObject* operator*() = 0;
+      virtual __base_iterator_base& operator=(const base_iterator& iterator) = 0;
+      virtual bool operator==(const __base_iterator_base& iterator) const = 0;
+      virtual bool operator!=(const __base_iterator_base& iterator) const = 0;
+      virtual __base_iterator_base* clone() const;
+    };
+
+  public:
+    base_iterator(__base_iterator_base& it) { _it = it.clone(); };
+    ~base_iterator() { delete _it; }
+    void operator++() { (*_it)++; };
+    void operator++(int) { ++(*_it); };
+    void operator--() { (*_it)--; };
+    void operator--(int) { --(*_it); };
+    BaseObject* operator*() { return *(*_it); };
+    base_iterator& operator=(const base_iterator& iterator);
+    bool operator==(const base_iterator& iter) const { return *this->_it == *iter._it; };
+    bool operator!=(const base_iterator& iter) const { return *this->_it != *iter._it; };
+
+  private:
+    __base_iterator_base*    _it;
+  };
+
+  virtual base_iterator base_begin() const = 0;
+  virtual base_iterator base_end() const = 0;
+
+
 protected:
   typedef std::map<int, NewObjectListBase*>         classIDMap;   //!< The Generic Map.
@@ -126,6 +150,6 @@
   typedef typename list::const_iterator  const_iterator;
 
-  virtual base_iterator& base_begin() { };
-  virtual base_iterator& base_end() { };
+  virtual base_iterator base_begin() const { return base_iterator(__base_iterator(this->_objects.begin())); };
+  virtual base_iterator base_end() const { return base_iterator(__base_iterator(this->_objects.end())); };
 
 
@@ -159,4 +183,21 @@
 
   virtual void debug() const;
+
+protected:
+class __base_iterator : public base_iterator::__base_iterator_base
+  {
+  public:
+    __base_iterator(const const_iterator& iter);
+    void operator++(int) { ++_iter; };
+    void operator++()  { _iter++; };
+    void operator--(int) { --_iter; };
+    void operator--()  { _iter--; };
+    BaseObject* operator*() { return *iter; };
+    base_iterator::__base_iterator_base& operator=(const base_iterator& iterator) { _iter = iterator._iter; return *this; };
+    bool operator==(const __base_iterator_base& iterator) const { return _iter == iterator._iter; };
+    bool operator!=(const __base_iterator_base& iterator) const { return _iter != iterator._iter; };
+  private:
+    iterator _iter;
+  };
 
 private:
