Index: code/branches/objecthierarchy2/src/orxonox/objects/Radar.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/Radar.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/Radar.cc	(revision 2256)
@@ -112,8 +112,6 @@
             for (ObjectList<RadarViewable>::iterator itElement = ObjectList<RadarViewable>::begin(); itElement; ++itElement)
             {
-/*
-                if ((*itElement) != SpaceShip::getLocalShip() && (*itListener)->getRadarSensitivity() > (*itElement)->getRadarObjectCamouflage())
+                if ((*itListener)->getRadarSensitivity() > (*itElement)->getRadarObjectCamouflage())
                     (*itListener)->displayObject(*itElement, *itElement == this->focus_);
-*/
             }
         }
@@ -128,7 +126,8 @@
             this->focus_ = 0;
         }
-        else
-        {
-            Vector3 localPosition;// = SpaceShip::getLocalShip()->getPosition();
+/*
+        else if (this->owner_)
+        {
+            Vector3 localPosition = this->owner_->getPosition();
             Vector3 targetPosition = localPosition;
             if (*(this->itFocus_))
@@ -143,8 +142,7 @@
             for (ObjectList<RadarViewable>::iterator it = ObjectList<RadarViewable>::begin(); it; ++it)
             {
-/*
-                if (*it == SpaceShip::getLocalShip())
+                if (*it == (RadarViewable*)this->owner_)
                     continue;
-*/
+
                 float targetDistance = localPosition.squaredDistance((*it)->getWorldPosition());
                 if (targetDistance > currentDistance && targetDistance < nextDistance)
@@ -171,4 +169,5 @@
             }
         }
+*/
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.cc	(revision 2256)
@@ -29,8 +29,10 @@
 #include "OrxonoxStableHeaders.h"
 #include "RadarViewable.h"
+
 #include "util/Debug.h"
+#include "util/Exception.h"
 #include "core/CoreIncludes.h"
-//#include "objects/WorldEntity.h"
-#include "Radar.h"
+#include "objects/worldentities/WorldEntity.h"
+#include "objects/Radar.h"
 
 namespace orxonox
@@ -40,7 +42,6 @@
     */
     RadarViewable::RadarViewable()
