Index: orxonox/trunk/src/array.h
===================================================================
--- orxonox/trunk/src/array.h	(revision 2819)
+++ orxonox/trunk/src/array.h	(revision 2822)
@@ -6,5 +6,5 @@
 #include <GL/gl.h>
 #include <GL/glu.h>
-#include <fstream.h>
+#include <fstream>
 class Array
 {
Index: orxonox/trunk/src/list.h
===================================================================
--- orxonox/trunk/src/list.h	(revision 2819)
+++ orxonox/trunk/src/list.h	(revision 2822)
@@ -57,3 +57,155 @@
 };
 
+
+template<class T> class tList 
+{
+ private:
+  struct listElement
+  {
+    listElement* prev;
+    T* curr;
+    listElement* next;
+  };
+
+  Uint32 size;
+  listElement* first;
+  listElement* last;
+  listElement* currentEl;
+  
+ public:
+  tList ();
+  ~tList ();
+  
+
+  void add(WorldEntity* entity);
+  void remove(WorldEntity* entity);
+  void clear();
+  T* firstElement();
+  bool isEmpty();
+  int getSize();
+  T* enumerate();
+  T* nextElement();
+  T* toArray();
+  void debug();
+};
+
+
+template<class T>
+tList<T>::tList () 
+{
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+template<class T>
+tList<T>::~tList () 
+{}
+
+template<class T>
+void tList<T>::add(WorldEntity* entity)
+{
+  printf("tList<T>::add() \n");
+  listElement* el = new listElement;
+  el->prev = this->last;
+  el->curr = entity;
+  el->next = NULL;
+
+  this->last = el;
+
+  if(this->size == 0) this->first = el;
+  else el->prev->next = el;
+  this->size++;
+}
+
+
+template<class T>
+void tList<T>::remove(WorldEntity* entity)
+{
+  this->currentEl = this->first;
+  listElement* te;
+  while( this->currentEl != NULL)
+    {
+      if( this->currentEl->curr == entity)
+	{
+	  printf("tList<T>::remove() - object found\n");
+	  
+	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
+	  else this->currentEl->prev->next = this->currentEl->next;
+
+	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
+	  else this->currentEl->next->prev = this->currentEl->prev;
+
+	  te = this->currentEl->next;
+	  delete this->currentEl;
+	  this->currentEl = te;
+	  return;
+	}
+      this->currentEl = this->currentEl->next;
+    }
+}
+
+
+template<class T>
+void tList<T>::clear()
+{
+  printf("tList<T>::clear() - clearing all world objects, releasing mem\n");
+  this->currentEl = this->first;
+  while(this->currentEl != NULL)
+    {
+      listElement* le = this->currentEl->next;
+      delete this->currentEl->curr;
+      delete this->currentEl;
+      this->currentEl = le;
+    }
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+
+template<class T>
+T* tList<T>::firstElement()
+{
+  return this->first->curr;
+}
+
+
+template<class T>
+bool tList<T>::isEmpty()
+{
+  return (this->size==0)?true:false;
+}
+
+
+template<class T>
+int tList<T>::getSize()
+{
+  return this->size;
+}
+
+
+template<class T>
+T* tList<T>::enumerate()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->first;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::nextElement()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->currentEl->next;
+  if(this->currentEl == NULL) return NULL;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::toArray()
+{}
+
 #endif
Index: orxonox/trunk/src/material.h
===================================================================
--- orxonox/trunk/src/material.h	(revision 2819)
+++ orxonox/trunk/src/material.h	(revision 2822)
@@ -7,5 +7,5 @@
 #include <GL/glu.h>
 #include <stdlib.h>
-#include <fstream.h>
+#include <fstream>
 
 class Material
Index: orxonox/trunk/src/object.h
===================================================================
--- orxonox/trunk/src/object.h	(revision 2819)
+++ orxonox/trunk/src/object.h	(revision 2822)
@@ -8,4 +8,5 @@
 #include "material.h"
 #include <fstream.h>
+
 
 class Object
Index: orxonox/trunk/src/world.cc
===================================================================
--- orxonox/trunk/src/world.cc	(revision 2819)
+++ orxonox/trunk/src/world.cc	(revision 2822)
@@ -36,5 +36,5 @@
   this->worldName = name;
   this->debugWorldNr = -1;
-  this->entities = new List();
+  this->entities = new tList<WorldEntity>();
 }
 
@@ -43,5 +43,5 @@
   this->debugWorldNr = worldID;
   this->worldName = NULL;
-  this->entities = new List();
+  this->entities = new tList<WorldEntity>();
 }
 
