Index: branches/playability/src/lib/util/loading/fast_factory.cc
===================================================================
--- branches/playability/src/lib/util/loading/fast_factory.cc	(revision 10335)
+++ branches/playability/src/lib/util/loading/fast_factory.cc	(revision 10345)
@@ -157,4 +157,5 @@
 void FastFactory::flush(bool hardFLUSH)
 {
+hardFLUSH = false; // HACK
   FastObjectMember* tmpMember = this->deadList, *delMember = NULL;
   while (tmpMember != NULL)
Index: branches/playability/src/world_entities/effects/wobblegrid.cc
===================================================================
--- branches/playability/src/world_entities/effects/wobblegrid.cc	(revision 10335)
+++ branches/playability/src/world_entities/effects/wobblegrid.cc	(revision 10345)
@@ -81,4 +81,5 @@
 
   this->material = new Material();
+  this->material->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   this->setAbsCoor(0, 0, 0);
   //this->setVisibiliy(true);
Index: branches/playability/src/world_entities/projectiles/acid_splash.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/acid_splash.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/acid_splash.cc	(revision 10345)
@@ -56,5 +56,5 @@
 
 
-  int rnd = rand()/3;
+  int rnd = int(rand() % 3);
 
   switch (rnd){
@@ -76,6 +76,5 @@
 //     this->grid->setTexture( "maps/blub.png");
 
-  this->grid->toList(OM_ENVIRON); //this->getOMListNumber());
-  this->toList(OM_ENVIRON);
+  this->grid->toList(OM_ENVIRON); 
 }
 
@@ -89,5 +88,4 @@
   // delete this->emitter;
   //delete this->grid;
-  
   this->grid->toList(OM_DEAD);
   
@@ -97,5 +95,7 @@
 void AcidSplash::activate()
 {
-  this->unhide();
+  this->origList = this->getOMListNumber();
+  this->toList(OM_ENVIRON);
+ // this->unhide();
   this->grid->setVisibiliy(true);
 
@@ -110,7 +110,9 @@
   this->lifeCycle = 0.0;
 
-  this->hide();
+ // this->hide();
   this->grid->setVisibiliy(false);
-  this->toList(OM_DEAD);
+  this->lifeCycle = 0.0;
+  this->toList(OM_NULL);
+  //this->toList(OM_DEAD);
   this->removeNode();
   
@@ -155,5 +157,5 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == (this->getOMListNumber() -1))  && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
+    if( ((*eIterator)->getOMListNumber() != (this->origList -1))  && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
     {
       (*eIterator)->hit (this->getDamage(),this);
Index: branches/playability/src/world_entities/projectiles/hbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/hbolt.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/hbolt.cc	(revision 10345)
@@ -59,4 +59,5 @@
   this->halo->setSize(.65, .65);
   this->halo->setTexture("hbolt_halo2.png");
+
 }
 
@@ -84,4 +85,5 @@
 void HBolt::activate()
 {
+  this->origList = this->getOMListNumber();
   this->toList(OM_ENVIRON);
   if (unlikely(HBolt::explosionParticles == NULL))
@@ -144,5 +146,5 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00)  && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
+    if( ((*eIterator)->getOMListNumber() != (this->origList -1))   && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
     {
       (*eIterator)->hit (this->getDamage(),this);
Index: branches/playability/src/world_entities/projectiles/lbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/lbolt.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/lbolt.cc	(revision 10345)
@@ -61,4 +61,6 @@
   this->halo->setSize(.35, .35);
   this->halo->setTexture("hbolt_halo.png");
+
+
 }
 
@@ -86,4 +88,5 @@
 void LBolt::activate()
 {
+  this->origList = this->getOMListNumber();
   this->toList(OM_ENVIRON);
   if (unlikely(LBolt::explosionParticles == NULL))
@@ -143,5 +146,5 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00)  && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
+    if( ((*eIterator)->getOMListNumber() != (this->origList -1))   && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
     {
       (*eIterator)->hit (this->getDamage(),this);
Index: branches/playability/src/world_entities/projectiles/mbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10345)
@@ -81,4 +81,5 @@
   this->trail->setTexture( "maps/laser.png");
   this->trail->setAbsCoor(this->getAbsCoor() - Vector(.7,0,0));
+
 }
 
@@ -107,4 +108,5 @@
 void MBolt::activate()
 {
+  this->origList = this->getOMListNumber();
   this->toList(OM_ENVIRON);
   if (unlikely(MBolt::explosionParticles == NULL))
@@ -137,5 +139,7 @@
   this->lifeCycle = 0.0;
 
-  this->toList(OM_DEAD);
+  this->lifeCycle = 0.0;
+  this->toList(OM_NULL);
+  //this->toList(OM_DEAD);
   this->removeNode();
   MBolt::fastFactory->kill(this);
@@ -174,5 +178,5 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00) && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
+    if( ((*eIterator)->getOMListNumber() != (this->origList -1))  && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 8)
     {
       (*eIterator)->hit (this->getDamage(),this);
Index: branches/playability/src/world_entities/projectiles/projectile.h
===================================================================
--- branches/playability/src/world_entities/projectiles/projectile.h	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/projectile.h	(revision 10345)
@@ -67,4 +67,5 @@
   protected:
     // energy
+    int		       origList;			//!< FIXME currently a fix around the collision seg fault
     float                   energyMin;                //!< The minimal Energy a Projectile needs to be emitted.
     bool                    bChargeable;              //!< if the Projectile is Charegeable
Index: branches/playability/src/world_entities/projectiles/spike.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/spike.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/spike.cc	(revision 10345)
@@ -73,4 +73,7 @@
     //  delete Spike::explosionParticles;
     PRINTF(1)("Deleting Spike Particles\n");
+/*
+  if (Spike::objectList().exists(Spike::explosionParticles))
+      delete Spike::explosionParticles; */
     Spike::explosionParticles = NULL;
   }
@@ -85,5 +88,5 @@
   {
     Spike::explosionParticles = new SpriteParticles(1000);
-    Spike::explosionParticles->setName("BoltExplosionParticles");
+    Spike::explosionParticles->setName("SpikeExplosionParticles");
     Spike::explosionParticles->setLifeSpan(.5, .3);
     Spike::explosionParticles->setRadius(0.0, 10.0);
@@ -103,5 +106,6 @@
 {
   assert (Spike::explosionParticles != NULL);
-  Spike::explosionParticles->removeEmitter(this->emitter);
+  //Spike::explosionParticles->removeEmitter(this->emitter);
+  this->emitter->setSystem(NULL);
   this->lifeCycle = 0.0;
 
@@ -111,5 +115,5 @@
 }
 
-
+/*
 void Spike::collidesWith(WorldEntity* entity, const Vector& location)
 {
@@ -120,5 +124,5 @@
   dynamic_cast<SpaceShip*>(entity)->damage(this->getDamage(),0);
 //   this->deactivate();
-}
+}*/
 
 /**
Index: branches/playability/src/world_entities/projectiles/spike.h
===================================================================
--- branches/playability/src/world_entities/projectiles/spike.h	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/spike.h	(revision 10345)
@@ -27,5 +27,5 @@
     virtual void deactivate();
 
-    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+   //virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
     virtual void destroy (WorldEntity* killer);
Index: branches/playability/src/world_entities/projectiles/spike_ball.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10345)
@@ -82,4 +82,6 @@
     //  delete SpikeBall::explosionParticles;
     PRINTF(1)("Deleting SpikeBall Particles\n");
+//    if (SpikeBall::objectList().exists(SpikeBall::explosionParticles))
+//      delete SpikeBall::explosionParticles;
     SpikeBall::explosionParticles = NULL;
   }
@@ -94,5 +96,5 @@
   {
     SpikeBall::explosionParticles = new SpriteParticles(1000);
-    SpikeBall::explosionParticles->setName("BoltExplosionParticles");
+    SpikeBall::explosionParticles->setName("SpikeBallExplosionParticles");
     SpikeBall::explosionParticles->setLifeSpan(.5, .3);
     SpikeBall::explosionParticles->setRadius(0.0, 10.0);
@@ -138,5 +140,6 @@
 {
   assert (SpikeBall::explosionParticles != NULL);
-  SpikeBall::explosionParticles->removeEmitter(this->emitter);
+  //SpikeBall::explosionParticles->removeEmitter(this->emitter);
+  this->emitter->setSystem(NULL);
   this->lifeCycle = 0.0;
 
@@ -146,5 +149,5 @@
 }
 
-
+/*
 void SpikeBall::collidesWith(WorldEntity* entity, const Vector& location)
 {
@@ -154,5 +157,5 @@
   this->hitEntity = entity;
   dynamic_cast<SpaceShip*>(entity)->damage(this->getDamage(),0);
-}
+}*/
 
 
Index: branches/playability/src/world_entities/projectiles/spike_ball.h
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10345)
@@ -32,5 +32,5 @@
     virtual void deactivate();
 
-    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+   // virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
     virtual void destroy (WorldEntity* killer);
Index: branches/playability/src/world_entities/projectiles/swarm_projectile.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10335)
+++ branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10345)
@@ -62,4 +62,8 @@
   //this->trail->setParent( this);
   this->trail->setTexture( "maps/laser.png");
+
+
+  this->origList = this->getOMListNumber();
+  this->toList(OM_ENVIRON);
 }
 
