Index: trunk/src/world_entities/projectiles/bomb.cc
===================================================================
--- trunk/src/world_entities/projectiles/bomb.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/bomb.cc	(revision 9869)
@@ -20,10 +20,12 @@
 #include "primitive_model.h"
 
-#include "dot_emitter.h"
-#include "particle_system.h"
+#include "particles/dot_emitter.h"
+#include "particles/particle_system.h"
 
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(Bomb, CL_BOMB);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(Bomb, CL_BOMB);
+CREATE_FAST_FACTORY_STATIC(Bomb);
 
 /**
@@ -67,5 +69,5 @@
 void Bomb::init()
 {
-  this->setClassID(CL_BOMB, "Bomb");
+  this->registerObject(this, Bomb::_objectList);
 
 
@@ -173,4 +175,5 @@
 }
 
+
 void Bomb::deactivate()
 {
@@ -182,10 +185,11 @@
 void Bomb::detonate(float size)
 {
-  ObjectManager::EntityList detonationList;
-  ObjectManager::distanceFromObject(detonationList, *this, size, CL_NPC);
+  /// FIXME
+/*  ObjectManager::EntityList detonationList;
+  ObjectManager::distanceFromObject(detonationList, *this, size, NPC::objectList());
     while( !detonationList.empty() )
     {
       detonationList.front()->collidesWith(this, Vector(0,0,0));
       detonationList.pop_front();
-    }
+    }*/
 }