@@ -134,5 +134,4 @@
 	    this->spawn(env, plc);
 
-	    this->entities->debug();
 	    break;
 	  }
@@ -331,13 +330,11 @@
   
   // draw entities
-  List *l;
   WorldEntity* entity;
   
-  l = entities; 
-  entity = l->enumerate();
+  entity = this->entities->enumerate();
   while( entity != NULL ) 
     { 
-      entity->draw();
-      entity = l->nextElement();
+      if( entity->bDraw ) entity->draw();
+      entity = this->entities->nextElement();
     }
   
@@ -502,5 +499,5 @@
       display();
   
-      for(int i = 0; i < 1000000; i++){}
+      //for(int i = 0; i < 1000000; i++){}
 
     }
Index: orxonox/trunk/src/world.h
===================================================================
--- orxonox/trunk/src/world.h	(revision 2819)
+++ orxonox/trunk/src/world.h	(revision 2822)
@@ -54,5 +54,5 @@
   void spawn(WorldEntity* entity, Placement* plc);
 
-  List* entities;
+  tList<WorldEntity>* entities;
   
   // base level data
Index: orxonox/trunk/src/world_entity.cc
===================================================================
--- orxonox/trunk/src/world_entity.cc	(revision 2819)
+++ orxonox/trunk/src/world_entity.cc	(revision 2822)
@@ -36,6 +36,7 @@
 WorldEntity::WorldEntity (bool isFree) : bFree(isFree)
 {
-	collisioncluster = NULL;
-	owner = NULL;
+  this->bDraw = true;
+  collisioncluster = NULL;
+  owner = NULL;
 }
 
@@ -45,28 +46,28 @@
 WorldEntity::~WorldEntity ()
 {
-	if( collisioncluster != NULL) delete collisioncluster;
+  if( collisioncluster != NULL) delete collisioncluster;
 }
 
 /**
-	\brief get the Location of the WorldEntity
-	\return a pointer to location
+   \brief get the Location of the WorldEntity
+   \return a pointer to location
 */
 Location* WorldEntity::get_location ()
 {
-	return &loc;
+  return &loc;
 }
 
 /**
-	\brief get the Placement of the WorldEntity
-	\return a pointer to placement
+   \brief get the Placement of the WorldEntity
+   \return a pointer to placement
 */
 Placement* WorldEntity::get_placement ()
 {
-	return &place;
+  return &place;
 }
 
 /**
-	\brief query whether the WorldEntity in question is free
-	\return true if the WorldEntity is free or false if it isn't
+   \brief query whether the WorldEntity in question is free
+   \return true if the WorldEntity is free or false if it isn't
 */
 bool WorldEntity::isFree ()
@@ -76,21 +77,21 @@
 
 /**
-	\brief set the WorldEntity's collision hull
-	\param newhull: a pointer to a completely assembled CollisionCluster
-	
-	Any previously assigned collision hull will be deleted on reassignment
+   \brief set the WorldEntity's collision hull
+   \param newhull: a pointer to a completely assembled CollisionCluster
+   
+   Any previously assigned collision hull will be deleted on reassignment
 */
 void WorldEntity::set_collision (CollisionCluster* newhull)
 {
-	if( newhull == NULL) return;
-	if( collisioncluster != NULL) delete collisioncluster;
-	collisioncluster = newhull;
+  if( newhull == NULL) return;
+  if( collisioncluster != NULL) delete collisioncluster;
+  collisioncluster = newhull;
 }
 
 /**
-	\brief this method is called every frame
-	\param time: the time in seconds that has passed since the last tick
-	
-	Handle all stuff that should update with time inside this method (movement, animation, etc.)
+   \brief this method is called every frame
+   \param time: the time in seconds that has passed since the last tick
+   
+   Handle all stuff that should update with time inside this method (movement, animation, etc.)
 */
 void WorldEntity::tick(float time) 
