Index: code/trunk/src/orxonox/controllers/AIController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/AIController.cc	(revision 5781)
+++ code/trunk/src/orxonox/controllers/AIController.cc	(revision 5929)
@@ -44,5 +44,5 @@
         RegisterObject(AIController);
 
-        this->actionTimer_.setTimer(ACTION_INTERVAL, true, this, createExecutor(createFunctor(&AIController::action)));
+        this->actionTimer_.setTimer(ACTION_INTERVAL, true, createExecutor(createFunctor(&AIController::action, this)));
     }
 
Index: code/trunk/src/orxonox/controllers/AIController.h
===================================================================
--- code/trunk/src/orxonox/controllers/AIController.h	(revision 5781)
+++ code/trunk/src/orxonox/controllers/AIController.h	(revision 5929)
@@ -50,5 +50,5 @@
 
         private:
-            Timer<AIController> actionTimer_;
+            Timer actionTimer_;
     };
 }
Index: code/trunk/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/ArtificialController.cc	(revision 5781)
+++ code/trunk/src/orxonox/controllers/ArtificialController.cc	(revision 5929)
@@ -46,4 +46,6 @@
         this->bHasTargetPosition_ = false;
         this->targetPosition_ = Vector3::ZERO;
+        
+        this->target_.setCallback(createFunctor(&ArtificialController::targetDied, this));
     }
 
@@ -162,11 +164,14 @@
     }
 
-    void ArtificialController::destroyedPawn(Pawn* ship)
-    {
-        if (ship == this->target_)
-        {
-            this->forgetTarget();
-            this->searchRandomTargetPosition();
-        }
+    void ArtificialController::abandonTarget(Pawn* target)
+    {
+        if (target == this->target_)
+            this->targetDied();
+    }
+
+    void ArtificialController::targetDied()
+    {
+        this->forgetTarget();
+        this->searchRandomTargetPosition();
     }
 
Index: code/trunk/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/trunk/src/orxonox/controllers/ArtificialController.h	(revision 5781)
+++ code/trunk/src/orxonox/controllers/ArtificialController.h	(revision 5929)
@@ -33,18 +33,19 @@
 
 #include "util/Math.h"
-#include "interfaces/PawnListener.h"
 #include "Controller.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport ArtificialController : public Controller, public PawnListener
+    class _OrxonoxExport ArtificialController : public Controller
     {
         public:
             ArtificialController(BaseObject* creator);
             virtual ~ArtificialController();
-
-            virtual void destroyedPawn(Pawn* pawn);
+            
+            void abandonTarget(Pawn* target);
 
         protected:
+            void targetDied();
+
             void moveToPosition(const Vector3& target);
             void moveToTargetPosition();
@@ -65,5 +66,5 @@
             bool bHasTargetPosition_;
             Vector3 targetPosition_;
-            Pawn* target_;
+            WeakPtr<Pawn> target_;
             bool bShooting_;
 
Index: code/trunk/src/orxonox/controllers/HumanController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/HumanController.cc	(revision 5781)
+++ code/trunk/src/orxonox/controllers/HumanController.cc	(revision 5929)
@@ -36,4 +36,8 @@
 #include "infos/PlayerInfo.h"
 #include "overlays/Map.h"
+#include "graphics/Camera.h"
+#include "sound/SoundManager.h"
+#include "Radar.h"
+#include "Scene.h"
 
 namespace orxonox
@@ -56,4 +60,6 @@
     SetConsoleCommand(HumanController, dropItems,     true);
     SetConsoleCommand(HumanController, useItem,       true);
+    SetConsoleCommand(HumanController, cycleNavigationFocus,   true);
+    SetConsoleCommand(HumanController, releaseNavigationFocus, true);
 
     CreateUnloadableFactory(HumanController);
@@ -71,4 +77,20 @@
     {
         HumanController::localController_s = 0;
+    }
+
+    void HumanController::tick(float dt)
+    {
+        if (GameMode::playsSound() && HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+        {
+            // Update sound listener
+            Camera* camera = HumanController::localController_s->controllableEntity_->getCamera();
+            if (camera)
+            {
+                SoundManager::getInstance().setListenerPosition(camera->getWorldPosition());
+                SoundManager::getInstance().setListenerOrientation(camera->getWorldOrientation());
+            }
+            else
+                COUT(3) << "HumanController, Warning: Using a ControllableEntity without Camera" << std::endl;
+        }
     }
 
@@ -200,3 +222,15 @@
             return NULL;
     }
+
+    void HumanController::cycleNavigationFocus()
+    {
+        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+            HumanController::localController_s->controllableEntity_->getScene()->getRadar()->cycleFocus();
+    }
+
+    void HumanController::releaseNavigationFocus()
+    {
+        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+            HumanController::localController_s->controllableEntity_->getScene()->getRadar()->releaseFocus();
+    }
 }
Index: code/trunk/src/orxonox/controllers/HumanController.h
===================================================================
--- code/trunk/src/orxonox/controllers/HumanController.h	(revision 5781)
+++ code/trunk/src/orxonox/controllers/HumanController.h	(revision 5929)
@@ -31,13 +31,17 @@
 
 #include "OrxonoxPrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
 #include "Controller.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport HumanController : public Controller
+    class _OrxonoxExport HumanController : public Controller, public Tickable
     {
         public:
             HumanController(BaseObject* creator);
             virtual ~HumanController();
+
+            virtual void tick(float dt);
 
             static void moveFrontBack(const Vector2& value);
@@ -58,4 +62,6 @@
             static void dropItems();
             static void useItem();
+            static void cycleNavigationFocus();
+            static void releaseNavigationFocus();
 
             static void suicide();
Index: code/trunk/src/orxonox/controllers/WaypointController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointController.cc	(revision 5781)
+++ code/trunk/src/orxonox/controllers/WaypointController.cc	(revision 5929)
@@ -50,5 +50,5 @@
         {
             for (size_t i = 0; i < this->waypoints_.size(); ++i)
-                delete this->waypoints_[i];
+                this->waypoints_[i]->destroy();
         }
     }
Index: code/trunk/src/orxonox/controllers/WaypointPatrolController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointPatrolController.cc	(revision 5781)
+++ code/trunk/src/orxonox/controllers/WaypointPatrolController.cc	(revision 5929)
@@ -45,5 +45,5 @@
         this->alertnessradius_ = 500;
 
-        this->patrolTimer_.setTimer(rnd(), true, this, createExecutor(createFunctor(&WaypointPatrolController::searchEnemy)));
+        this->patrolTimer_.setTimer(rnd(), true, createExecutor(createFunctor(&WaypointPatrolController::searchEnemy, this)));
     }
 
Index: code/trunk/src/orxonox/controllers/WaypointPatrolController.h
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointPatrolController.h	(revision 5781)
+++ code/trunk/src/orxonox/controllers/WaypointPatrolController.h	(revision 5929)
@@ -61,5 +61,5 @@
             int team_;
             float alertnessradius_;
-            Timer<WaypointPatrolController> patrolTimer_;
+            Timer patrolTimer_;
     };
 }
