Index: code/branches/steering/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- code/branches/steering/src/modules/weapons/weaponmodes/HsW01.cc	(revision 6033)
+++ code/branches/steering/src/modules/weapons/weaponmodes/HsW01.cc	(revision 6045)
@@ -39,4 +39,5 @@
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/WeaponSystem.h"
+#include "worldentities/WorldEntity.h"
 
 namespace orxonox
@@ -110,7 +111,9 @@
         model->setScale(5);
 
-        projectile->setOrientation(this->getMuzzleOrientation());
+        //projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->lookAt(this->getTarget(), WorldEntity::World);
         projectile->setPosition(this->getMuzzlePosition());
-        projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
+        projectile->setVelocity((projectile->getOrientation() * Vector3::UNIT_Z) * this->speed_); //getWorldOrientation??
+        //projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
 
         projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
Index: code/branches/steering/src/orxonox/controllers/Controller.cc
===================================================================
--- code/branches/steering/src/orxonox/controllers/Controller.cc	(revision 6033)
+++ code/branches/steering/src/orxonox/controllers/Controller.cc	(revision 6045)
@@ -29,4 +29,5 @@
 #include "Controller.h"
 #include "core/CoreIncludes.h"
+#include "worldentities/ControllableEntity.h"
 
 namespace orxonox
@@ -45,3 +46,7 @@
     {
     }
+
+    Vector3 Controller::getTarget() {
+        return this->controllableEntity_->getPosition() + (this->controllableEntity_->getOrientation() * Vector3::UNIT_Z);
+    }
 }
Index: code/branches/steering/src/orxonox/controllers/Controller.h
===================================================================
--- code/branches/steering/src/orxonox/controllers/Controller.h	(revision 6033)
+++ code/branches/steering/src/orxonox/controllers/Controller.h	(revision 6045)
@@ -58,4 +58,6 @@
             virtual void changedControllableEntity() {}
 
+            virtual Vector3 getTarget();
+
         protected:
             PlayerInfo* player_;
Index: code/branches/steering/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- code/branches/steering/src/orxonox/controllers/NewHumanController.cc	(revision 6033)
+++ code/branches/steering/src/orxonox/controllers/NewHumanController.cc	(revision 6045)
@@ -57,4 +57,6 @@
         overlaySize = 0.08;
 
+        controlMode = 0;
+
         CrossHairOverlay = new OrxonoxOverlay(this);
         CrossHairOverlay->setBackgroundMaterial("Orxonox/Crosshair3");
@@ -110,7 +112,13 @@
 */
 
+            HumanController::localController_s->getControllableEntity()->fire(firemode);
+        //}
+//}
+    }
+
+    Vector3 NewHumanController::getTarget() {
             Ogre::RaySceneQuery * rsq = HumanController::localController_s->getControllableEntity()->getScene()->getSceneManager()->createRayQuery(Ogre::Ray());
 
-std::cout << "X: " << static_cast<float>(this->currentYaw_)/2*-1+.5 << "  Y: " << static_cast<float>(this->currentPitch_)/2*-1+.5 << endl;
+//std::cout << "X: " << static_cast<float>(this->currentYaw_)/2*-1+.5 << "  Y: " << static_cast<float>(this->currentPitch_)/2*-1+.5 << endl;
 
             Ogre::Ray mouseRay = HumanController::localController_s->getControllableEntity()->getCamera()->getCamera()->getCameraToViewportRay(static_cast<float>(this->currentYaw_)/2*-1+.5, static_cast<float>(this->currentPitch_)/2*-1+.5);
@@ -119,16 +127,27 @@
             rsq->setSortByDistance(true);
 
+/*
+Distance of objects:
+ignore everything under 200 maybe even take 1000 as min distance to shoot at
+
+shots are regularly traced and are entities!!!!!!!!! this is the biggest problem
+they vanish only after a distance of 10'000
+*/
+
 
             Ogre::RaySceneQueryResult &result = rsq->execute();
 
             Ogre::RaySceneQueryResult::iterator itr;
-for ( itr = result.begin(); itr != result.end(); itr++ )
- {
-     std::cout << "distance: " << itr->distance << "  name: " << itr->movable->getName() << " type: " << itr->movable->getMovableType() << endl;
-if (itr->movable->isInScene() && itr->movable->getMovableType() == "Entity") {
-std::cout << " in scene" << endl;
-	itr->movable->getParentSceneNode()->showBoundingBox(true);
-}
- }
+            for ( itr = result.begin(); itr != result.end(); itr++ )
+            {
+                //std::cout << "distance: " << itr->distance << "  name: " << itr->movable->getName() << " type: " << itr->movable->getMovableType();
+                if (itr->movable->isInScene() && itr->movable->getMovableType() == "Entity" && itr->distance > 500) {
+                    //std::cout << "  TAGGED";
+                    itr->movable->getParentSceneNode()->showBoundingBox(true);
+std::cout << itr->movable->getParentSceneNode()->_getDerivedPosition() << endl;
+return itr->movable->getParentSceneNode()->_getDerivedPosition();
+                }
+                //std::cout << endl;
+            }
 
 //if (result.front().movable->isInScene()) std::cout << "in scene" << endl;
@@ -136,5 +155,5 @@
 //result.front().movable->setVisible(false);
 
-std::cout << endl;
+            //std::cout << endl;
 /*
             if (!result.empty()) {
@@ -143,9 +162,6 @@
             }
 */
-
-
-            HumanController::localController_s->getControllableEntity()->fire(firemode);
-        //}
-//}
+        return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getWorldOrientation() * Vector3::NEGATIVE_UNIT_Z);
+//return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getCamera()->getCamera()->getOrientation() * Vector3::NEGATIVE_UNIT_Z);
     }
 