@@ -100,5 +101,5 @@
 /**
    \brief the entity is drawn onto the screen with this function
-
+   
    This is a central function of an entity: call it to let the entity painted to the screen. Just override this function with whatever you want to be drawn.
 */
@@ -108,10 +109,10 @@
 
 /**
-	\brief this function is called, when two entities collide
-	\param other: the world entity with whom it collides
-	\param ownhitflags: flags to the CollisionCluster subsections that registered an impact
-	\param otherhitflags: flags to the CollisionCluster subsections of the other entity that registered an impact
+   \brief this function is called, when two entities collide
+   \param other: the world entity with whom it collides
+   \param ownhitflags: flags to the CollisionCluster subsections that registered an impact
+   \param otherhitflags: flags to the CollisionCluster subsections of the other entity that registered an impact
 
-	Implement behaviour like damage application or other miscellaneous collision stuff in this function
+   Implement behaviour like damage application or other miscellaneous collision stuff in this function
 */
 void WorldEntity::collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags) {}
@@ -135,26 +136,26 @@
 
 /**
-	\brief basic initialisation for bound Entities
+   \brief basic initialisation for bound Entities
 */
 void WorldEntity::init( Location* spawnloc, WorldEntity* spawnowner)
 {
-	loc = *spawnloc;
-	owner = spawnowner;
+  loc = *spawnloc;
+  owner = spawnowner;
 }
 
 /**
-	\brief basic initialisation for free Entities
+   \brief basic initialisation for free Entities
 */
 void WorldEntity::init( Placement* spawnplc, WorldEntity* spawnowner)
 {
-	place = *spawnplc;
-	owner = spawnowner;
+  place = *spawnplc;
+  owner = spawnowner;
 }
 
 /**
-	\brief this is called immediately after the Entity has been constructed and initialized
-	
-	Put any initialisation code that requires knowledge of location (placement if the Entity is free) and owner of the entity here.
-	DO NOT place such code in the constructor, those variables are set AFTER the entity is constucted.
+   \brief this is called immediately after the Entity has been constructed and initialized
+   
+   Put any initialisation code that requires knowledge of location (placement if the Entity is free) and owner of the entity here.
+   DO NOT place such code in the constructor, those variables are set AFTER the entity is constucted.
 */
 void WorldEntity::post_spawn ()
@@ -163,9 +164,9 @@
 
 /**
-	\brief this handles incoming command messages
-	\param cmd: a pointer to the incoming Command structure
-	
-	Put all code that handles Command messages here, this will mainly be called by the assigned CommandNode but can also be used
-	to send commands from one WorldEntity to another.
+   \brief this handles incoming command messages
+   \param cmd: a pointer to the incoming Command structure
+   
+   Put all code that handles Command messages here, this will mainly be called by the assigned CommandNode but can also be used
+   to send commands from one WorldEntity to another.
 */
 void WorldEntity::command (Command* cmd)
@@ -174,9 +175,9 @@
 
 /**
-	\brief this is called by the local Camera to determine the point it should look at on the WorldEntity
-	\param locbuf: a pointer to the buffer to fill with a location to look at
+   \brief this is called by the local Camera to determine the point it should look at on the WorldEntity
+   \param locbuf: a pointer to the buffer to fill with a location to look at
 	
-	You may put any Location you want into locbuf, the Camera will determine via the corresponding Track how
-	to look at the location you return with this.
+   You may put any Location you want into locbuf, the Camera will determine via the corresponding Track how
+   to look at the location you return with this.
 */
 void WorldEntity::get_lookat (Location* locbuf)
@@ -185,8 +186,8 @@
 
 /**
-	\brief this method is called by the world if the WorldEntity leaves valid gamespace
-	
-	For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
-	place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
+   \brief this method is called by the world if the WorldEntity leaves valid gamespace
+   
+   For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
+   place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
 */
 void WorldEntity::left_world ()