@@ -190,31 +194,4 @@
     this->deactivate();
 
-/*
-  Vector targetFarFarAway = this->getAbsCoor() + Vector(100000, 0, 0);
-
-  {
-    speed = velocity.len();
-    diffVector = ((targetFarFarAway - this->getAbsCoor()).getNormalized());
-
-    if(velocity.dot(diffVector) != 0)
-    {
-      correctionVector = (( ( diffVector *  (speed * speed/( velocity.dot(diffVector ) ) )) - velocity).getNormalized()) * agility;
-
-      if( (diffVector *  (speed * speed/( velocity.dot(diffVector ) ) ) -velocity).len() < agility )
-        velocity = ((diffVector *  (speed * speed/( velocity.dot(diffVector ) ) )).getNormalized())*agility;
-      else if(velocity.dot(diffVector) > 0)
-        velocity += correctionVector;
-      else if (velocity.dot(diffVector) < 0)
-        velocity -= correctionVector;
-    }
-    else
-      velocity += diffVector * agility;
-
-    this->setAbsDir(Quaternion(velocity, Vector(0,1,0)) * Quaternion ( -M_PI_2, Vector(0,1,0)));
-  }
-
-  velocity *= maxVelocity/velocity.len();
-  Vector v = this->velocity * (time);
-  this->shiftCoor(v);*/
 
 
@@ -235,34 +212,4 @@
   this->shiftCoor(this->velocity * time);
 
