Index: branches/new_class_id/src/lib/lang/base_object.cc
===================================================================
--- branches/new_class_id/src/lib/lang/base_object.cc	(revision 9806)
+++ branches/new_class_id/src/lib/lang/base_object.cc	(revision 9807)
@@ -32,4 +32,5 @@
   this->objectName = objectName;
   this->xmlElem = NULL;
+  this->registerObject(this, BaseObject::_objectList);
 }
 
@@ -40,7 +41,9 @@
 {
   /// Remove from the ObjectLists
-  ClassList::iterator it;
+  ClassEntries::iterator it;
+  printf("Deleting Object of type %s::%s\n", this->getClassCName(), getCName());
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
   {
+    assert((*it)._objectList->checkIteratorInList((*it)._iterator) || (*it)._objectList->checkObjectInList(this));
     (*it)._objectList->unregisterObject((*it)._iterator);
     delete (*it)._iterator;
@@ -87,5 +90,5 @@
 bool BaseObject::isA(const ObjectListBase& objectList) const
 {
-  ClassList::const_iterator it;
+  ClassEntries::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     if ((*it)._objectList == &objectList)
@@ -102,5 +105,5 @@
 bool BaseObject::isA(const ClassID& classID) const
 {
-  ClassList::const_iterator it;
+  ClassEntries::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     if (*(*it)._objectList == classID)
@@ -116,7 +119,8 @@
 bool BaseObject::isA(int classID) const
 {
-  ClassList::const_iterator it;
+  ClassEntries::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     if (*(*it)._objectList == classID)
+
       return true;
   return false;
@@ -130,5 +134,5 @@
 bool BaseObject::isA(const std::string& className) const
 {
-  ClassList::const_iterator it;
+  ClassEntries::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     if (*(*it)._objectList == className)
@@ -146,5 +150,5 @@
 {
   PRINT(0)("Listing inheritance diagram for %s::%s: ", getClassCName(), getCName());
-  ClassList::const_iterator it;
+  ClassEntries::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     PRINT(0)(" -> %s(id:%d)", (*it)._objectList->name().c_str(), (*it)._objectList->id());
Index: branches/new_class_id/src/lib/lang/base_object.h
===================================================================
--- branches/new_class_id/src/lib/lang/base_object.h	(revision 9806)
+++ branches/new_class_id/src/lib/lang/base_object.h	(revision 9807)
@@ -84,11 +84,11 @@
     /** Simple Constuctor @param objectList the ObjectList, @param iterator the (intrusive) Iterator inside of the ObjectList */
     inline ClassEntry (ObjectListBase* objectList, ObjectListBase::IteratorBase* iterator) : _objectList(objectList), _iterator(iterator) {}
-    ObjectListBase*                _objectList;  //!< A ObjectList this Object is part of
+    ObjectListBase*                _objectList;  //!< An ObjectList this Object is part of
     ObjectListBase::IteratorBase*  _iterator;    //!< An iterator pointing to the position of the Object inside of the List.
   };
-  typedef std::list<ClassEntry>        ClassList;   //!< Type definition for the List.
+  typedef std::list<ClassEntry>       ClassEntries;   //!< Type definition for the List.
 
   std::string                         className;    //!< the name of the class
-  ClassList                           _classes;     //!< All Classes this object is part of.
+  ClassEntries                        _classes;     //!< All Classes this object is part of.
 };
 
Index: branches/new_class_id/src/lib/lang/object_list.h
===================================================================
--- branches/new_class_id/src/lib/lang/object_list.h	(revision 9806)
+++ branches/new_class_id/src/lib/lang/object_list.h	(revision 9807)
@@ -104,4 +104,7 @@
   //! Only used to unsubscribe a BaseObject. (just try to make a valid iterator, stupid :))
   virtual void                          unregisterObject(IteratorBase* _iterators) = 0;
+  //! Only for debug purposes
+  virtual bool                          checkIteratorInList(IteratorBase* _iterator) const = 0;
+  virtual bool                          checkObjectInList(BaseObject* obj) const = 0;
 
 protected:
@@ -226,5 +229,6 @@
   ObjectListBase::IteratorBase*      registerObject(T* object);
   virtual void                       unregisterObject(IteratorBase* iterator);
-
+  bool                               checkIteratorInList(IteratorBase* iterator) const;
+  bool                               checkObjectInList(BaseObject* obj) const;
 protected:
   virtual void                       getBaseObjectList(ObjectListBase::base_list* list) const;
@@ -345,3 +349,35 @@
 }
 
+template <class T>
+bool ObjectList<T>::checkIteratorInList(IteratorBase* iterator) const
+{
+  const_iterator it;
+  for (it = this->_objects.begin(); it != this->_objects.end(); ++it)
+    if (static_cast<Iterator*>(iterator)->it() == it)
+      return true;
+  printf("ObjectList:: checkIteratorInList:: ITERATOR NOT IN THE LIST '%s' (UN-SYNC SHOULD NOT HAPPEN!!)\n", this->name().c_str());
+  return false;
+}
+
+template <class T>
+bool ObjectList<T>::checkObjectInList(BaseObject* obj) const
+{
+  T* object = dynamic_cast<T*>(obj);
+  if (object != NULL)
+  {
+    printf("EXTREME BUG: Object does not exist anymore!! (or a bug in ObjectList)\n");
+    return false;;
+  }
+
+  const_iterator it;
+  for (it = this->_objects.begin(); it != this->_objects.end(); ++it)
+  {
+    if (*it == object)
+      return true;
+  }
+  printf("ObjectList:: checkObjectInList:: OBJECT NOT IN THE LIST '%s' (UN-SYNC SHOULD NOT HAPPEN!!)\n", this->name().c_str());
+  return false;
+}
+
+
 #endif /* _OBJECT_LIST_H */
Index: branches/new_class_id/src/lib/sound/sound_buffer.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9806)
+++ branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9807)
@@ -28,5 +28,5 @@
       : data(new SoundBufferData)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
+//     this->registerObject(this, SoundBuffer::_objectList);
   }
   /**
@@ -37,5 +37,5 @@
       : data(new SoundBufferData)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
+//     this->registerObject(this, SoundBuffer::_objectList);
     this->load(fileName);
   }
@@ -44,5 +44,5 @@
       : data(buffer.data)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
+//     this->registerObject(this, SoundBuffer::_objectList);
   }
 
@@ -50,10 +50,9 @@
       : data(dataPointer)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
+//     this->registerObject(this, SoundBuffer::_objectList);
   };
 
   SoundBuffer::~SoundBuffer()
   {
-    printf("Deleting Object of type SoundBuffer\n");
   }
 