-        : radarObject_(0)
-        , radarObjectCamouflage_(0.0f)
-        , radarObjectType_(Dot)
+        : radarObjectCamouflage_(0.0f)
+        , radarObjectShape_(Dot)
         , radarObjectDescription_("staticObject")
     {
@@ -52,5 +53,5 @@
         Radar* radar = Radar::getInstancePtr();
         if (radar)
-            this->radarObjectType_ = radar->addObjectDescription(str);
+            this->radarObjectShape_ = radar->addObjectDescription(str);
         else
         {
@@ -62,12 +63,14 @@
     const Vector3& RadarViewable::getWorldPosition() const
     {
-        validate();
-        return Vector3::ZERO;//this->radarObject_->getWorldPosition();
+        const WorldEntity* object = this->getWorldEntity();
+        validate(object);
+        return object->getWorldPosition();
     }
 
     Vector3 RadarViewable::getOrientedVelocity() const
     {
-        validate();
-        return Vector3::ZERO;//this->radarObject_->getOrientation() * this->radarObject_->getVelocity();
+        const WorldEntity* object = this->getWorldEntity();
+        validate(object);
+        return object->getWorldOrientation() * object->getVelocity();
     }
 }
Index: code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.h	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/RadarViewable.h	(revision 2256)
@@ -44,6 +44,4 @@
     class _OrxonoxExport RadarViewable : virtual public OrxonoxClass
     {
-    class WorldEntity;
-
     public:
         enum Shape
@@ -58,28 +56,40 @@
         virtual ~RadarViewable() { }
 
-        float getRadarObjectCamouflage() const { return this->radarObjectCamouflage_; }
-        void setRadarObjectCamouflage(float camouflage) { this->radarObjectCamouflage_ = camouflage; }
+        inline void setRadarObjectCamouflage(float camouflage)
+            { this->radarObjectCamouflage_ = camouflage; }
+        inline float getRadarObjectCamouflage() const
+            { return this->radarObjectCamouflage_; }
 
-        const ColourValue& getRadarObjectColour() const { return this->radarObjectColour_; }
-        void setRadarObjectColour(const ColourValue& colour) { this->radarObjectColour_ = colour; }
+        inline void setRadarObjectColour(const ColourValue& colour)
+            { this->radarObjectColour_ = colour; }
+        inline const ColourValue& getRadarObjectColour() const
+            { return this->radarObjectColour_; }
 
-        const std::string& getRadarObjectDescription() const { return this->radarObjectDescription_; }
         void setRadarObjectDescription(const std::string& str);
+        inline const std::string& getRadarObjectDescription() const
+            { return this->radarObjectDescription_; }
 
-        const WorldEntity* getWorldEntity() const { return this->radarObject_; }
+        virtual const WorldEntity* getWorldEntity() const = 0;
+
         const Vector3& getWorldPosition() const;
         Vector3 getOrientedVelocity() const;
 
-        Shape getRadarObjectType() const { return this->radarObjectType_; }
-
-    protected:
-        WorldEntity* radarObject_;
+        inline void setRadarObjectShape(Shape shape)
+            { this->radarObjectShape_ = shape; }
+        inline Shape getRadarObjectShape() const
+            { return this->radarObjectShape_; }
 
     private:
-        void validate() const { if (!this->radarObject_)
-        { COUT(1) << "Assertation: Every RadarViewable has to be assigned a WorldEntity pointer!" << std::endl; assert(0); } }
+        void validate(const WorldEntity* object) const
+        {
+            if (!object)
+            {
+                COUT(1) << "Assertation: Every RadarViewable has to be assigned a WorldEntity pointer!" << std::endl;
+                assert(0);
+            }
+        }
 
         float radarObjectCamouflage_;
-        Shape radarObjectType_;
+        Shape radarObjectShape_;
         std::string radarObjectDescription_;
         ColourValue radarObjectColour_;
Index: code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc	(revision 2256)
@@ -64,4 +64,6 @@
     Engine::~Engine()
     {
+        if (this->isInitialized() && this->ship_)
+            this->ship_->setEngine(0);
     }
 
@@ -111,5 +113,5 @@
             Synchronisable* object = Synchronisable::getSynchronisable(this->shipID_);
             if (object)
-                this->ship_ = dynamic_cast<SpaceShip*>(object);
+                this->addToSpaceShip(dynamic_cast<SpaceShip*>(object));
         }
     }
@@ -182,5 +184,9 @@
         this->ship_ = ship;
         if (ship)
+        {
             this->shipID_ = ship->getObjectID();
+            if (ship->getEngine() != this)
+                ship->setEngine(this);
+        }
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h	(revision 2256)
@@ -72,4 +72,13 @@
                 { this->maxSpeedUpDown_ = speed; }
 
+            inline float getMaxSpeedFront() const
+                { return this->maxSpeedFront_; }
+            inline float getMaxSpeedBack() const
+                { return this->maxSpeedBack_; }
+            inline float getMaxSpeedLeftRight() const
+                { return this->maxSpeedLeftRight_; }
+            inline float getMaxSpeedUpDown() const
+                { return this->maxSpeedUpDown_; }
+
             inline void setAccelerationFront(float acceleration)
                 { this->accelerationFront_ = acceleration; }
@@ -82,4 +91,15 @@
             inline void setAccelerationUpDown(float acceleration)
                 { this->accelerationUpDown_ = acceleration; }
