Index: code/branches/presentation2/src/orxonox/controllers/Controller.h
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/Controller.h	(revision 6293)
+++ code/branches/presentation2/src/orxonox/controllers/Controller.h	(revision 6295)
@@ -50,4 +50,6 @@
                 { return this->player_; }
 
+            virtual inline void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) {};
+
             inline ControllableEntity* getControllableEntity() const
                 { return this->controllableEntity_; }
Index: code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6293)
+++ code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6295)
@@ -44,4 +44,6 @@
 #include "sound/SoundManager.h"
 #include "Scene.h"
+#include "tools/BulletConversions.h"
+#include "bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
 
 namespace orxonox
@@ -246,4 +248,15 @@
             HumanController::localController_s->getControllableEntity()->fire(firemode);
 
+    }
+
+    void NewHumanController::hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) {
+        Vector3 posA = multi_cast<Vector3>(contactpoint.getPositionWorldOnA());
+        //Vector3 posB = multi_cast<Vector3>(contactpoint.getPositionWorldOnB());
+        //posA and posB are almost identical
+
+        Vector3 relativeHit = this->getControllableEntity()->getWorldOrientation() * (posA - this->getControllableEntity()->getPosition());
+
+        COUT(0) << relativeHit << endl;
+        //COUT(0) << "Damage: " << damage << " Point A: " << posA << " Point B: " << posB << endl;
     }
 
Index: code/branches/presentation2/src/orxonox/controllers/NewHumanController.h
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6293)
+++ code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6295)
@@ -56,4 +56,6 @@
             virtual void doFire(unsigned int firemode);
 
+            virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage);
+
             static void unfire();
             virtual void doUnfire();
Index: code/branches/presentation2/src/orxonox/worldentities/MovableEntity.cc
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/MovableEntity.cc	(revision 6293)
+++ code/branches/presentation2/src/orxonox/worldentities/MovableEntity.cc	(revision 6295)
@@ -79,5 +79,6 @@
             if (victim)
             {
-                victim->damage(this->collisionDamage_ * (victim->getVelocity() - this->getVelocity()).length());
+                float damage = this->collisionDamage_ * (victim->getVelocity() - this->getVelocity()).length();
+                victim->hit(0, contactPoint, damage);
             }
         }
Index: code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6293)
+++ code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6295)
@@ -38,4 +38,5 @@
 #include "PawnManager.h"
 #include "infos/PlayerInfo.h"
+#include "controllers/Controller.h"
 #include "gametypes/Gametype.h"
 #include "graphics/ParticleSpawner.h"
@@ -176,4 +177,17 @@
     }
 
+    void Pawn::hit(Pawn* originator, btManifoldPoint& contactpoint, float damage)
+    {
+        if (this->getGametype() && this->getGametype()->allowPawnHit(this, originator))
+        {
+            this->damage(damage, originator);
+
+            if ( this->getController() )
+                this->getController()->hit(originator, contactpoint, damage);
+
+            // play hit effect
+        }
+    }
+
     void Pawn::kill()
     {
Index: code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h	(revision 6293)
+++ code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h	(revision 6295)
@@ -75,6 +75,6 @@
                 { return this->lastHitOriginator_; }
 
-            virtual void damage(float damage, Pawn* originator = 0);
             virtual void hit(Pawn* originator, const Vector3& force, float damage);
+            virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage);
             virtual void kill();
 
@@ -131,4 +131,6 @@
             virtual void spawneffect();
 
+            virtual void damage(float damage, Pawn* originator = 0);
+
             bool bAlive_;
 