Index: trunk/src/world_entities/projectiles/bomb.h
===================================================================
--- trunk/src/world_entities/projectiles/bomb.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/bomb.h	(revision 9869)
@@ -17,5 +17,5 @@
 class Bomb : public Projectile
 {
-
+  ObjectListDeclaration(Bomb);
  public:
   Bomb(const TiXmlElement* root = NULL);
Index: trunk/src/world_entities/projectiles/boomerang_projectile.cc
===================================================================
--- trunk/src/world_entities/projectiles/boomerang_projectile.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/boomerang_projectile.cc	(revision 9869)
@@ -20,12 +20,13 @@
 
 #include "state.h"
-#include "class_list.h"
-
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(BoomerangProjectile, CL_BOOMERANG_PROJECTILE);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(BoomerangProjectile, CL_BOOMERANG_PROJECTILE);
+CREATE_FAST_FACTORY_STATIC(BoomerangProjectile);
 
 /**
@@ -34,5 +35,5 @@
 BoomerangProjectile::BoomerangProjectile () : Projectile()
 {
-  this->setClassID(CL_BOOMERANG_PROJECTILE, "BoomerangProjectile");
+  this->registerObject(this, BoomerangProjectile::_objectList);
 
   this->loadModel("models/projectiles/orx-rocket.obj", 2.0);
@@ -60,13 +61,13 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (BoomerangProjectile::trailParticles != NULL && ClassList::getList(CL_BOOMERANG_PROJECTILE)->size() <= 1)
-  {
-    if (ClassList::exists(BoomerangProjectile::trailParticles, CL_PARTICLE_SYSTEM))
+  if (BoomerangProjectile::trailParticles != NULL && BoomerangProjectile::objectList().size() <= 1)
+  {
+    if (ParticleSystem::objectList().exists(BoomerangProjectile::trailParticles))
       delete BoomerangProjectile::trailParticles;
     BoomerangProjectile::trailParticles = NULL;
   }
-  if (BoomerangProjectile::explosionParticles != NULL && ClassList::getList(CL_BOOMERANG_PROJECTILE)->size() <= 1)
-  {
-    if (ClassList::exists(BoomerangProjectile::explosionParticles, CL_PARTICLE_SYSTEM))
+  if (BoomerangProjectile::explosionParticles != NULL && BoomerangProjectile::objectList().size() <= 1)
+  {
+    if (ParticleSystem::objectList().exists(BoomerangProjectile::explosionParticles))
       delete BoomerangProjectile::explosionParticles;
     BoomerangProjectile::explosionParticles = NULL;
Index: trunk/src/world_entities/projectiles/boomerang_projectile.h
===================================================================
--- trunk/src/world_entities/projectiles/boomerang_projectile.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/boomerang_projectile.h	(revision 9869)
@@ -17,4 +17,5 @@
 class BoomerangProjectile : public Projectile
 {
+  ObjectListDeclaration(BoomerangProjectile);
   public:
     BoomerangProjectile ();
Index: trunk/src/world_entities/projectiles/guided_missile.cc
===================================================================
--- trunk/src/world_entities/projectiles/guided_missile.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/guided_missile.cc	(revision 9869)
@@ -19,12 +19,13 @@
 
 #include "state.h"
-#include "class_list.h"
-
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(GuidedMissile, CL_GUIDED_MISSILE);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(GuidedMissile, CL_GUIDED_MISSILE);
+CREATE_FAST_FACTORY_STATIC(GuidedMissile);
 
 /**
@@ -33,5 +34,5 @@
 GuidedMissile::GuidedMissile () : Projectile()
 {
-  this->setClassID(CL_GUIDED_MISSILE, "GuidedMissile");
+  this->registerObject(this, GuidedMissile::_objectList);
 
   this->loadModel("models/projectiles/orx-rocket.obj", 2.0);
@@ -59,13 +60,13 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (GuidedMissile::trailParticles != NULL && ClassList::getList(CL_GUIDED_MISSILE)->size() <= 1)
-  {
-    if (ClassList::exists(GuidedMissile::trailParticles, CL_PARTICLE_SYSTEM))
+  if (GuidedMissile::trailParticles != NULL && GuidedMissile::objectList().size() <= 1)
+  {
+    if (ParticleSystem::objectList().exists(GuidedMissile::trailParticles))
       delete GuidedMissile::trailParticles;
     GuidedMissile::trailParticles = NULL;
   }
-  if (GuidedMissile::explosionParticles != NULL && ClassList::getList(CL_GUIDED_MISSILE)->size() <= 1)
-  {
-    if (ClassList::exists(GuidedMissile::explosionParticles, CL_PARTICLE_SYSTEM))
+  if (GuidedMissile::explosionParticles != NULL && GuidedMissile::objectList().size() <= 1)
+  {
+    if (ParticleSystem::objectList().exists(GuidedMissile::explosionParticles))
       delete GuidedMissile::explosionParticles;
     GuidedMissile::explosionParticles = NULL;
Index: trunk/src/world_entities/projectiles/guided_missile.h
===================================================================
--- trunk/src/world_entities/projectiles/guided_missile.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/guided_missile.h	(revision 9869)
@@ -16,4 +16,5 @@
 class GuidedMissile : public Projectile
 {
+  ObjectListDeclaration(GuidedMissile);
   public:
     GuidedMissile ();
Index: trunk/src/world_entities/projectiles/hyperblast.cc
===================================================================
--- trunk/src/world_entities/projectiles/hyperblast.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/hyperblast.cc	(revision 9869)
@@ -19,12 +19,14 @@
 
 #include "state.h"
-#include "class_list.h"
 
-#include "box_emitter.h"
-#include "spark_particles.h"
+#include "particles/box_emitter.h"
+#include "particles/spark_particles.h"
 
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(Hyperblast, CL_HYPERBLAST);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(Hyperblast, CL_HYPERBLAST);
+CREATE_FAST_FACTORY_STATIC(Hyperblast);
+
 
 /**
@@ -33,5 +35,5 @@
 Hyperblast::Hyperblast () : Projectile()
 {
-  this->setClassID(CL_HYPERBLAST, "Hyperblast");
+  this->registerObject(this, Hyperblast::_objectList);
 
   this->loadModel("models/projectiles/hyperblast.obj", 5);
@@ -55,5 +57,5 @@
 {
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (Hyperblast::explosionParticles != NULL && ClassList::getList(CL_HYPERBLAST)->size() <= 1)
+  if (Hyperblast::explosionParticles != NULL && Hyperblast::objectList().size() <= 1)
   {
     Hyperblast::explosionParticles = NULL;
Index: trunk/src/world_entities/projectiles/hyperblast.h
===================================================================
--- trunk/src/world_entities/projectiles/hyperblast.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/hyperblast.h	(revision 9869)
@@ -17,4 +17,5 @@
 class Hyperblast : public Projectile
 {
+  ObjectListDeclaration(Hyperblast);
   public:
     Hyperblast ();
Index: trunk/src/world_entities/projectiles/laser.cc
===================================================================
--- trunk/src/world_entities/projectiles/laser.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/laser.cc	(revision 9869)
@@ -19,9 +19,8 @@
 
 #include "state.h"
-#include "class_list.h"
 #include "model.h"
 
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 
 #include <cassert>
@@ -29,6 +28,7 @@
 
 
-
-CREATE_FAST_FACTORY_STATIC(Laser, CL_LASER);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinition(Laser);
+CREATE_FAST_FACTORY_STATIC(Laser);
 
 /**
@@ -37,5 +37,5 @@
 Laser::Laser () : Projectile()
 {
-  this->setClassID(CL_LASER, "Laser");
+  this->registerObject(this, Laser::_objectList);
 
   this->loadModel("models/projectiles/laser.obj");
@@ -61,5 +61,5 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (Laser::explosionParticles != NULL && ClassList::getList(CL_LASER)->size() <= 1)
+  if (Laser::explosionParticles != NULL && Laser::objectList().size() <= 1)
   {
     //if (ClassList::exists(Laser::explosionParticles, CL_PARTICLE_SYSTEM))
Index: trunk/src/world_entities/projectiles/laser.h
===================================================================
--- trunk/src/world_entities/projectiles/laser.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/laser.h	(revision 9869)
@@ -17,4 +17,5 @@
 class Laser : public Projectile
 {
+  ObjectListDeclaration(Laser);
   public:
     Laser ();
Index: trunk/src/world_entities/projectiles/projectile.cc
===================================================================
--- trunk/src/world_entities/projectiles/projectile.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/projectile.cc	(revision 9869)
@@ -22,8 +22,9 @@
 #include "world_entities/weapons/weapon.h"
 #include "model.h"
-#include "util/loading/resource_manager.h"
+#include "sound/resource_sound_buffer.h"
 
 #include "debug.h"
 
+ObjectListDefinition(Projectile);
 
 /**
@@ -32,5 +33,5 @@
 Projectile::Projectile () : WorldEntity()
 {
-  this->setClassID(CL_PROJECTILE, "Projectile");
+  this->registerObject(this, Projectile::_objectList);
 
   this->lifeCycle = 0.0;
@@ -43,7 +44,4 @@
   this->setDamage(1.0f); // default damage of a projectile set to 100.0 damage points
 
-  this->explosionBuffer = NULL;
-  this->engineBuffer = NULL;
-
   //this->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
 }
@@ -55,8 +53,4 @@
 Projectile::~Projectile ()
 {
-  if (this->explosionBuffer != NULL)
-    ResourceManager::getInstance()->unload(this->explosionBuffer);
-  if (this->engineBuffer != NULL)
-    ResourceManager::getInstance()->unload(this->engineBuffer);
   /*
      do not delete the test projectModel, since it is pnode
@@ -69,21 +63,8 @@
 void Projectile::loadExplosionSound(const std::string& explosionSound)
 {
-  if (this->explosionBuffer != NULL)
-    ResourceManager::getInstance()->unload(this->explosionBuffer);
-
-  else if (!explosionSound.empty())
-  {
-    this->explosionBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load(explosionSound, WAV);
-    if (this->explosionBuffer != NULL)
-    {
-      PRINTF(4)("Loaded sound %s to Pickup: %s.\n", explosionSound.c_str(), this->getCName());
-    }
-    else
-    {
-      PRINTF(2)("Failed to load sound %s to explosion %s.\n.", explosionSound.c_str(), this->getCName());
-    }
-  }
+  if (!explosionSound.empty())
+    this->explosionBuffer = OrxSound::ResourceSoundBuffer(explosionSound);
   else
-    this->explosionBuffer = NULL;
+    this->explosionBuffer = OrxSound::SoundBuffer();
 }
 
@@ -91,21 +72,8 @@
 void Projectile::loadEngineSound(const std::string& engineSound)
 {
-  if (this->engineBuffer != NULL)
-    ResourceManager::getInstance()->unload(this->engineBuffer);
-
-  else if (!engineSound.empty())
-  {
-    this->engineBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load(engineSound, WAV);
-    if (this->engineBuffer != NULL)
-    {
-      PRINTF(4)("Loaded sound %s to Pickup: %s.\n", engineSound.c_str(), this->getCName());
-    }
-    else
-    {
-      PRINTF(2)("Failed to load sound %s to engine %s.\n.", engineSound.c_str(), this->getCName());
-    }
-  }
+  if (!engineSound.empty())
+    this->engineBuffer = OrxSound::ResourceSoundBuffer(engineSound);
   else
-    this->engineBuffer = NULL;
+    this->engineBuffer = OrxSound::SoundBuffer();
 }
 
@@ -139,5 +107,5 @@
   //Vector offsetVel =
   this->velocity = velocity;
- // offsetVel.normalize();
+  // offsetVel.normalize();
   //this->velocity += (offsetVel * 50.0);
 }
@@ -148,5 +116,5 @@
 {
   if (this->target == NULL)
-    this->target = new PNode(target, PNODE_PARENT_MODE_DEFAULT | PNODE_REPARENT_ON_PARENTS_REMOVE);
+    this->target = new PNode(target, PNODE_REPARENT_ON_PARENTS_REMOVE | PNODE_REPARENT_TO_NULL | PNODE_PROHIBIT_DELETE_WITH_PARENT);
   else
     this->target->setParent(target);
@@ -173,5 +141,5 @@
 void Projectile::destroy (WorldEntity* killer)
 {
-  if (this->explosionBuffer != NULL)
+  if (this->explosionBuffer.loaded())
     this->soundSource.play(this->explosionBuffer);
 }
Index: trunk/src/world_entities/projectiles/projectile.h
===================================================================
--- trunk/src/world_entities/projectiles/projectile.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/projectile.h	(revision 9869)
@@ -11,5 +11,5 @@
 
 #include "world_entity.h"
-#include "fast_factory.h"
+#include "loading/fast_factory.h"
 
 #include "sound_source.h"
@@ -18,4 +18,5 @@
 class Projectile : public WorldEntity
 {
+  ObjectListDeclaration(Projectile);
   public:
     Projectile ();
@@ -66,6 +67,6 @@
     OrxSound::SoundSource  soundSource;
   private:
-    OrxSound::SoundBuffer* explosionBuffer;
-    OrxSound::SoundBuffer* engineBuffer;
+    OrxSound::SoundBuffer  explosionBuffer;
+    OrxSound::SoundBuffer  engineBuffer;
 };
 
Index: trunk/src/world_entities/projectiles/rail_projectile.cc
===================================================================
--- trunk/src/world_entities/projectiles/rail_projectile.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/rail_projectile.cc	(revision 9869)
@@ -19,9 +19,8 @@
 
 #include "state.h"
-#include "class_list.h"
 #include "model.h"
 
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 
 #include <cassert>
@@ -29,6 +28,7 @@
 
 
-
-CREATE_FAST_FACTORY_STATIC(RailProjectile, CL_RAIL_PROJECTILE);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(RailProjectile, CL_RAIL_PROJECTILE);
+CREATE_FAST_FACTORY_STATIC(RailProjectile);
 
 /**
@@ -37,7 +37,7 @@
 RailProjectile::RailProjectile () : Projectile()
 {
-  this->setClassID(CL_RAIL_PROJECTILE, "RailProjectile");
+  this->registerObject(this, RailProjectile::_objectList);
 
-  this->loadModel("models/projectiles/laser_projectile.obj", 100);
+  this->loadModel("models/projectiles/laser.obj", 1);
 
   this->setMinEnergy(10);
@@ -61,5 +61,5 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (RailProjectile::explosionParticles != NULL && ClassList::getList(CL_RAIL_PROJECTILE)->size() <= 1)
+  if (RailProjectile::explosionParticles != NULL && RailProjectile::objectList().size() <= 1)
   {
     //if (ClassList::exists(RailProjectile::explosionParticles, CL_PARTICLE_SYSTEM))
Index: trunk/src/world_entities/projectiles/rail_projectile.h
===================================================================
--- trunk/src/world_entities/projectiles/rail_projectile.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/rail_projectile.h	(revision 9869)
@@ -17,4 +17,5 @@
 class RailProjectile : public Projectile
 {
+  ObjectListDeclaration(RailProjectile);
   public:
     RailProjectile ();
Index: trunk/src/world_entities/projectiles/rocket.cc
===================================================================
--- trunk/src/world_entities/projectiles/rocket.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/rocket.cc	(revision 9869)
@@ -19,12 +19,13 @@
 
 #include "state.h"
-#include "class_list.h"
 
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(Rocket, CL_ROCKET);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(Rocket, CL_ROCKET);
+CREATE_FAST_FACTORY_STATIC(Rocket);
 
 /**
@@ -33,5 +34,5 @@
 Rocket::Rocket () : Projectile()
 {
-  this->setClassID(CL_ROCKET, "Rocket");
+  this->registerObject(this, Rocket::_objectList);
 
   this->loadModel("models/projectiles/orx-rocket.obj", .3);
@@ -55,5 +56,5 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (Rocket::trailParticles != NULL && ClassList::getList(CL_ROCKET)->size() <= 1)
+  if (Rocket::trailParticles != NULL && Rocket::objectList().size() <= 1)
   {
 /*    if (ClassList::exists(Rocket::trailParticles, CL_PARTICLE_SYSTEM))
@@ -61,5 +62,5 @@
     Rocket::trailParticles = NULL;
   }
-  if (Rocket::explosionParticles != NULL && ClassList::getList(CL_ROCKET)->size() <= 1)
+  if (Rocket::explosionParticles != NULL && Rocket::objectList().size() <= 1)
   {
 /*    if (ClassList::exists(Rocket::explosionParticles, CL_PARTICLE_SYSTEM))
Index: trunk/src/world_entities/projectiles/rocket.h
===================================================================
--- trunk/src/world_entities/projectiles/rocket.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/rocket.h	(revision 9869)
@@ -9,6 +9,4 @@
 #include "projectile.h"
 
-class Vector;
-class Weapon;
 class SpriteParticles;
 class ParticleEmitter;
@@ -17,29 +15,31 @@
 class Rocket : public Projectile
 {
-  public:
-    Rocket ();
-    virtual ~Rocket ();
+  ObjectListDeclaration(Rocket);
+
+public:
+  Rocket ();
+  virtual ~Rocket ();
 
 
-    virtual void activate();
-    virtual void deactivate();
+  virtual void activate();
+  virtual void deactivate();
 
-    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+  virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy (WorldEntity* killer);
+  virtual void destroy (WorldEntity* killer);
 
-    virtual void tick (float time);
-    virtual void draw () const;
+  virtual void tick (float time);
+  virtual void draw () const;
 
 
-  private:
-    static FastFactory*               fastFactory;
-    static SpriteParticles*           trailParticles;
-    static SpriteParticles*           explosionParticles;
+private:
+  static FastFactory*               fastFactory;
+  static SpriteParticles*           trailParticles;
+  static SpriteParticles*           explosionParticles;
 
-    ParticleEmitter*                  emitter;
+  ParticleEmitter*                  emitter;
 
 
-    WorldEntity* hitEntity; // FIXME TEMPORARY
+  WorldEntity* hitEntity; // FIXME TEMPORARY
 
 };
Index: trunk/src/world_entities/projectiles/test_bullet.cc
===================================================================
--- trunk/src/world_entities/projectiles/test_bullet.cc	(revision 9656)
+++ trunk/src/world_entities/projectiles/test_bullet.cc	(revision 9869)
@@ -19,11 +19,12 @@
 
 #include "state.h"
-#include "class_list.h"
 
-#include "dot_emitter.h"
-#include "sprite_particles.h"
+#include "particles/dot_emitter.h"
+#include "particles/sprite_particles.h"
 #include "debug.h"
 
-CREATE_FAST_FACTORY_STATIC(TestBullet, CL_TEST_BULLET);
+#include "class_id_DEPRECATED.h"
+ObjectListDefinitionID(TestBullet, CL_TEST_BULLET);
+CREATE_FAST_FACTORY_STATIC(TestBullet);
 
 /**
@@ -32,5 +33,5 @@
 TestBullet::TestBullet () : Projectile()
 {
-  this->setClassID(CL_TEST_BULLET, "TestBullet");
+  this->registerObject(this, TestBullet::_objectList);
 
   this->loadModel("models/projectiles/orx-rocket.obj", .3);
@@ -54,13 +55,13 @@
 
   /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (TestBullet::trailParticles != NULL && ClassList::getList(CL_TEST_BULLET)->size() <= 1)
+  if (TestBullet::trailParticles != NULL && TestBullet::objectList().size() <= 1)
   {
-    if (ClassList::exists(TestBullet::trailParticles, CL_PARTICLE_SYSTEM))
+    if (ParticleSystem::objectList().exists(TestBullet::trailParticles))
       delete TestBullet::trailParticles;
     TestBullet::trailParticles = NULL;
   }
-  if (TestBullet::explosionParticles != NULL && ClassList::getList(CL_TEST_BULLET)->size() <= 1)
+  if (TestBullet::explosionParticles != NULL && TestBullet::objectList().size() <= 1)
   {
-    if (ClassList::exists(TestBullet::explosionParticles, CL_PARTICLE_SYSTEM))
+    if (ParticleSystem::objectList().exists(TestBullet::explosionParticles))
       delete TestBullet::explosionParticles;
     TestBullet::explosionParticles = NULL;
Index: trunk/src/world_entities/projectiles/test_bullet.h
===================================================================
--- trunk/src/world_entities/projectiles/test_bullet.h	(revision 9656)
+++ trunk/src/world_entities/projectiles/test_bullet.h	(revision 9869)
@@ -17,4 +17,6 @@
 class TestBullet : public Projectile
 {
+  ObjectListDeclaration(TestBullet);
+
   public:
     TestBullet ();
