Index: /orxonox/trunk/src/util/fast_factory.cc
===================================================================
--- /orxonox/trunk/src/util/fast_factory.cc	(revision 4940)
+++ /orxonox/trunk/src/util/fast_factory.cc	(revision 4941)
@@ -178,5 +178,5 @@
   else
   {
-    FastObjectMember* tmpC = deadList;
+    FastObjectMember* tmpC = this->deadList;
     this->deadList = this->deadList->next;
 
Index: /orxonox/trunk/src/util/fast_factory.h
===================================================================
--- /orxonox/trunk/src/util/fast_factory.h	(revision 4940)
+++ /orxonox/trunk/src/util/fast_factory.h	(revision 4941)
@@ -23,18 +23,12 @@
 #include "base_object.h"
 
-
-// FORWARD DECLARATION //
-class GarbageCollector;
-template<class T>
-class tList;
-
 /**
- * Creates a FastFactory to a Loadable FastFactory.
+ * Creates a FastFactory to a Createable FastFactory.
  */
-//#define CREATE_FAST_FACTORY(CLASS_NAME, CLASS_ID) \
-//tFastFactory<CLASS_NAME>* global_##CLASS_NAME##_FastFactory = new tFastFactory<CLASS_NAME>(#CLASS_NAME, CLASS_ID)
+#define CREATE_FAST_FACTORY(CLASS_NAME, CLASS_ID) \
+  tFastFactory<CLASS_NAME>* global_##CLASS_NAME##_FastFactory = tFastFactory<CLASS_NAME>::getFastFactory(CLASS_ID, #CLASS_NAME)
 
 //! A struct, that holds Lists of Objects of a certain type.
-struct FastObjectMember
+typedef struct FastObjectMember
   {
     BaseObject*          objectPointer;      //!< Pointer to the Object Stored in this Class (if it is the DeadList, else it is bork)
@@ -65,6 +59,4 @@
 
     void prepare(unsigned int count);
-    // retrival functions for fast Ineraction
-    //FastFactory* getFastFactory(ClassID classID);
 
     static void flushAll(bool hardFLUSH = false);
@@ -110,4 +102,6 @@
     FastFactory*          next;                 //!< pointer to the next FastFactory.
   };
+
+
 
 /**
@@ -157,5 +151,4 @@
 }
 
-
 /**
  * fabricates an Object of Class T, that corresponds to classID.
Index: /orxonox/trunk/src/util/garbage_collector.cc
===================================================================
--- /orxonox/trunk/src/util/garbage_collector.cc	(revision 4940)
+++ /orxonox/trunk/src/util/garbage_collector.cc	(revision 4941)
@@ -37,4 +37,7 @@
    this->setClassID(CL_GARBAGE_COLLECTOR, "GarbageCollector");
    this->setName("GarbageCollector");
+
+   this->collectedObjects = NULL;
+   this->unusedContainers = NULL;
 
    this->time = 0;
@@ -81,4 +84,28 @@
 
 /**
+ * collect an Object, that should be scheduled for clearing.
+ * @param object the Object to schedule.
+ */
+void GarbageCollector::collect(BaseObject* object)
+{
+  printf("TEST\n");
+  State::getWorldEntityList()->remove(dynamic_cast<WorldEntity*>(object));
+  FastObjectMember* tmpC;
+  if (unlikely(this->unusedContainers == NULL))
+  {
+    tmpC = new FastObjectMember;
+  }
+  else
+  {
+    tmpC = this->unusedContainers;
+    this->unusedContainers = this->unusedContainers->next;
+  }
+
+  tmpC->next = this->collectedObjects;
+  tmpC->objectPointer = object;
+  this->collectedObjects = tmpC;
+}
+
+/**
  *  this ticks the GarbageCollector to give it the time pulse
  * @param time: the time passed since last tick
@@ -92,46 +119,74 @@
 
 
+void GarbageCollector::update()
+{
+  if (this->time < this->delay)
+  {
+    return;
+  }
+  if (this->collectedObjects == NULL)
+    return;
+  else
+  {
+    FastObjectMember* tmpC = this->collectedObjects;
+    FastObjectMember* moveC;
+    while (tmpC != NULL)
+    {
+      WorldEntity* entity = dynamic_cast<WorldEntity*>(tmpC->objectPointer);
+      //State::getWorldEntityList()->remove(entity);
+      entity->remove();
+      FastFactory::kill(entity, true);
+
+      moveC = tmpC->next;
+      tmpC->next = this->unusedContainers;
+      this->unusedContainers = tmpC;
+      tmpC = moveC;
+    }
+    this->collectedObjects = NULL;
+  }
+}
+
 /**
  *  this updated the gargabe collection, if the time is ready
 */
-void GarbageCollector::update()
-{
-  if( this->time < this->delay)
-    return;
-  /* garbage collect */
-  PRINTF(3)("=============================\n");
-  PRINTF(3)("Processing Garbage Collection\n");
-  PRINTF(3)("=============================\n");
-  int counter = 0;
-
-  tList<WorldEntity>* list = State::getWorldEntityList();
-
-  tIterator<WorldEntity>* iterator = list->getIterator();
-  WorldEntity* entity = iterator->nextElement();
-  while( entity != NULL)
-    {
-      if( entity->isFinalized())
-        {
-          PRINTF(4)("= finalizing object\n");
-          ++counter;
-
-          /* first remove out of entity list */
-          list->remove(entity);
-          /* second remove out of pnode tree */
-          entity->remove();
-          /* then finaly delete reference */
-          //delete entity;
-          //FastFactory::kill();
-          //ObjectManager::getInstance()->addToDeadList(entity->getClassID() & CL_MASK_LOWLEVEL_CLASS, entity);
-        }
-      entity = iterator->nextElement();
-    }
-
-  PRINTF(3)("= collected %i unused objects\n", counter);
-  PRINTF(3)("=============================\n");
-
-  //ObjectManager::getInstance()->debug();
-
-  /* reset time to count again up to this->delay */
-  this->time = 0;
-}
+// void GarbageCollector::update()
+// {
+//   if( this->time < this->delay)
+//     return;
+//   /* garbage collect */
+//   PRINTF(3)("=============================\n");
+//   PRINTF(3)("Processing Garbage Collection\n");
+//   PRINTF(3)("=============================\n");
+//   int counter = 0;
+//
+//   tList<WorldEntity>* list = State::getWorldEntityList();
+//
+//   tIterator<WorldEntity>* iterator = list->getIterator();
+//   WorldEntity* entity = iterator->nextElement();
+//   while( entity != NULL)
+//     {
+//       if( entity->isFinalized())
+//         {
+//           PRINTF(4)("= finalizing object\n");
+//           ++counter;
+//
+//           /* first remove out of entity list */
+//           list->remove(entity);
+//           /* second remove out of pnode tree */
+//           entity->remove();
+//           /* then finaly delete reference */
+//           //delete entity;
+//           //FastFactory::kill();
+//           //ObjectManager::getInstance()->addToDeadList(entity->getClassID() & CL_MASK_LOWLEVEL_CLASS, entity);
+//         }
+//       entity = iterator->nextElement();
+//     }
+//
+//   PRINTF(3)("= collected %i unused objects\n", counter);
+//   PRINTF(3)("=============================\n");
+//
+//   //ObjectManager::getInstance()->debug();
+//
+//   /* reset time to count again up to this->delay */
+//   this->time = 0;
+// }
Index: /orxonox/trunk/src/util/garbage_collector.h
===================================================================
--- /orxonox/trunk/src/util/garbage_collector.h	(revision 4940)
+++ /orxonox/trunk/src/util/garbage_collector.h	(revision 4941)
@@ -1,10 +1,10 @@
 /*!
-    \file garbage_collector.h
-  *  Definition of the proto class template, used quickly start work
-    @todo Example: this shows how to use simply add a Marker that here has to be done something.
-
-    The Protoclass exists, to help you quikly getting the run for how to develop in orxonox.
-    It is an example for the CODING-CONVENTION, and a starting-point for every class.
-*/
+ * @file garbage_collector.h
+ * Definition of the proto class template, used quickly start work
+ * @todo Example: this shows how to use simply add a Marker that here has to be done something.
+ *
+ *  The Protoclass exists, to help you quikly getting the run for how to develop in orxonox.
+ *  It is an example for the CODING-CONVENTION, and a starting-point for every class.
+ */
 
 #ifndef _GARBAGE_COLLECTOR_H
@@ -13,4 +13,5 @@
 #include "base_object.h"
 
+#include "fast_factory.h"
 
 //! this class maintains the garbage collection.
@@ -30,4 +31,6 @@
   void forceCollection();
 
+  void collect(BaseObject* object);
+
   void tick(float time);
   void update();
@@ -38,5 +41,8 @@
  private:
   static GarbageCollector*    singletonRef;           //!< The reference to this class (singleton)
-  float                       delay;                  //!< this is the delay to wait until collection
+
+  FastObjectMember*           collectedObjects;       //!< A list of recently collected Objects, that want to be deleted.
+  FastObjectMember*           unusedContainers;       //!< A list of unused containers.
+  float                       delay;                  //!< this is the delay to wait until collection.
   float                       time;                   //!< the current time
 
Index: /orxonox/trunk/src/world_entities/weapons/projectile.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/projectile.cc	(revision 4940)
+++ /orxonox/trunk/src/world_entities/weapons/projectile.cc	(revision 4941)
@@ -24,4 +24,6 @@
 #include "model.h"
 #include "vector.h"
+
+#include "garbage_collector.h"
 
 using namespace std;
@@ -93,5 +95,6 @@
     PRINTF(5)("current life cycle is: %f\n", this->lifeCycle);
     PRINTF(5)("FINALIZE===========================\n");
-    this->finalize();
+    //this->finalize();
+    GarbageCollector::getInstance()->collect(this);
   }
 }
Index: /orxonox/trunk/src/world_entities/weapons/test_bullet.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/test_bullet.cc	(revision 4940)
+++ /orxonox/trunk/src/world_entities/weapons/test_bullet.cc	(revision 4941)
@@ -21,5 +21,5 @@
 #include "model.h"
 #include "vector.h"
-#include "object_manager.h"
+#include "garbage_collector.h"
 
 using namespace std;
@@ -68,5 +68,7 @@
       PRINTF(5)("current life cycle is: %f\n", this->lifeCycle);
       PRINTF(5)("FINALIZE===========================\n");
-      this->finalize();
+//      this->finalize();
+      GarbageCollector::getInstance()->collect(this);
+
     }
 }
