Index: code/branches/presentation2/src/orxonox/controllers/Controller.h
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/Controller.h	(revision 6110)
+++ code/branches/presentation2/src/orxonox/controllers/Controller.h	(revision 6111)
@@ -54,9 +54,4 @@
             virtual void changedControllableEntity() {}
 
-            virtual bool canFindTarget()
-                { return false; }
-            virtual Vector3 getTarget()
-                { return Vector3::ZERO; }
-
         protected:
             // don't use this directly, use getPlayer()->startControl(entity) (unless you know exactly what you do)
Index: code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6110)
+++ code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6111)
@@ -37,4 +37,5 @@
 #include "core/ConsoleCommand.h"
 #include "worldentities/ControllableEntity.h"
+#include "worldentities/pawns/Pawn.h"
 #include "infos/PlayerInfo.h"
 #include "overlays/OrxonoxOverlay.h"
@@ -80,5 +81,12 @@
     void NewHumanController::tick(float dt)
     {
-        crossHairOverlay_->setPosition(Vector2(static_cast<float>(this->currentYaw_)/2*-1+.5-overlaySize_/2, static_cast<float>(this->currentPitch_)/2*-1+.5-overlaySize_/2));
+        if( !this->controllableEntity_->isInMouseLook() )
+        {
+            this->crossHairOverlay_->setPosition(Vector2(static_cast<float>(this->currentYaw_)/2*-1+.5-overlaySize_/2, static_cast<float>(this->currentPitch_)/2*-1+.5-overlaySize_/2));
+            this->crossHairOverlay_->show();
+        }
+        else
+            this->crossHairOverlay_->hide();
+        // TODO: update aimPosition of Pawn
 
         HumanController::tick(dt);
@@ -117,9 +125,11 @@
         }
 */
+        if( !NewHumanController::localController_s->getControllableEntity()->isInMouseLook() )
+            this->updateTarget();
 
         HumanController::localController_s->getControllableEntity()->fire(firemode);
     }
 
-    Vector3 NewHumanController::getTarget()
+    void NewHumanController::updateTarget()
     {
         Ogre::RaySceneQuery * rsq = HumanController::localController_s->getControllableEntity()->getScene()->getSceneManager()->createRayQuery(Ogre::Ray());
@@ -140,4 +150,5 @@
 
         Ogre::RaySceneQueryResult& result = rsq->execute();
+        Pawn* pawn = orxonox_cast<Pawn*>(this->getControllableEntity());
 
         Ogre::RaySceneQueryResult::iterator itr;
@@ -154,13 +165,27 @@
                         continue;
                 }
+                
+                this->getControllableEntity()->setTarget(wePtr);
 
                 itr->movable->getParentSceneNode()->showBoundingBox(true);
                 //std::cout << itr->movable->getParentSceneNode()->_getDerivedPosition() << endl;
-                return mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance; //or itr->movable->getParentSceneNode()->_getDerivedPosition()
+                //return mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance; //or itr->movable->getParentSceneNode()->_getDerivedPosition()
+                if ( pawn )
+                {
+                    pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance ); // or itr->movable->getParentSceneNode()->_getDerivedPosition()
+                    pawn->setTarget( wePtr );
+                }
+                return;
             }
 
         }
-
-	return mouseRay.getOrigin() + mouseRay.getDirection() * 1200;
+        if ( pawn )
+        {
+            pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * 1200 );
+            pawn->setTarget( 0 );
+        }
+
+    //return mouseRay.getOrigin() + mouseRay.getDirection() * 1200;
+    
 
         //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getWorldOrientation() * Vector3::NEGATIVE_UNIT_Z * 2000);
@@ -189,6 +214,9 @@
 
     void NewHumanController::changeMode() {
-        if (NewHumanController::localController_s->controlMode_ == 0)
-            NewHumanController::localController_s->controlMode_ = 1;
+        if (NewHumanController::localController_s && NewHumanController::localController_s->controlMode_ == 0)
+        {
+            if (NewHumanController::localController_s->controllableEntity_ && !NewHumanController::localController_s->controllableEntity_->isInMouseLook() )
+                NewHumanController::localController_s->controlMode_ = 1;
+        }
         else
             NewHumanController::localController_s->controlMode_ = 0;
Index: code/branches/presentation2/src/orxonox/controllers/NewHumanController.h
===================================================================
--- code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6110)
+++ code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6111)
@@ -52,8 +52,7 @@
             static void changeMode();
 
-            virtual bool canFindTarget() { return true; }
-            virtual Vector3 getTarget();
-
         protected:
+            void updateTarget();
+            
             unsigned int                controlMode_;
             static NewHumanController* localController_s;
Index: code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc	(revision 6110)
+++ code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc	(revision 6111)
@@ -202,12 +202,15 @@
             this->muzzlePosition_ = this->weapon_->getWorldPosition() + this->weapon_->getWorldOrientation() * this->muzzleOffset_;
 
-            Controller* controller = this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getController();
-            if (controller->canFindTarget())
-            {
-                Vector3 muzzleDirection(controller->getTarget() - this->muzzlePosition_);
-                this->muzzleOrientation_ = (this->weapon_->getWorldOrientation() * WorldEntity::FRONT).getRotationTo(muzzleDirection) * this->weapon_->getWorldOrientation();
+            Pawn* pawn = this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn();
+            Vector3 muzzleDirection;
+            if ( pawn->getTarget() )
+            {
+                muzzleDirection = pawn->getTarget()->getWorldPosition() - this->muzzlePosition_;
             }
             else
-                this->muzzleOrientation_ = this->weapon_->getWorldOrientation();
+                muzzleDirection = pawn->getAimPosition() - this->muzzlePosition_;
+//             COUT(0) << "muzzleDirection " << muzzleDirection << endl;
+                //this->muzzleOrientation_ = this->weapon_->getWorldOrientation();
+            this->muzzleOrientation_ = (this->weapon_->getWorldOrientation() * WorldEntity::FRONT).getRotationTo(muzzleDirection) * this->weapon_->getWorldOrientation();
         }
         else
Index: code/branches/presentation2/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/ControllableEntity.h	(revision 6110)
+++ code/branches/presentation2/src/orxonox/worldentities/ControllableEntity.h	(revision 6111)
@@ -145,4 +145,9 @@
             inline void setController(Controller* val)
                 { this->controller_ = val; }
+            
+            virtual void setTarget( WorldEntity* target )
+                { this->target_ = target; }
+            virtual WorldEntity* getTarget()
+                { return this->target_.get(); }
 
         protected:
@@ -209,4 +214,5 @@
             Controller* controller_;
             CameraPosition* reverseCamera_;
+            WeakPtr<WorldEntity> target_;
     };
 }
Index: code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6110)
+++ code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6111)
@@ -67,4 +67,6 @@
 
         this->spawnparticleduration_ = 3.0f;
+        
+        this->aimPosition_ = Vector3::ZERO;
 
         this->getPickups().setOwner(this);
Index: code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h	(revision 6110)
+++ code/branches/presentation2/src/orxonox/worldentities/pawns/Pawn.h	(revision 6111)
@@ -116,4 +116,9 @@
 
             virtual void startLocalHumanControl();
+            
+            void setAimPosition( Vector3 position )
+                { this->aimPosition_ = position; }
+            Vector3 getAimPosition()
+                { return this->aimPosition_; }
 
         protected:
@@ -146,4 +151,6 @@
             inline void setWeaponSystem(WeaponSystem* weaponsystem)
                 { this->weaponSystem_ = weaponsystem; }
+            
+            Vector3 aimPosition_;
     };
 }
