Index: branches/new_class_id/src/util/animation/animation.cc
===================================================================
--- branches/new_class_id/src/util/animation/animation.cc	(revision 9704)
+++ branches/new_class_id/src/util/animation/animation.cc	(revision 9705)
@@ -20,4 +20,5 @@
 #include "animation_player.h"
 
+NewObjectListDefinition(Animation);
 /**
  *  creates a new Animation
@@ -27,5 +28,5 @@
 Animation::Animation()
 {
-  this->setClassID(CL_ANIMATION, "Animation");
+  this->registerObject(this, Animation::_objectList);
 
   // initialize a beginning KeyFrame, that will be deleted afterwards
Index: branches/new_class_id/src/util/animation/animation.h
===================================================================
--- branches/new_class_id/src/util/animation/animation.h	(revision 9704)
+++ branches/new_class_id/src/util/animation/animation.h	(revision 9705)
@@ -73,5 +73,6 @@
 class Animation : public BaseObject
 {
- public:
+  NewObjectListDeclaration(Animation);
+public:
   virtual ~Animation();
 
@@ -95,10 +96,10 @@
   inline bool ifDelete() { return bDelete; };
 
- protected:
+protected:
   Animation();
 
   void handleInfinity();
 
- protected:
+protected:
   // variables
   float                 localTime;              //!< The Time passed since the beginning of the currentKeyFrame.
@@ -119,9 +120,9 @@
 class aTest
 {
- public:
+public:
   inline aTest() { last = 0.0;}
   /** a little debug information to show the results of this class @param f new value */
   inline void littleDebug(float f) {  diff = f - last; printf("f=%f, diff=%f\n", f,diff); last = f;}
- private:
+private:
   float     diff;           //!< difference from the last value
   float     last;           //!< the last calculated value
Index: branches/new_class_id/src/util/animation/animation_player.cc
===================================================================
--- branches/new_class_id/src/util/animation/animation_player.cc	(revision 9704)
+++ branches/new_class_id/src/util/animation/animation_player.cc	(revision 9705)
@@ -22,5 +22,5 @@
 
 
-
+NewObjectListDefinition(AnimationPlayer);
 /**
  *  standard constructor
@@ -28,5 +28,5 @@
 AnimationPlayer::AnimationPlayer ()
 {
-  this->setClassID(CL_ANIMATION_PLAYER, "AnimationPlayer");
+  this->registerObject(this, AnimationPlayer::_objectList);
   this->setName("AnimationPlayer");
 
Index: branches/new_class_id/src/util/animation/animation_player.h
===================================================================
--- branches/new_class_id/src/util/animation/animation_player.h	(revision 9704)
+++ branches/new_class_id/src/util/animation/animation_player.h	(revision 9705)
@@ -28,7 +28,9 @@
    eveything else will be done by the AnimationPlayer itself.\n
 */