Index: code/branches/steering/src/orxonox/controllers/NewHumanController.h
===================================================================
--- code/branches/steering/src/orxonox/controllers/NewHumanController.h	(revision 6033)
+++ code/branches/steering/src/orxonox/controllers/NewHumanController.h	(revision 6045)
@@ -45,9 +45,13 @@
 
             virtual void tick(float dt);
-            
+
             virtual void yaw(const Vector2& value);
             virtual void pitch(const Vector2& value);
 
             virtual void doFire(unsigned int firemode);
+
+            void changeMode(unsigned int controleMode);
+
+            virtual Vector3 getTarget();
 
         private:
@@ -56,4 +60,5 @@
             OrxonoxOverlay              *CrossHairOverlay;
             float			overlaySize;
+            unsigned int                controlMode;
     };
 }
Index: code/branches/steering/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/branches/steering/src/orxonox/infos/PlayerInfo.cc	(revision 6033)
+++ code/branches/steering/src/orxonox/infos/PlayerInfo.cc	(revision 6045)
@@ -138,6 +138,8 @@
         assert(this->controller_);
         this->controller_->setPlayer(this);
-        if (this->controllableEntity_)
+        if (this->controllableEntity_) {
             this->controller_->setControllableEntity(this->controllableEntity_);
+            this->controllableEntity_->setController(this->controller_);
+        }
         this->changedController();
     }
@@ -158,6 +160,8 @@
         this->bReadyToSpawn_ &= (!this->bSetUnreadyAfterSpawn_);
 
-        if (this->controller_)
+        if (this->controller_) {
             this->controller_->setControllableEntity(entity);
+            this->controllableEntity_->setController(this->controller_);
+        }
 
         this->changedControllableEntity();
@@ -171,4 +175,5 @@
             return;
 
+        this->controllableEntity_->setController(0);
         this->controllableEntity_ = 0;
         this->controllableEntityID_ = OBJECTID_UNKNOWN;
Index: code/branches/steering/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/branches/steering/src/orxonox/weaponsystem/WeaponMode.h	(revision 6033)
+++ code/branches/steering/src/orxonox/weaponsystem/WeaponMode.h	(revision 6045)
@@ -38,4 +38,10 @@
 #include "core/SubclassIdentifier.h"
 #include "tools/Timer.h"
+
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponPack.h"
+#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/pawns/Pawn.h"
+#include "controllers/Controller.h"
 
 namespace orxonox
@@ -125,4 +131,7 @@
                 { return this->mode_; }
 
+            inline Vector3 getTarget()
+                { return this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getController()->getTarget(); }
+
         protected:
             virtual void fire() = 0;
Index: code/branches/steering/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/steering/src/orxonox/worldentities/ControllableEntity.cc	(revision 6033)
+++ code/branches/steering/src/orxonox/worldentities/ControllableEntity.cc	(revision 6045)
@@ -62,4 +62,5 @@
         this->camera_ = 0;
         this->xmlcontroller_ = 0;
+        this->controller_ = 0;
         this->reverseCamera_ = 0;
         this->bDestroyWhenPlayerLeft_ = false;
Index: code/branches/steering/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/steering/src/orxonox/worldentities/ControllableEntity.h	(revision 6033)
+++ code/branches/steering/src/orxonox/worldentities/ControllableEntity.h	(revision 6045)
@@ -139,4 +139,9 @@
             inline Controller* getXMLController() const
                 { return this->xmlcontroller_; }
+
+            inline Controller* getController() const
+                { return this->controller_; }
+            inline void setController(Controller* c)
+                { this->controller_ = c; }
 
         protected:
@@ -201,4 +206,5 @@
             std::string cameraPositionTemplate_;
             Controller* xmlcontroller_;
+            Controller* controller_;
             CameraPosition* reverseCamera_;
     };