+
+            inline float getAccelerationFront() const
+                { return this->accelerationFront_; }
+            inline float getAccelerationBrake() const
+                { return this->accelerationBrake_; }
+            inline float getAccelerationBack() const
+                { return this->accelerationBack_; }
+            inline float getAccelerationLeftRight() const
+                { return this->accelerationLeftRight_; }
+            inline float getAccelerationUpDown() const
+                { return this->accelerationUpDown_; }
 
             virtual const Vector3& getDirection() const;
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 2256)
@@ -168,5 +168,4 @@
             {
                 this->client_overwrite_ = this->server_overwrite_;
-COUT(0) << "CE: bidirectional synchronization" << std::endl;
                 this->setObjectMode(direction::bidirectional);
             }
@@ -202,5 +201,4 @@
     void ControllableEntity::startLocalHumanControl()
     {
-//        std::cout << this->getObjectID() << " ###### start local control" << std::endl;
         this->camera_ = new Camera(this);
         this->camera_->requestFocus();
@@ -216,4 +214,5 @@
             this->hud_ = new OverlayGroup(this);
             this->hud_->addTemplate(this->hudtemplate_);
+            this->hud_->setOwner(this);
         }
     }
@@ -221,5 +220,4 @@
     void ControllableEntity::stopLocalHumanControl()
     {
-//        std::cout << "###### stop local control" << std::endl;
         this->camera_->detachFromParent();
         delete this->camera_;
@@ -244,5 +242,4 @@
             else if (this->bHasLocalController_)
             {
-//                COUT(2) << "setting client position" << endl;
                 this->client_velocity_ = this->velocity_;
                 this->client_position_ = this->node_->getPosition();
@@ -254,4 +251,5 @@
     {
         REGISTERSTRING(this->cameraPositionTemplate_, direction::toclient);
+        REGISTERSTRING(this->hudtemplate_, direction::toclient);
 
         REGISTERDATA(this->client_overwrite_,   direction::toserver);
@@ -304,10 +302,7 @@
         if (this->server_overwrite_ == this->client_overwrite_)
         {
-//            COUT(2) << "callback: setting client position" << endl;
             this->node_->setPosition(this->client_position_);
             this->server_position_ = this->client_position_;
         }
-//        else
-//          COUT(2) << "callback: not setting client position" << endl;
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/WorldEntity.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/WorldEntity.h	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/WorldEntity.h	(revision 2256)
@@ -72,4 +72,7 @@
             inline void translate(float x, float y, float z, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
                 { this->translate(Vector3(x, y, z), relativeTo); }
+
+            virtual inline const Vector3& getVelocity() const
+                { return Vector3::ZERO; }
 
             virtual void setOrientation(const Quaternion& orientation) = 0;
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2256)
@@ -61,4 +61,7 @@
         this->weaponSystem_->getWeaponSetPointer(0)->getWeaponSlotPointer(0)->setAmmoType(true);
         */
+
+        this->setRadarObjectColour(ColourValue::Red);
+        this->setRadarObjectShape(RadarViewable::Dot);
 
         this->registerVariables();
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2256)
@@ -33,8 +33,9 @@
 
 #include "objects/worldentities/ControllableEntity.h"
+#include "objects/RadarViewable.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport Pawn : public ControllableEntity
+    class _OrxonoxExport Pawn : public ControllableEntity, public RadarViewable
     {
         public:
@@ -78,4 +79,7 @@
             virtual void postSpawn();
 
+            inline const WorldEntity* getWorldEntity() const
+                { return (WorldEntity*)this; }
+
         protected:
             virtual void spawn();
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	(revision 2256)
@@ -229,3 +229,10 @@
         }
     }
+
+    void SpaceShip::setEngine(Engine* engine)
+    {
+        this->engine_ = engine;
+        if (engine && engine->getShip() != this)
+            engine->addToSpaceShip(this);
+    }
 }
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.h	(revision 2254)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/SpaceShip.h	(revision 2256)
@@ -58,4 +58,8 @@
             virtual void boost();
 
+            void setEngine(Engine* engine);
+            inline Engine* getEngine() const
+                { return this->engine_; }
+
             void setMaxRotation(const Degree& value)
                 { this->maxRotation_ = value; }