-class AnimationPlayer : public BaseObject {
+class AnimationPlayer : public BaseObject
+{
+  NewObjectListDeclaration(AnimationPlayer);
 
- public:
+public:
   /** @returns a Pointer to the only object of this Class */
   inline static AnimationPlayer* getInstance() { if (!singletonRef) singletonRef = new AnimationPlayer();  return singletonRef; };
@@ -50,5 +52,5 @@
   void debug();
 
- private:
+private:
   /* singleton */
   AnimationPlayer();
Index: branches/new_class_id/src/util/kill_target.cc
===================================================================
--- branches/new_class_id/src/util/kill_target.cc	(revision 9704)
+++ branches/new_class_id/src/util/kill_target.cc	(revision 9705)
@@ -22,6 +22,7 @@
 
 
-
+#include "class_id.h"
 CREATE_FACTORY(KillTarget, CL_KILL_TARGET);
+NewObjectListDefinitionID(KillTarget, CL_KILL_TARGET);
 
 
@@ -32,5 +33,5 @@
 KillTarget::KillTarget (const TiXmlElement* root)
         : MissionGoal(root) {
-    this->setClassID(CL_KILL_TARGET, "KillTarget");
+  this->registerObject(this, KillTarget::_objectList);
 
     if( root != NULL)
Index: branches/new_class_id/src/util/kill_target.h
===================================================================
--- branches/new_class_id/src/util/kill_target.h	(revision 9704)
+++ branches/new_class_id/src/util/kill_target.h	(revision 9705)
@@ -17,4 +17,5 @@
 class KillTarget : public MissionGoal
 {
+  NewObjectListDeclaration(KillTarget);
 
   public:
Index: branches/new_class_id/src/util/mission_goal.cc
===================================================================
--- branches/new_class_id/src/util/mission_goal.cc	(revision 9704)
+++ branches/new_class_id/src/util/mission_goal.cc	(revision 9705)
@@ -24,5 +24,5 @@
 
 
-
+NewObjectListDefinition(MissionGoal);
 /**
  * standard constructor
@@ -31,5 +31,5 @@
 MissionGoal::MissionGoal (const TiXmlElement* root)
 {
-   this->setClassID(CL_MISSION_GOAL, "MissionGoal");
+  this->registerObject(this, MissionGoal::_objectList);
 
    this->missionState = MS_PASSIVE;
Index: branches/new_class_id/src/util/mission_goal.h
===================================================================
--- branches/new_class_id/src/util/mission_goal.h	(revision 9704)
+++ branches/new_class_id/src/util/mission_goal.h	(revision 9705)
@@ -26,4 +26,5 @@
 //! A class representing a mission goal
 class MissionGoal : public BaseObject {
+  NewObjectListDeclaration(MissionGoal);
 
  public:
Index: branches/new_class_id/src/util/multiplayer_team_deathmatch.cc
===================================================================
--- branches/new_class_id/src/util/multiplayer_team_deathmatch.cc	(revision 9704)
+++ branches/new_class_id/src/util/multiplayer_team_deathmatch.cc	(revision 9705)
@@ -56,5 +56,5 @@
  */
 MultiplayerTeamDeathmatch::MultiplayerTeamDeathmatch(const TiXmlElement* root)
-  : NetworkGameRules(root)
+    : NetworkGameRules(root)
 {
   this->registerObject(this, MultiplayerTeamDeathmatch::_objectList);
@@ -111,11 +111,11 @@
 
   LoadParam(root, "death-penalty-timeout", this, MultiplayerTeamDeathmatch, setDeathPenaltyTimeout)
-      .describe("sets the time in seconds a player has to wait for respawn");
+  .describe("sets the time in seconds a player has to wait for respawn");
 
   LoadParam(root, "max-kills", this, MultiplayerTeamDeathmatch, setMaxKills)
-      .describe("sets the maximal kills for winning condition");
+  .describe("sets the maximal kills for winning condition");
 
   LoadParam(root, "num-teams", this, MultiplayerTeamDeathmatch, setNumTeams)
-      .describe("sets number of teams");
+  .describe("sets number of teams");
 
 }
@@ -189,8 +189,8 @@
   }
 
-//   if( PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() ) )
-//   {
-//     PRINTF(0)("prefered team id: %i, noteam: %i\n", PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )->getPreferedTeamId(), TEAM_NOTEAM);
-//   }
+  //   if( PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() ) )
+  //   {
+  //     PRINTF(0)("prefered team id: %i, noteam: %i\n", PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )->getPreferedTeamId(), TEAM_NOTEAM);
+  //   }
 
   // check if the menu should be removed and the game state should be entered
@@ -270,5 +270,4 @@
   if( unlikely( this->bLocalPlayerDead))
   {
-
   }
 }
@@ -305,8 +304,8 @@
 {
   if ( team == TEAM_NOTEAM || team == TEAM_SPECTATOR )
-    return CL_SPECTATOR;
+    return NewObjectListBase::retrieveIdentity("Spectator");
 
   if ( team == 0 || team == 1 )
-    return CL_TURBINE_HOVER;
+    return NewObjectListBase::retrieveIdentity("TurbineHover");
 
   assert( false );
@@ -314,8 +313,8 @@
 
 
-std::string MultiplayerTeamDeathmatch::getPlayableModelFileName( int userId, int team, ClassID classId )
+std::string MultiplayerTeamDeathmatch::getPlayableModelFileName( int userId, int team, const NewClassID& classId )
 {
   if (classId == CL_TURBINE_HOVER)
-   return "models/ships/hoverglider_mainbody.obj";
+    return "models/ships/hoverglider_mainbody.obj";
   if ( team == 0 )
     return "models/creatures/doom_guy.md2";
@@ -326,5 +325,5 @@
 }
 
-std::string MultiplayerTeamDeathmatch::getPlayableModelTextureFileName( int userId, int team, ClassID classId )
+std::string MultiplayerTeamDeathmatch::getPlayableModelTextureFileName( int userId, int team, const NewClassID& classId )
 {
   if ( classId == CL_FPS_PLAYER )
@@ -339,7 +338,7 @@
 }
 
-float MultiplayerTeamDeathmatch::getPlayableScale( int userId, int team, ClassID classId )
-{
-  if ( classId == CL_FPS_PLAYER )
+float MultiplayerTeamDeathmatch::getPlayableScale( int userId, int team, const NewClassID& classId )
+{
+  if ( classId == NewObjectListBase::retrieveIdentity(CL_FPS_PLAYER))
   {
     return 10.0f;
@@ -359,13 +358,9 @@
     teamScore[i] = 0;
 
-
-  const std::list<BaseObject*> * list = ClassList::getList( CL_PLAYER_STATS );
-
-  if ( !list )
-    return;
-
-  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-  {
-    PlayerStats & stats = *dynamic_cast<PlayerStats*>(*it);
+  for (NewObjectList<PlayerStats>::const_iterator it = PlayerStats::objectList().begin();
+       it != PlayerStats::objectList().end();
+       ++it)
+  {
+    PlayerStats & stats = *(*it);
 
     if ( stats.getTeamId() >= 0 )
@@ -387,12 +382,9 @@
     playersInTeam[i] = 0;
 
-  const std::list<BaseObject*> * list = ClassList::getList( CL_PLAYER_STATS );
-
-  if ( !list )
-    return 0;
-
-  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-  {
-    PlayerStats & stats = *dynamic_cast<PlayerStats*>(*it);
+  for (NewObjectList<PlayerStats>::const_iterator it = PlayerStats::objectList().begin();
+       it != PlayerStats::objectList().end();
+       ++it)
+  {
+    PlayerStats & stats = *(*it);
 
     if ( stats.getTeamId() >= 0 )
@@ -450,13 +442,9 @@
 void MultiplayerTeamDeathmatch::handleTeamChanges( )
 {
-  const std::list<BaseObject*> * list = ClassList::getList( CL_PLAYER_STATS );
-
-  if ( !list )
-    return;
-
-  //first server players with choices
-  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-  {
-    PlayerStats & stats = *dynamic_cast<PlayerStats*>(*it);
+  for (NewObjectList<PlayerStats>::const_iterator it = PlayerStats::objectList().begin();
+       it != PlayerStats::objectList().end();
+       ++it)
+  {
+    PlayerStats & stats = *(*it);
 
     if ( stats.getTeamId() != stats.getPreferedTeamId() )
@@ -470,7 +458,9 @@
 
   //now serve player who want join a random team
-  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-  {
-    PlayerStats & stats = *dynamic_cast<PlayerStats*>(*it);
+  for (NewObjectList<PlayerStats>::const_iterator it = PlayerStats::objectList().begin();
+       it != PlayerStats::objectList().end();
+       ++it)
+  {
+    PlayerStats & stats = *(*it);
 
     if ( stats.getTeamId() != stats.getPreferedTeamId() )
@@ -501,5 +491,5 @@
 
 
-  ClassID       playableClassId  = getPlayableClassId( userId, stats.getPreferedTeamId() );
+  NewClassID       playableClassId  = getPlayableClassId( userId, stats.getPreferedTeamId() );
   std::string   playableModel    = getPlayableModelFileName( userId, stats.getPreferedTeamId(), playableClassId );
   std::string   playableTexture  = getPlayableModelTextureFileName( userId, stats.getPreferedTeamId(), playableClassId );
@@ -584,5 +574,6 @@
     if ( event.bPressed )
       this->bShowTeamChange = true;
-  } else if ( event.type == SDLK_F1 )
+  }
+  else if ( event.type == SDLK_F1 )
   {
     if ( this->statsBox && !this->bLocalPlayerDead && event.bPressed )
@@ -680,9 +671,9 @@
 void MultiplayerTeamDeathmatch::hideStats( )
 {
-    if ( statsBox )
-    {
-      delete statsBox;
-      statsBox = NULL;
-    }
+  if ( statsBox )
+  {
+    delete statsBox;
+    statsBox = NULL;
+  }
 }
 
@@ -819,13 +810,12 @@
 void MultiplayerTeamDeathmatch::respawnPlayable( Playable * playable, int teamId, float delay )
 {
-  const std::list<BaseObject*> * list = ClassList::getList( CL_SPAWNING_POINT );
-
-  assert( list );
 
   std::vector<SpawningPoint*> spList;
 
-  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-  {
-    SpawningPoint * sp = dynamic_cast<SpawningPoint*>(*it);
+  for (NewObjectList<SpawningPoint>::const_iterator it = SpawningPoint::objectList().begin();
+       it != SpawningPoint::objectList().end();
+       ++it)
+  {
+    SpawningPoint * sp = (*it);
 
     if ( sp->getTeamId() == teamId )
@@ -835,7 +825,9 @@
   if ( spList.size() == 0 )
   {
-    for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
-    {
-      SpawningPoint * sp = dynamic_cast<SpawningPoint*>(*it);
+    for (NewObjectList<SpawningPoint>::const_iterator it = SpawningPoint::objectList().begin();
+	 it != SpawningPoint::objectList().end();
+	 ++it)
+    {
+      SpawningPoint * sp = (*it);
 
       if ( sp->getTeamId() < 0 )
Index: branches/new_class_id/src/util/singleplayer_shootemup.cc
===================================================================
--- branches/new_class_id/src/util/singleplayer_shootemup.cc	(revision 9704)
+++ branches/new_class_id/src/util/singleplayer_shootemup.cc	(revision 9705)
@@ -25,8 +25,7 @@
 
 
-
+#include "class_id.h"
 CREATE_FACTORY(SingleplayerShootemup, CL_SINGLEPLAYER_SHOOTEMUP);
-
-
+NewObjectListDefinitionID(SingleplayerShootemup, CL_SINGLEPLAYER_SHOOTEMUP);
 
 /**
@@ -36,5 +35,5 @@
   : GameRules(root)
 {
-  this->setClassID(CL_SINGLEPLAYER_SHOOTEMUP, "SingleplayerShootemup");
+  this->registerObject(this, SingleplayerShootemup::_objectList);
 
   if( root != NULL)
Index: branches/new_class_id/src/util/singleplayer_shootemup.h
===================================================================
--- branches/new_class_id/src/util/singleplayer_shootemup.h	(revision 9704)
+++ branches/new_class_id/src/util/singleplayer_shootemup.h	(revision 9705)
@@ -18,5 +18,5 @@
 class SingleplayerShootemup : public GameRules
 {
-
+  NewObjectListDeclaration(SingleplayerShootemup);
   public:
     SingleplayerShootemup(const TiXmlElement* root = NULL);
Index: branches/new_class_id/src/util/track/pilot_node.cc
===================================================================
--- branches/new_class_id/src/util/track/pilot_node.cc	(revision 9704)
+++ branches/new_class_id/src/util/track/pilot_node.cc	(revision 9705)
@@ -24,4 +24,5 @@
 
 
+NewObjectListDefinition(PilotNode);
 /**
  *  standard constructor
@@ -29,5 +30,5 @@
 PilotNode::PilotNode ()
 {
-   this->setClassID(CL_PILOT_PARENT, "PilotNode");
+  this->registerObject(this, PilotNode::_objectList);
    this->setName("PilotNode");
 
Index: branches/new_class_id/src/util/track/pilot_node.h
===================================================================
--- branches/new_class_id/src/util/track/pilot_node.h	(revision 9704)
+++ branches/new_class_id/src/util/track/pilot_node.h	(revision 9705)
@@ -15,4 +15,5 @@
 //! The PilotNode is a node that enables the is driven by the Mouse
 class PilotNode : public WorldEntity, public EventListener {
+  NewObjectListDeclaration(PilotNode);
 
  public:
