Index: code/branches/physics_merge/src/orxonox/objects/Scene.cc
===================================================================
--- code/branches/physics_merge/src/orxonox/objects/Scene.cc	(revision 2447)
+++ code/branches/physics_merge/src/orxonox/objects/Scene.cc	(revision 2448)
@@ -80,7 +80,7 @@
         // No physics yet, XMLPort will do that.
         const int defaultMaxWorldSize = 100000;
-        this->negativeWorldRange_ = Vector3(-defaultMaxWorldSize, -defaultMaxWorldSize, -defaultMaxWorldSize);
-        this->positiveWorldRange_ = Vector3( defaultMaxWorldSize,  defaultMaxWorldSize,  defaultMaxWorldSize);
-        this->gravity_ = Vector3(0, 0, 0);
+        this->negativeWorldRange_ = Vector3::UNIT_SCALE * -defaultMaxWorldSize;
+        this->positiveWorldRange_ = Vector3::UNIT_SCALE *  defaultMaxWorldSize;
+        this->gravity_ = Vector3::ZERO;
         this->physicalWorld_   = 0;
         this->solver_          = 0;
Index: code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.cc
===================================================================
--- code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.cc	(revision 2447)
+++ code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.cc	(revision 2448)
@@ -52,9 +52,10 @@
 
         this->speed_ = 100;
-        this->rotationSpeed_ = 3;
+        this->rotationGain_ = 3;
 
         this->yaw_ = 0;
         this->pitch_ = 0;
         this->roll_ = 0;
+        this->localVelocity_ = Vector3::ZERO;
         this->setHudTemplate("spectatorhud");
         this->hudmode_ = 0;
@@ -110,11 +111,22 @@
         if (this->isLocallyControlled())
         {
-            Vector3 velocity = this->getVelocity();
-            velocity.normalise();
-            this->setVelocity(this->getOrientation() * velocity * this->speed_);
-
-            this->yaw(Radian(this->yaw_ * this->rotationSpeed_));
-            this->pitch(Radian(this->pitch_ * this->rotationSpeed_));
-            this->roll(Radian(this->roll_ * this->rotationSpeed_));
+            float localSpeedSquared = this->localVelocity_.squaredLength();
+            float localSpeed;
+            if (localSpeedSquared > 1.0)
+                localSpeed = this->speed_ / sqrtf(localSpeedSquared);
+            else
+                localSpeed = this->speed_;
+
+            this->localVelocity_.x *= localSpeed;
+            this->localVelocity_.y *= localSpeed;
+            this->localVelocity_.z *= localSpeed;
+            this->setVelocity(this->getOrientation() * this->localVelocity_);
+            this->localVelocity_.x = 0;
+            this->localVelocity_.y = 0;
+            this->localVelocity_.z = 0;
+
+            this->yaw  (Radian(this->yaw_   * this->rotationGain_));
+            this->pitch(Radian(this->pitch_ * this->rotationGain_));
+            this->roll (Radian(this->roll_  * this->rotationGain_));
 
             this->yaw_ = this->pitch_ = this->roll_ = 0;
@@ -122,9 +134,4 @@
 
         SUPER(Spectator, tick, dt);
-
-        if (this->isLocallyControlled())
-        {
-            this->setVelocity(Vector3::ZERO);
-        }
     }
 
@@ -145,30 +152,30 @@
     void Spectator::moveFrontBack(const Vector2& value)
     {
-        this->setVelocity(this->getVelocity() + value.y * this->speed_ * WorldEntity::FRONT);
+        this->localVelocity_.z -= value.x;
     }
 
     void Spectator::moveRightLeft(const Vector2& value)
     {
-        this->setVelocity(this->getVelocity() + value.y * this->speed_ * WorldEntity::RIGHT);
+        this->localVelocity_.x += value.x;
     }
 
     void Spectator::moveUpDown(const Vector2& value)
     {
-        this->setVelocity(this->getVelocity() + value.y * this->speed_ * WorldEntity::UP);
+        this->localVelocity_.y += value.x;
     }
 
     void Spectator::rotateYaw(const Vector2& value)
     {
-        this->yaw_ = value.y;
+        this->yaw_ += value.y;
     }
 
     void Spectator::rotatePitch(const Vector2& value)
     {
-        this->pitch_ = value.y;
+        this->pitch_ += value.y;
     }
 
     void Spectator::rotateRoll(const Vector2& value)
     {
-        this->roll_ = value.y;
+        this->roll_ += value.y;
     }
 
Index: code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.h
===================================================================
--- code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 2447)
+++ code/branches/physics_merge/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 2448)
@@ -69,9 +69,11 @@
 
             float speed_;
-            float rotationSpeed_;
+            float rotationGain_;
 
             float yaw_;
             float pitch_;
             float roll_;
+
+            Vector3 localVelocity_;
 
             int hudmode_;
