Index: trunk/src/lib/physics/physics_connection.h
===================================================================
--- trunk/src/lib/physics/physics_connection.h	(revision 5256)
+++ trunk/src/lib/physics/physics_connection.h	(revision 5257)
@@ -1,5 +1,6 @@
 /*!
  * @file physics_connection.h
-  *  Definition of The Physical Connection Class.
+ *  Definition of The Physical Connection Class.
+ * @todo
 */
 
Index: trunk/src/lib/physics/physics_interface.cc
===================================================================
--- trunk/src/lib/physics/physics_interface.cc	(revision 5256)
+++ trunk/src/lib/physics/physics_interface.cc	(revision 5257)
@@ -99,4 +99,11 @@
 }
 
+void PhysicsInterface::applyForce(const Vector& force)
+{
+  PNode* tmp = dynamic_cast<PNode*>((BaseObject*)this);
+  this->forceSum += force;
+  this->bForceApplied = true;
+}
+
 /**
  *  ticks the PhysicsEffect
@@ -107,10 +114,11 @@
   //  Vector acc = this->forceSum / ( this->massChildren + this->mass );
   PNode* coorTick =  dynamic_cast<PNode*>((BaseObject*)this);
-  if (this->bForceApplied && coorTick)
+  if (coorTick != NULL )
+    coorTick->shiftCoor((coorTick->getVelocity()+ this->forceSum/this->mass*dt)*dt);
+
+  if (this->bForceApplied)
   {
-    coorTick->shiftCoor((coorTick->getVelocity()+ this->forceSum/this->mass * dt)*dt);
-
     this->bForceApplied = false;
+    this->forceSum = Vector(0,0,0);
   }
-  this->forceSum = Vector(0,0,0);
 }
Index: trunk/src/lib/physics/physics_interface.h
===================================================================
--- trunk/src/lib/physics/physics_interface.h	(revision 5256)
+++ trunk/src/lib/physics/physics_interface.h	(revision 5257)
@@ -39,4 +39,5 @@
   inline float getTotalMass( void ) const { return mass + massChildren; };
 
+  virtual void applyForce(const Vector& force);
   virtual void applyField(Field* field);
   virtual void tickPhys( float dt );
Index: trunk/src/world_entities/npc.cc
===================================================================
--- trunk/src/world_entities/npc.cc	(revision 5256)
+++ trunk/src/world_entities/npc.cc	(revision 5257)
@@ -43,6 +43,7 @@
   if (entity->isA(CL_PROJECTILE))
     PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
-  this->setVisibiliy(false);
-  State::getWorldEntityList()->remove(this);
+  this->applyForce(Vector(0,0,0)-location*1000);
+//  this->setVisibiliy(false);
+//  State::getWorldEntityList()->remove(this);
 }
 
@@ -50,8 +51,8 @@
 void NPC::tick(float dt)
 {
-  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
+//  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
 
   //if (directin.len() < 100)
-  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
+//  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
   this->shiftDir(Quaternion(dt, this->randomRotAxis));
 
Index: trunk/src/world_entities/npc.h
===================================================================
--- trunk/src/world_entities/npc.h	(revision 5256)
+++ trunk/src/world_entities/npc.h	(revision 5257)
@@ -4,8 +4,9 @@
 
 #include "world_entity.h"
+#include "physics_interface.h"
 
 class AI;
 
-class NPC : public WorldEntity {
+class NPC : public WorldEntity, public PhysicsInterface {
 
  public:
Index: trunk/src/world_entities/player.h
===================================================================
--- trunk/src/world_entities/player.h	(revision 5256)
+++ trunk/src/world_entities/player.h	(revision 5257)
@@ -23,5 +23,5 @@
      the player.cc for debug also
 */
-class Player : public WorldEntity, public PhysicsInterface, public EventListener
+class Player : public WorldEntity, public EventListener
 {
   friend class World;
Index: trunk/src/world_entities/weapons/test_bullet.cc
===================================================================
--- trunk/src/world_entities/weapons/test_bullet.cc	(revision 5256)
+++ trunk/src/world_entities/weapons/test_bullet.cc	(revision 5257)
@@ -59,5 +59,8 @@
 }
 
-
+void TestBullet::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  this->destroy();
+}
 
 /**
@@ -79,6 +82,5 @@
 //      this->finalize();
       GarbageCollector::getInstance()->collect(this);
-      this->lifeCycle = 0.0;
-
+      this->lifeCycle = 0.0; //! @todo should not be here
     }
 }
@@ -88,5 +90,8 @@
 */
 void TestBullet::destroy ()
-{}
+{
+
+
+}
 
 
Index: trunk/src/world_entities/weapons/test_bullet.h
===================================================================
--- trunk/src/world_entities/weapons/test_bullet.h	(revision 5256)
+++ trunk/src/world_entities/weapons/test_bullet.h	(revision 5257)
@@ -18,4 +18,5 @@
   virtual ~TestBullet ();
 
+  virtual void collidesWith(WorldEntity* entity, const Vector& location);
   virtual void destroy ();
 
Index: trunk/src/world_entities/world_entity.cc
===================================================================
--- trunk/src/world_entities/world_entity.cc	(revision 5256)
+++ trunk/src/world_entities/world_entity.cc	(revision 5257)
@@ -143,5 +143,5 @@
 void WorldEntity::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
+//  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
 }
 