-/*
-
-  Vector pjV = this->getVelocity();
-  Vector tV = this->target->getVelocity();
-  Vector pT = this->target->getAbsCoor() - this->getAbsCoor(); // vector projectile target
-
-  Vector a = tV.getNormalized() * pT.dot(tV.getNormalized());
-
-  float A = 2 * pT.len() * pT.len();
-  float B = 2 * a.len() * a.len();
-  float D = 2 * sqrt(B * B - 4 * pT.len() * pT.len() *(tV.len() * tV.len() - pjV.len() * pjV.len()));
-  float tti;
-
-  if (A != 0){
-    if ( B < D ) tti = ( B + D ) / A;
-    else tti = ( B + D ) / A;
-  }
-  else tti = 0;
-
-
-  Vector estTargetDir;
-  if (tti == 0)
-    estTargetDir = pT.getNormalized() * pjV.len();
-  else
-    estTargetDir = pT / tti + pjV;
-
-  this->velocity = this->newDirection(this->velocity, estTargetDir, this->turningSpeed * time );
-
-  this->shiftCoor(this->velocity * (this->maxVelocity * time));*/
-
   if(this->tickLifeCycle(time))
     this->deactivate();
@@ -276,8 +223,9 @@
   this->lastDir = this->curDir;
   this->curDir = this->velocity;
-  if( (this->getAbsCoor() - this->target->getAbsCoor()).len() < 3)   // FIXME  Temp fake workaround for collision :)
+
+  if( this->target != NULL && (this->getAbsCoor() - this->target->getAbsCoor()).len() < 3)   // FIXME  Temp fake workaround for collision :)
   {
-    dynamic_cast<WorldEntity*>(target)->destroy( this);
-    this->destroy( this);
+    dynamic_cast<WorldEntity*>(target)->hit(this->getDamage(), this);
+    this->deactivate();
   }
 }
Index: branches/playability/src/world_entities/weapons/acid_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/acid_launcher.cc	(revision 10335)
+++ branches/playability/src/world_entities/weapons/acid_launcher.cc	(revision 10345)
@@ -84,5 +84,6 @@
   animation2->setInfinity(ANIM_INF_CONSTANT);
 */
-  this->setStateDuration(WS_SHOOTING, .6);
+  this->setStateDuration(WS_SHOOTING, 1.0f);
+
   this->setStateDuration(WS_RELOADING, 1.0f);
   this->setStateDuration(WS_ACTIVATING, .4);
@@ -95,9 +96,8 @@
   this->setCapability(WTYPE_ALLDIRS | WTYPE_TURRET | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
   this->setProjectileTypeC("AcidSplash");
-
 //   this->loadModel("models/guns/turret1.obj", 1.0);
 
   this->setEmissionPoint(2.0, 0, 0);
-  this->getProjectileFactory()->prepare(100);
+  this->getProjectileFactory()->prepare(10);
 
   this->setActionSound(WA_SHOOT, "sound/explosions/explosion_1.wav");
@@ -148,5 +148,5 @@
 
   Projectile* pj = NULL;
-  for( int i=0; i < 5; i++)
+  for( int i=0; i < 1; i++)
   {
       pj  = this->getProjectile();
@@ -155,5 +155,5 @@
 
       fired = true;
-      pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*115.0 + VECTOR_RAND(10)));
+      pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*165.0 + VECTOR_RAND(10)));
 
       pj->setParent(PNode::getNullParent());
Index: branches/playability/src/world_entities/weapons/swarm_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10335)
+++ branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10345)
@@ -150,5 +150,5 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00) && ((*eIterator)->getClassCName() != "Weapon") && ((*eIterator)->getClassCName() != "Projectile") && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 300)
+    if( ((*eIterator)->getOMListNumber() != (this->getOMListNumber() -1)) && ((*eIterator)->getClassCName() != "Weapon") && ((*eIterator)->getClassCName() != "Projectile") && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 300)
     {
       pj  = this->getProjectile();
