Index: code/trunk/bin/keybindings.ini
===================================================================
--- code/trunk/bin/keybindings.ini	(revision 1361)
+++ code/trunk/bin/keybindings.ini	(revision 1362)
@@ -154,6 +154,6 @@
 MouseButton6=
 MouseButton7=
-MouseWheel1Up=#AxisAmp 0.1 slomo
-MouseWheel1Down=#AxisAmp 0.1 slomo
+MouseWheel1Up=AxisAmp 0.1 slomo
+MouseWheel1Down=AxisAmp 0.1 slomo
 MouseWheel2Up=
 MouseWheel2Down=
@@ -175,6 +175,6 @@
 JoyAxis4Neg=
 JoyAxis5Pos=
-JoyAxis5Neg=#AxisAmp 10 slomo | ButtonThreshold 0.9 | onPress exit
-JoyAxis6Pos=#AxisAmp  10 slomo
+JoyAxis5Neg= #AxisAmp 10 slomo | ButtonThreshold 0.9 | onPress exit
+JoyAxis6Pos= #AxisAmp  10 slomo
 JoyAxis6Neg=
 JoyAxis7Pos=
Index: code/trunk/bin/levels/sample.oxw
===================================================================
--- code/trunk/bin/levels/sample.oxw	(revision 1361)
+++ code/trunk/bin/levels/sample.oxw	(revision 1362)
@@ -11,6 +11,8 @@
 <!--Ambient colourvalue="1,1,1" /-->
 <Skybox src="Orxonox/StarSkyBox" />
-<SpaceShip camera="true" position="0,0,0" scale="10" yawpitchroll="-90,-90,0" mesh="assff.mesh" maxSpeed="500" maxSideAndBackSpeed="50" maxRotation="1.0" transAcc="200" rotAcc="3.0" transDamp="75" rotDamp="1.0" />
-
+<SpaceShip camera="true" position="0,0,0" scale="10" yawpitchroll="0,0,0" mesh="assff.mesh" maxSpeed="500" maxSideAndBackSpeed="50" maxRotation="1.0" transAcc="200" rotAcc="3.0" transDamp="75" rotDamp="1.0" />
+<Model position="1500,0,100" scale="10" mesh="tomato.mesh" yawpitchroll="-40,30,0" rotationAxis="1,0,0" rotationRate="-30"/>
+<Model position="0,4200,0" scale="10" mesh="tomato.mesh" yawpitchroll="-50,60,0" rotationAxis="1,0,0" rotationRate="-30"/>
+<Model position="0,0,6800" scale="10" mesh="tomato.mesh" yawpitchroll="-50,-30,0" rotationAxis="1,0,0" rotationRate="-30"/>
 <NPC position="0,100,400" scale="1" mesh="razor.mesh"/>
 <NPC position="0,100,400" scale="1" mesh="razor.mesh"/>
Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 1361)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 1362)
@@ -6,4 +6,7 @@
   console/InGameConsole.cc
   hud/HUD.cc
+  hud/BarOverlayElement.cc
+  hud/RadarOverlayElement.cc
+  hud/RadarObject.cc
   particle/ParticleInterface.cc
   tolua/tolua_bind.cc
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1361)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1362)
@@ -348,9 +348,5 @@
     // Load the HUD
     COUT(3) << "Orxonox: Loading HUD..." << std::endl;
-    Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2");
-    orxonoxHUD_ = new HUD();
-    orxonoxHUD_->setEnergyValue(20);
-    orxonoxHUD_->setEnergyDistr(20,20,60);
-    hudOverlay->show();
+    orxonoxHUD_ = new HUD(1);
 
     COUT(3) << "Orxonox: Loading Console..." << std::endl;
@@ -488,8 +484,8 @@
 
       // show the current time in the HUD
-      orxonoxHUD_->setTime((int)now, 0);
-      orxonoxHUD_->setRocket2(ogreRoot.getCurrentFrameNumber());
+//      orxonoxHUD_->setTime((int)now, 0);
+//      orxonoxHUD_->setRocket2(ogreRoot.getCurrentFrameNumber());
       if (eventTimes[3].back() - eventTimes[3].front() != 0)
-        orxonoxHUD_->setRocket1((int)(50000.0f/(eventTimes[3].back() - eventTimes[3].front())));
+//        orxonoxHUD_->setRocket1((int)(50000.0f/(eventTimes[3].back() - eventTimes[3].front())));
 
       // Iterate through all Tickables and call their tick(dt) function
Index: code/trunk/src/orxonox/console/InGameConsole.cc
===================================================================
--- code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1361)
+++ code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1362)
@@ -81,5 +81,5 @@
     }
 
-    void InGameConsole::execute(){
+    void InGameConsole::execute(){	
         newline();
         if (!CommandExecutor::execute(this->ib_->get())){
Index: code/trunk/src/orxonox/hud/BarOverlayElement.cc
===================================================================
--- code/trunk/src/orxonox/hud/BarOverlayElement.cc	(revision 1362)
+++ code/trunk/src/orxonox/hud/BarOverlayElement.cc	(revision 1362)
@@ -0,0 +1,129 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include "GraphicsEngine.h"
+#include "BarOverlayElement.h"
+
+namespace orxonox
+{
+  using namespace Ogre;
+
+    BarOverlayElement::BarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
+        name_ = name;
+    }
+
+    BarOverlayElement::~BarOverlayElement(){}
+
+    void BarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
+        // init some values...
+        container_ = container;
+        om = &Ogre::OverlayManager::getSingleton();
+        value_ = 0;
+        color_ = 2;
+        autoColor_ = true;
+        left2Right = false; 	// default is right to left progress
+        leftRel_ = leftRel;
+        topRel_ = topRel;
+        dimRel_ = dimRel;
+        
+        // create background...
+        background_ = static_cast<OverlayContainer*>(om->createOverlayElement("Panel", name_+"container"));
+        background_->show();
+        container_->addChild(background_);
+        background_->setMetricsMode(Ogre::GMM_PIXELS);
+        background_->setMaterialName("Orxonox/BarBackground");
+
+        // calculate absolute coordinates...
+        resize();
+
+        show();
+        setMetricsMode(Ogre::GMM_PIXELS);
+        setMaterialName("Orxonox/Green");
+        background_->addChild(this);
+    }
+
+    void BarOverlayElement::resize(){
+        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
+        // calculate new absolute coordinates...
+        left_ = (int) (leftRel_ * windowW_);
+        top_ = (int) (topRel_ * windowH_);
+        width_ = (int) (dimRel_ * windowW_);
+        height_ = (int) (0.1*width_);	// the texture has dimensions height:length = 1:10
+        // adapt background
+        background_->setPosition(left_, top_);
+        background_->setDimensions(width_, height_);
+        // adapt bar
+        setValue(value_);
+    }
+
+    void BarOverlayElement::setValue(float value){
+        value_ = value;
+        // set color, if nescessary
+        if(autoColor_){
+            if (value_>0.5) {setColor(BarOverlayElement::GREEN);}
+            else if (value_>0.25) {setColor(BarOverlayElement::YELLOW);}
+            else setColor(BarOverlayElement::RED);
+        }
+        // set value
+        if(left2Right){ // backward case
+            setPosition(0+width_-width_*value_, 0);
+            setDimensions(width_*value_,height_);
+        }else{          // default case
+            setPosition(0, 0);
+            setDimensions(width_*value_,height_);
+        }
+        if(value_ != 0) setTiling(value_, 1.0);
+    }
+
+    void BarOverlayElement::setColor(int color){
+        color_ = color;
+        switch(color){
+        case 0:
+            setMaterialName("Orxonox/Red");
+            break;
+        case 1:
+            setMaterialName("Orxonox/Yellow");
+            break;
+        case 2:
+            setMaterialName("Orxonox/Green");
+        }
+    }
+
+    float BarOverlayElement::getValue(){
+        return(value_);
+    }
+
+    int BarOverlayElement::getBarColor(){
+        return(color_);
+    }
+}
+
+
Index: code/trunk/src/orxonox/hud/BarOverlayElement.cc~
===================================================================
--- code/trunk/src/orxonox/hud/BarOverlayElement.cc~	(revision 1362)
+++ code/trunk/src/orxonox/hud/BarOverlayElement.cc~	(revision 1362)
@@ -0,0 +1,129 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include "GraphicsEngine.h"
+#include "BarOverlayElement.h"
+
+namespace orxonox
+{
+  using namespace Ogre;
+
+    BarOverlayElement::BarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
+        name_ = name;
+    }
+
+    BarOverlayElement::~BarOverlayElement(){}
+
+    void BarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
+        // init some values...
+        container_ = container;
+        om = &Ogre::OverlayManager::getSingleton();
+        value_ = 0;
+        color_ = 2;
+        autoColor_ = true;
+        left2Right = false; 	// default is right to left progress
+        leftRel_ = leftRel;
+        topRel_ = topRel;
+        dimRel_ = dimRel;
+        
+        // create background...
+        background_ = static_cast<OverlayContainer*>(om->createOverlayElement("Panel", name_+"container"));
+        background_->show();
+        container_->addChild(background_);
+        background_->setMetricsMode(Ogre::GMM_PIXELS);
+        background_->setMaterialName("Orxonox/BarBackground");
+
+        // calculate absolute coordinates...
+        resize();
+
+        show();
+        setMetricsMode(Ogre::GMM_PIXELS);
+        setMaterialName("Orxonox/Green");
+        background_->addChild(this);
+    }
+
+    void BarOverlayElement::resize(){
+        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
+        // calculate new absolute coordinates...
+        left_ = (int) (leftRel_ * windowW_);
+        top_ = (int) (topRel_ * windowH_);
+        width_ = (int) (dimRel_ * windowW_);
+        height_ = (int) (0.1*width_);	// the texture has dimensions height:length = 1:10
+        // adapt background
+        background_->setPosition(left_, top_);
+        background_->setDimensions(width_, height_);
+        // adapt bar
+        setValue(value_);
+    }
+
+    void BarOverlayElement::setValue(float value){
+        value_ = value;
+        // set color, if nescessary
+        if(autoColor_){
+            if (value_>0.5) {setColor(BarOverlayElement::GREEN);}
+            else if (value_>0.25) {setColor(BarOverlayElement::YELLOW);}
+            else setColor(BarOverlayElement::RED);
+        }
+        // set value
+        if(left2Right){ // backward case
+            setPosition(0+width_-width_*value_, 0);
+            setDimensions(width_*value_,height_);
+        }else{          // default case
+            setPosition(0, 0);
+            setDimensions(width_*value_,height_);
+        }
+        if(value_ != 0) setTiling(value_, 1.0);
+    }
+
+    void BarOverlayElement::setColor(int color){
+        color_ = color;
+        switch(color){
+        case 0:
+            setMaterialName("Orxonox/Red");
+            break;
+        case 1:
+            setMaterialName("Orxonox/Yellow");
+            break;
+        case 2:
+            setMaterialName("Orxonox/Green");
+        }
+    }
+
+    float BarOverlayElement::getValue(){
+        return(value_);
+    }
+
+    int BarOverlayElement::getBarColor(){
+        return(color_);
+    }
+}
+
+
Index: code/trunk/src/orxonox/hud/BarOverlayElement.h
===================================================================
--- code/trunk/src/orxonox/hud/BarOverlayElement.h	(revision 1362)
+++ code/trunk/src/orxonox/hud/BarOverlayElement.h	(revision 1362)
@@ -0,0 +1,80 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
+
+#ifndef _BAR_H__
+#define _BAR_H__
+
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+
+#include <OgrePrerequisites.h>
+#include "../OrxonoxPrereqs.h"
+
+
+
+namespace orxonox
+{
+  class _OrxonoxExport BarOverlayElement : public Ogre::PanelOverlayElement
+  {
+    private:
+        bool autoColor_;                    // whether bar changes color automatically
+        float value_;                       // progress of bar
+        int color_;
+        int left_;
+        int top_;
+        int width_;
+        int height_;
+        int windowW_, windowH_;
+        Ogre::Real leftRel_;
+        Ogre::Real topRel_;
+        Ogre::Real dimRel_;
+        Ogre::OverlayManager* om;           // our overlay manager
+        Ogre::OverlayContainer* container_; // our parent container to attach to
+        Ogre::OverlayContainer* background_;
+        Ogre::String name_;
+
+    public:
+        bool left2Right;
+        static const int RED = 0;           // predefined colors
+        static const int YELLOW = 1;
+        static const int GREEN = 2;
+
+        BarOverlayElement(const Ogre::String& name);
+        virtual ~BarOverlayElement();
+        void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
+        void resize();
+        void setValue(float value);
+        void setColor(int color);
+        float getValue();
+        int getBarColor();
+    };
+}
+#endif
+
+
Index: code/trunk/src/orxonox/hud/BarOverlayElement.h~
===================================================================
--- code/trunk/src/orxonox/hud/BarOverlayElement.h~	(revision 1362)
+++ code/trunk/src/orxonox/hud/BarOverlayElement.h~	(revision 1362)
@@ -0,0 +1,81 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
+
+#ifndef _BAR_H__
+#define _BAR_H__
+
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+
+#include <OgrePrerequisites.h>
+#include "../OrxonoxPrereqs.h"
+
+
+
+namespace orxonox
+{
+  class _OrxonoxExport BarOverlayElement : public Ogre::PanelOverlayElement
+  {
+    private:
+        bool autoColor_;                    // whether bar changes color automatically
+        float value_;                       // progress of bar
+        int color_;
+        int left_;
+        int top_;
+        int width_;
+        int height_;
+        int windowW_, windowH_;
+        Ogre::Real leftRel_;
+        Ogre::Real topRel_;
+        Ogre::Real widthRel_;
+        Ogre::Real heightRel_;
+        Ogre::OverlayManager* om;           // our overlay manager
+        Ogre::OverlayContainer* container_; // our parent container to attach to
+        Ogre::OverlayContainer* background_;
+        Ogre::String name_;
+
+    public:
+        bool left2Right;
+        static const int RED = 0;           // predefined colors
+        static const int YELLOW = 1;
+        static const int GREEN = 2;
+
+        BarOverlayElement(const Ogre::String& name);
+        virtual ~BarOverlayElement();
+        void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
+        void resize();
+        void setValue(float value);
+        void setColor(int color);
+        float getValue();
+        int getBarColor();
+    };
+}
+#endif
+
+
Index: code/trunk/src/orxonox/hud/HUD.cc
===================================================================
--- code/trunk/src/orxonox/hud/HUD.cc	(revision 1361)
+++ code/trunk/src/orxonox/hud/HUD.cc	(revision 1362)
@@ -1,218 +1,123 @@
 /*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Yuning Chai
- *   Co-authors:
- *      ...
- *
- */
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
 
 #include "OrxonoxStableHeaders.h"
+#include <OgreOverlay.h>
+#include <OgreOverlayContainer.h>
+#include <OgreOverlayManager.h>
+#include <OgreSceneNode.h>
+#include <OgreEntity.h>
+#include <OgreStringConverter.h>
+#include "core/Debug.h"
+#include "objects/SpaceShip.h"
 #include "HUD.h"
-
-#include <OgreOverlayManager.h>
-#include <OgreOverlayElement.h>
-#include <OgreStringConverter.h>
-
+#include "BarOverlayElement.h"
+#include "RadarOverlayElement.h"
+#include "OverlayElementFactories.h"
 
 namespace orxonox
 {
-  using namespace Ogre;
+    using namespace Ogre;
 
-  HUD::HUD(void)
-  {
-    init();
+    HUD::HUD(int zoom){
+        om = &Ogre::OverlayManager::getSingleton();
 
-    setTime(99,55);
+		// create Factories
+        BarOverlayElementFactory *barOverlayElementFactory = new BarOverlayElementFactory();
+        om->addOverlayElementFactory(barOverlayElementFactory);
+        RadarOverlayElementFactory *radarOverlayElementFactory = new RadarOverlayElementFactory();
+        om->addOverlayElementFactory(radarOverlayElementFactory);
 
-    setTargetWindowName("HURRA");
-    setTargetWindowDistance(12);
-    setTargetWindowStatus("Dead");
-    setTargetWindowDistance(30);
+        orxonoxHUD = om->create("Orxonox/HUD");
+        container = static_cast<Ogre::OverlayContainer*>(om->createOverlayElement("Panel", "Orxonox/HUD/container"));
+        // test
+        test = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "test123"));
+        test->show();
+        test->setMetricsMode(Ogre::GMM_RELATIVE);
+        test->setDimensions(0.8, 0.8);
+        test->setPosition(0.02, 0.02);
+        test->setFontName("Console");
+        test->setCaption("init");
 
-    setEnergyValue(60);
+        // create energy bar
+        energyBar = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "energyBar"));
+        energyBar->show();
+        // create speedo bar
+        speedoBar = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "speedoBar"));
+        speedoBar->show();
+        // create radar
+        radar = static_cast<RadarOverlayElement*>(om->createOverlayElement("Radar", "radar"));
+        radar->show();
 
-    setShieldLeftTopValue(true);
-    setShieldRightTopValue(false);
-    setShieldLeftBottomValue(false);
-    setShieldRightBottomValue(true);
+		// set up screen-wide container
+        container->show();
 
-    setRocket1(11);
-    setRocket2(22);
-    setRocket3(33);
-    setRocket4(44);
+        orxonoxHUD->add2D(container);
+        orxonoxHUD->show();
+        container->setLeft(0.0);
+        container->setTop(0.0);
+        container->setWidth(1.0);
+        container->setHeight(1.0);
+        container->setMetricsMode(Ogre::GMM_RELATIVE);
+        container->addChild(test);
+        energyBar->init(0.01, 0.94, 0.4, container);
+        energyBar->setValue(1);
+        speedoBar->init(0.01, 0.90, 0.4, container);
+        radar->init(0.5, 0.9, 0.2, container);
+        radar->addObject(Vector3(1500.0, 0.0, 100.0));
+        radar->addObject(Vector3(0.0, 4000.0, 0.0));
+        radar->addObject(Vector3(0.0, 0.0, 6800.0));
+        RadarOverlayElement::cycleFocus();
+    }
 
-    setEnergyDistr(33,33,34);
+    void HUD::tick(float dt)
+    {
+        int d = radar->getDist2Focus()/10;
+        if(d) test->setCaption("Distance: " + Ogre::StringConverter::toString(d));
+        else test->setCaption("");
 
-    setPrimar(3);
+        energyBar->resize();
 
-    energyDistrPixelX_ = 100;
-    energyDistrPixelY_ = 86;
+        float v = SpaceShip::instance_s->getVelocity().length();
+        float vmax = SpaceShip::instance_s->getMaxSpeed();
+        speedoBar->setValue(v/vmax);
+        speedoBar->resize();
 
-  }
+        radar->resize();
+        radar->update();
+    }
 
-
-  HUD::~HUD( void ){
-
-  }
-
-  void HUD::setTime(int i, int j){
-    timeMin_=i;
-    timeSec_=j;
-    timeText_->setCaption(StringConverter::toString(timeMin_) + ":" + StringConverter::toString(timeSec_));
-  }
-
-  void HUD::setTargetWindowName(std::string i){
-    targetWindowName_=i;
-    targetWindowNameText_->setCaption( targetWindowName_ );
-  }
-
-  void HUD::setTargetWindowStatus(std::string i){
-    targetWindowStatus_=i;
-    targetWindowStatusText_->setCaption( targetWindowStatus_ );
-  }
-
-  void HUD::setTargetWindowDistance(int i){
-    targetWindowDistance_=i;
-    targetWindowDistanceText_->setCaption(StringConverter::toString(targetWindowDistance_) + "km" );
-  }
-
-  void HUD::setTargetWindowHitRating(int i){
-    targetWindowHitRating_=i;
-    targetWindowHitRatingText_->setCaption(StringConverter::toString(targetWindowHitRating_) + "%" );
-  }
-
-  void HUD::setEnergyValue(int i){
-    energyValue_=i;
-    energyLength_->setWidth((int)((float)energyValue_/(float)100*200));
-  }
-
-  void HUD::setShieldLeftTopValue(bool i){
-    shieldLeftTopValue_=i;
-    if (shieldLeftTopValue_) shieldLeftTop_->show();
-    else shieldLeftTop_->hide();
-  }
-
-  void HUD::setShieldRightTopValue(bool i){
-    shieldRightTopValue_=i;
-    if (shieldRightTopValue_) shieldRightTop_->show();
-    else shieldRightTop_->hide();
-  }
-
-  void HUD::setShieldLeftBottomValue(bool i){
-    shieldLeftBottomValue_=i;
-    if (shieldLeftBottomValue_) shieldLeftBottom_->show();
-    else shieldLeftBottom_->hide();
-  }
-
-  void HUD::setShieldRightBottomValue(bool i){
-    shieldRightBottomValue_=i;
-    if (shieldRightBottomValue_) shieldRightBottom_->show();
-    else shieldRightBottom_->hide();
-  }
-
-  void HUD::setRocket1(int i){
-    rocket1_=i;
-    rocketNum1_->setCaption(StringConverter::toString(rocket1_));
-  }
-
-  void HUD::setRocket2(int i){
-    rocket2_=i;
-    rocketNum2_->setCaption(StringConverter::toString(rocket2_));
-  }
-
-  void HUD::setRocket3(int i){
-    rocket3_=i;
-    rocketNum3_->setCaption(StringConverter::toString(rocket3_));
-  }
-
-  void HUD::setRocket4(int i){
-    rocket4_=i;
-    rocketNum4_->setCaption(StringConverter::toString(rocket4_));
-  }
-
-  void HUD::setEnergyDistr(float s, float e, float l){
-    energyDistrShield_=s;
-    energyDistrEngine_=e;
-    energyDistrLaser_=l;
-
-    float energyDistrShieldInv_ = 100 - energyDistrShield_;
-    float energyDistrEngineInv_ = 100 - energyDistrEngine_;
-    float energyDistrLaserInv_ = 100 - energyDistrLaser_;
-
-    float energyDistrT_ = -energyDistrPixelX_/((energyDistrPixelX_-energyDistrPixelX_/2*energyDistrShieldInv_/(energyDistrShieldInv_+energyDistrEngineInv_))*energyDistrLaserInv_*(energyDistrShieldInv_+energyDistrEngineInv_)/energyDistrShieldInv_/(energyDistrLaserInv_+energyDistrEngineInv_)+energyDistrPixelX_/2+energyDistrPixelX_/2*energyDistrEngineInv_/(energyDistrEngineInv_+energyDistrLaserInv_));
-    float energyDistrX_ = (-energyDistrPixelX_/2-energyDistrPixelX_/2*energyDistrEngineInv_/(energyDistrEngineInv_+energyDistrLaserInv_))*energyDistrT_;
-    float energyDistrY_ = energyDistrPixelY_+energyDistrPixelY_*energyDistrLaserInv_/(energyDistrLaserInv_+energyDistrEngineInv_)*energyDistrT_;
-
-    energyDistrPoint_->setLeft((int)energyDistrX_-3);
-    energyDistrPoint_->setTop((int)energyDistrY_-3);
-
-  }
-
-  void HUD::setPrimar(int i){
-    primarValue_=i;
-    if(i==1){
-      primarChoice_->setLeft(2);
-      primarChoice_->setWidth(48);
+    HUD::~HUD(void){
     }
-    if(i==2){
-      primarChoice_->setLeft(51);
-      primarChoice_->setWidth(49);
-    }
-    else{
-      primarChoice_->setLeft(101);
-      primarChoice_->setWidth(48);
-    }
-  }
+}
 
 
 
-  void HUD::init(void)
-  {
-    timeText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/Time/Text");
 
-    targetWindowNameText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/Name");
-    targetWindowDistanceText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/DistanceText");
-    targetWindowStatusText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/StatusText");
-    targetWindowHitRatingText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/HitRatingText");
 
-    energyLength_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/EnergyBackground");
 
-    shieldLeftTop_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldLeftTop");
-    shieldRightTop_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldRightTop");
-    shieldLeftBottom_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldLeftBottom");
-    shieldRightBottom_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldRightBottom");
-
-    rocketNum1_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum1");
-    rocketNum2_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum2");
-    rocketNum3_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum3");
-    rocketNum4_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum4");
-
-    // FIXME: unused vars!
-    float energyDistrPixelX_ = 100;
-    float energyDistrPixelY_ = 86;
-    energyDistrPoint_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/EnergyDistrPoint");
-
-    primarChoice_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/PrimarChoice");
-  }
-
-}
Index: code/trunk/src/orxonox/hud/HUD.h
===================================================================
--- code/trunk/src/orxonox/hud/HUD.h	(revision 1361)
+++ code/trunk/src/orxonox/hud/HUD.h	(revision 1362)
@@ -1,115 +1,64 @@
 /*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Yuning Chai
- *   Co-authors:
- *      ...
- *
- */
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
 
 #ifndef _HUD_H__
 #define _HUD_H__
 
+#include <string.h>
+#include <OgreOverlayElement.h>
+#include <OgreTextAreaOverlayElement.h>
+#include <OgrePrerequisites.h>
+
 #include "OrxonoxPrereqs.h"
-
-#include <string>
-
-#include <OgrePrerequisites.h>
+#include "core/Tickable.h"
+#include "BarOverlayElement.h"
+#include "RadarOverlayElement.h"
 
 
 namespace orxonox
 {
-  class _OrxonoxExport HUD
-  {
-  private:
-    Ogre::OverlayElement* timeText_;
-    Ogre::OverlayElement* targetWindowNameText_;
-    Ogre::OverlayElement* targetWindowStatusText_;
-    Ogre::OverlayElement* targetWindowDistanceText_;
-    Ogre::OverlayElement* targetWindowHitRatingText_;
-    Ogre::OverlayElement* energyLength_;
-    Ogre::OverlayElement* shieldLeftTop_;
-    Ogre::OverlayElement* shieldRightTop_;
-    Ogre::OverlayElement* shieldLeftBottom_;
-    Ogre::OverlayElement* shieldRightBottom_;
-    Ogre::OverlayElement* rocketNum1_;
-    Ogre::OverlayElement* rocketNum2_;
-    Ogre::OverlayElement* rocketNum3_;
-    Ogre::OverlayElement* rocketNum4_;
-    Ogre::OverlayElement* energyDistrPoint_;
-    Ogre::OverlayElement* primarChoice_;
+    class _OrxonoxExport HUD : public Tickable
+    {
+        private:
+            Ogre::OverlayManager* om;
+            Ogre::Overlay* orxonoxHUD;
+            Ogre::OverlayContainer* container;
+            Ogre::TextAreaOverlayElement* test;
+            BarOverlayElement* energyBar;
+            BarOverlayElement* speedoBar;
+            RadarOverlayElement* radar;
 
-    int timeMin_;
-    int timeSec_;
+        public:
+            HUD(int zoom);
+            ~HUD();
+            virtual void tick(float);
 
-    std::string targetWindowName_;
-    std::string targetWindowStatus_;
-    int targetWindowDistance_;
-    int targetWindowHitRating_;
-
-    int energyValue_;
-
-    bool shieldLeftTopValue_;
-    bool shieldRightTopValue_;
-    bool shieldLeftBottomValue_;
-    bool shieldRightBottomValue_;
-
-    int rocket1_;
-    int rocket2_;
-    int rocket3_;
-    int rocket4_;
-
-    float energyDistrShield_;
-    float energyDistrEngine_;
-    float energyDistrLaser_;
-
-    float energyDistrPixelX_;
-    float energyDistrPixelY_;
-
-    int primarValue_;
-
-  public:
-    HUD( void );
-    ~HUD( void );
-    void init( void );
-
-    void setTime(int i, int j);
-    void setTargetWindowName(std::string i);
-    void setTargetWindowStatus(std::string i);
-    void setTargetWindowDistance(int i);
-    void setTargetWindowHitRating(int i);
-    void setEnergyValue(int i);
-    void setShieldLeftTopValue(bool i);
-    void setShieldRightTopValue(bool i);
-    void setShieldLeftBottomValue(bool i);
-    void setShieldRightBottomValue(bool i);
-    void setRocket1(int i);
-    void setRocket2(int i);
-    void setRocket3(int i);
-    void setRocket4(int i);
-    void setEnergyDistr(float s, float e, float l);
-    void setPrimar(int i);
-
-  };
+    };
 }
 
-#endif /* _HUD_H__ */
+#endif
Index: code/trunk/src/orxonox/hud/OverlayElementFactories.h
===================================================================
--- code/trunk/src/orxonox/hud/OverlayElementFactories.h	(revision 1362)
+++ code/trunk/src/orxonox/hud/OverlayElementFactories.h	(revision 1362)
@@ -0,0 +1,61 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      Felix Schulthess
+*
+*/
+
+#ifndef _FACTORIES_H__
+#define _FACTORIES_H__
+
+#include <OgreOverlayElement.h>
+#include <OgrePrerequisites.h>
+#include <OgreOverlayElementFactory.h>
+
+#include "BarOverlayElement.h"
+
+namespace orxonox{
+    class _OrxonoxExport BarOverlayElementFactory : public Ogre::OverlayElementFactory{
+        public:
+        Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
+            return new BarOverlayElement(instanceName);
+        }
+        const Ogre::String& getTypeName(void) const{
+            static Ogre::String name = "Bar";
+            return name;
+        }
+    };
+
+    class _OrxonoxExport RadarOverlayElementFactory : public Ogre::OverlayElementFactory{
+        public:
+        Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
+            return new RadarOverlayElement(instanceName);
+        }
+        const Ogre::String& getTypeName(void) const{
+            static Ogre::String name = "Radar";
+            return name;
+        }
+    };
+}
+
+#endif
Index: code/trunk/src/orxonox/hud/OverlayElementFactories.h~
===================================================================
--- code/trunk/src/orxonox/hud/OverlayElementFactories.h~	(revision 1362)
+++ code/trunk/src/orxonox/hud/OverlayElementFactories.h~	(revision 1362)
@@ -0,0 +1,69 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+#ifndef _FACTORIES_H__
+#define _FACTORIES_H__
+
+
+#include <OgreOverlayElement.h>
+#include <OgrePrerequisites.h>
+#include <OgreOverlayElementFactory.h>
+
+#include "BarOverlayElement.h"
+
+
+namespace orxonox{
+
+  class _OrxonoxExport BarOverlayElementFactory : public Ogre::OverlayElementFactory{
+    public:
+    Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
+      return new BarOverlayElement(instanceName);
+    }
+    const Ogre::String& getTypeName(void) const{
+      static Ogre::String name = "Bar";
+      return name;
+    }
+  };
+
+
+  class _OrxonoxExport SmartBarOverlayElementFactory : public Ogre::OverlayElementFactory{
+    public:
+    Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
+      return new SmartBarOverlayElement(instanceName);
+    }
+    const Ogre::String& getTypeName(void) const{
+      static Ogre::String name = "SmartBar";
+      return name;
+    }
+  };
+
+}
+
+
+
+
+#endif
Index: code/trunk/src/orxonox/hud/RadarObject.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1362)
@@ -0,0 +1,69 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Felix Schulthess
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "RadarObject.h"
+
+namespace orxonox
+{
+    using namespace Ogre;
+
+	int RadarObject::count = 0;		// initialize static variable
+
+	RadarObject::RadarObject(Ogre::OverlayContainer* container){
+		container_ = container;
+		pos_ = Vector3(0.0, 0.0, 0.0);
+		init();
+	}
+
+	RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){
+		container_ = container;
+		pos_ = pos;
+		init();
+	}
+
+	RadarObject::~RadarObject(){}
+
+	void RadarObject::init(){
+	    next = NULL;
+		om = &Ogre::OverlayManager::getSingleton();
+		panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
+			"Object"+Ogre::StringConverter::toString(count)));
+		panel_->setMaterialName("Orxonox/RedDot");
+		panel_->setDimensions(3,3);
+        panel_->setMetricsMode(Ogre::GMM_PIXELS);
+        panel_->show();
+        index_ = count;
+        count++;
+        container_->addChild(panel_);
+	}
+}
+
+/* my local clipboard...
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+*/
Index: code/trunk/src/orxonox/hud/RadarObject.h
===================================================================
--- code/trunk/src/orxonox/hud/RadarObject.h	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarObject.h	(revision 1362)
@@ -0,0 +1,66 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+#ifndef _RADAR2_H__
+#define _RADAR2_H__
+
+#include <string.h>
+#include <OgrePrerequisites.h>
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include <OgreStringConverter.h>
+
+#include <util/Math.h>
+#include "../OrxonoxPrereqs.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport RadarObject
+    {
+    	private:
+    		Ogre::OverlayManager* om;				// our one and only overlay manager
+    		void init();
+
+    	public:
+    		RadarObject(Ogre::OverlayContainer* container);
+    		RadarObject(Ogre::OverlayContainer* container, Vector3 pos);
+    		~RadarObject();
+
+            bool right_;
+            int index_;                             // index number of object
+    		Vector3 pos_;							// position in space
+			Ogre::Real radius_, phi_;				// position on radar
+			Ogre::OverlayContainer* container_;
+			Ogre::PanelOverlayElement* panel_;		// the panel used to show the dot
+			RadarObject* next;                      // next pointer of linked list
+
+    		static int count;
+	};
+}
+
+#endif
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1362)
@@ -0,0 +1,232 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "RadarOverlayElement.h"
+
+namespace orxonox
+{
+    ConsoleCommandShortcut(RadarOverlayElement, cycleFocus, AccessLevel::User);
+
+    using namespace Ogre;
+
+    RadarOverlayElement* RadarOverlayElement::instance_s = NULL;
+
+    RadarOverlayElement::RadarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
+        RadarOverlayElement::instance_s = this;
+    }
+
+    RadarOverlayElement::~RadarOverlayElement(){
+    }
+
+    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
+        // some initial data
+		om = &Ogre::OverlayManager::getSingleton();
+        dimRel_ = dimRel;
+        leftRel_ = leftRel;
+        topRel_ = topRel;
+        container_ = container;
+        firstRadarObject_ = NULL;
+        lastRadarObject_ = NULL;
+        focus_ = NULL;
+
+        // create nav marker ...
+        navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
+        navMarker_->setMetricsMode(Ogre::GMM_PIXELS);
+        navMarker_->setMaterialName("Orxonox/NavMarker");
+        navMarker_->setDimensions(16,16);
+        navMarker_->setPosition(0,386);
+        navMarker_->hide();
+        container_->addChild(navMarker_);
+
+        // these have to fit the data in the level
+        shipPos_ = Vector3(0.0, 0.0, 0.0);
+        initialDir_ = Vector3(1.0, 0.0, 0.0);
+        currentDir_ = initialDir_;
+        initialOrth_ = Vector3(0.0, 0.0, 1.0);
+        currentOrth_ = initialOrth_;
+        plane = Plane(currentDir_, shipPos_);
+
+        setMetricsMode(Ogre::GMM_PIXELS);
+        setMaterialName("Orxonox/Radar");
+        resize();
+
+        container_->addChild(this);
+    }
+
+    void RadarOverlayElement::resize() {
+        // if window is resized, we must adapt these...
+        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
+        dim_ = (int) (dimRel_*windowH_);
+        left_ = (int) (leftRel_*windowW_-dim_/2);
+        top_ = (int) (topRel_*windowH_-dim_/2);
+        setPosition(left_, top_);
+        setDimensions(dim_,dim_);
+    }
+
+    void RadarOverlayElement::update() {
+        shipPos_ = SpaceShip::instance_s->getPosition();
+        currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_; 		// according to beni....
+		currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
+        plane = Plane(currentDir_, shipPos_);
+
+        RadarObject* ro = firstRadarObject_;
+        // iterate through all RadarObjects
+		while(ro != NULL){
+		    // calc position on radar...
+            ro->radius_ = calcRadius(ro);
+            ro->phi_ = calcPhi(ro);
+            ro->right_ = calcRight(ro);
+
+            // set size to fit distance...
+            float d = (ro->pos_-shipPos_).length();
+            if(d<4000) ro->panel_->setDimensions(4,4);
+            else if(d<8000) ro->panel_->setDimensions(3,3);
+            else if(d<16000) ro->panel_->setDimensions(2,2);
+            else ro->panel_->setDimensions(1,1);
+
+            if (ro->right_){
+                ro->panel_->setPosition(sin(ro->phi_)*ro->radius_/
+                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
+            }
+            else {
+                ro->panel_->setPosition(-sin(ro->phi_)*ro->radius_/
+                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
+            }
+            ro = ro->next;
+		}
+		updateNavMarker();
+    }
+
+    void RadarOverlayElement::updateNavMarker(){
+        if(focus_ == NULL) return;
+        // from the angle we find out where to draw the marker
+        // and which of the four arrows to take
+        float r1 = atan((float)(windowW_)/(float)(windowH_));
+        float phi = focus_->phi_;
+        if(focus_->right_){
+            if(phi<r1){
+                navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, 0);
+                navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
+            }
+            else if(phi>3.14-r1){
+                navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, windowH_-16);
+                navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
+            }
+            else {
+                navMarker_->setPosition(windowW_-16, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
+                navMarker_->setUV(0.5, 0.5, 1.0, 1.0);
+            }
+        }
+        else{
+            if(phi<r1) {
+                navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, 0);
+                navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
+            }
+            else if(phi>3.14-r1) {
+                navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, windowH_-16);
+                navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
+            }
+            else {
+                navMarker_->setPosition(0, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
+                navMarker_->setUV(0.0, 0.0, 0.5, 0.5);
+            }
+        }
+    }
+
+    void RadarOverlayElement::addObject(Vector3 pos){
+        if(firstRadarObject_ == NULL){
+            firstRadarObject_ = new RadarObject(container_, pos);
+            lastRadarObject_ = firstRadarObject_;
+        }
+        else{
+            lastRadarObject_->next = new RadarObject(container_, pos);
+            lastRadarObject_ = lastRadarObject_->next;
+        }
+	}
+
+	void RadarOverlayElement::listObjects(){
+	    int i = 0;
+	    RadarObject* ro = firstRadarObject_;
+	    COUT(3) << "List of RadarObjects:\n";
+	    // iterate through all Radar Objects
+	    while(ro != NULL) {
+	        COUT(3) << i++ << ": " << ro->pos_ << std::endl;
+	        ro = ro->next;
+	    }
+	}
+
+	float RadarOverlayElement::getDist2Focus(){
+	    if(focus_ == NULL) return(0.0);
+	    return((focus_->pos_-shipPos_).length());
+	}
+
+	float RadarOverlayElement::calcRadius(RadarObject* obj){
+	    return(acos((currentDir_.dotProduct(obj->pos_ - shipPos_))/
+			((obj->pos_ - shipPos_).length()*currentDir_.length())));
+	}
+
+	float RadarOverlayElement::calcPhi(RadarObject* obj){
+	    // project difference vector on our plane...
+	    Ogre::Vector3 proj = plane.projectVector(obj->pos_ - shipPos_);
+	    // ...and find out the angle
+	    return(acos((currentOrth_.dotProduct(proj))/
+            (currentOrth_.length()*proj.length())));
+	}
+
+	bool RadarOverlayElement::calcRight(RadarObject* obj){
+	    if((currentDir_.crossProduct(currentOrth_)).dotProduct(obj->pos_ - shipPos_) > 0)
+        	return true;
+        else return false;
+	}
+
+	/*static*/void RadarOverlayElement::cycleFocus(){
+	    if(RadarOverlayElement::instance_s == NULL) return;
+
+	    if(RadarOverlayElement::instance_s->focus_ == NULL){
+            RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->firstRadarObject_;
+	    }
+        else{
+            RadarOverlayElement::instance_s->focus_->panel_->setMaterialName("Orxonox/RedDot");
+            RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->focus_->next;
+        }
+
+        if(RadarOverlayElement::instance_s->focus_ == NULL){
+            RadarOverlayElement::instance_s->navMarker_->hide();
+        }
+        else{
+            RadarOverlayElement::instance_s->navMarker_->show();
+            RadarOverlayElement::instance_s->focus_->panel_->setMaterialName("Orxonox/WhiteDot");
+        }
+	}
+}
+
+/* my local clipboard...
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+*/
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.cc~
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.cc~	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.cc~	(revision 1362)
@@ -0,0 +1,188 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+/*	local coordinate system of space ship at the beginning:
+
+			y
+			+   z
+			|  +
+			| /
+			|/
+   x +------O
+*/
+
+#include <OgreOverlayManager.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include <OgreStringConverter.h>
+#include "RadarOverlayElement.h"
+#include "GraphicsEngine.h"
+
+namespace orxonox
+{
+    using namespace Ogre;
+
+    RadarOverlayElement::RadarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
+    }
+
+    RadarOverlayElement::~RadarOverlayElement(){
+    }
+
+    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
+        // some initial data
+		om = &Ogre::OverlayManager::getSingleton();
+        dimRel_ = dimRel;
+        leftRel_ = leftRel;
+        topRel_ = topRel;
+        container_ = container;
+        firstRadarObject_ = NULL;
+        lastRadarObject_ = NULL;
+
+        // these have to fit the data in the level
+        shipPos_ = Vector3(0.0, 0.0, 0.0);
+        initialDir_ = Vector3(1.0, 0.0, 0.0);
+        currentDir_ = initialDir_;
+        initialOrth_ = Vector3(0.0, 0.0, 1.0);
+        currentOrth_ = initialOrth_;
+
+        setMetricsMode(Ogre::GMM_PIXELS);
+        setMaterialName("Orxonox/Radar");
+        resize();
+
+        container_->addChild(this);
+    }
+
+    void RadarOverlayElement::resize() {
+        // if window is resized, we must adapt these...
+        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
+        dim_ = (int) (dimRel_*windowH_);
+        left_ = (int) (leftRel_*windowW_-dim_/2);
+        top_ = (int) (topRel_*windowH_-dim_/2);
+        setPosition(left_, top_);
+        setDimensions(dim_,dim_);
+    }
+
+    void RadarOverlayElement::update() {
+        shipPos_ = SpaceShip::instance_s->getPosition();
+        currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_; 		// according to beni....
+		currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
+
+        RadarObject* ro = firstRadarObject_;
+        // iterate through all RadarObjects
+		while(ro != NULL){
+            ro->radius_ = calcRadius(ro);
+            ro->phi_ = calcPhi(ro);
+            ro->right_ = calcRight(ro);
+            if (ro->right_){
+                ro->panel_->setPosition(sin(ro->phi_)*ro->radius_/
+                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
+            }
+            else {
+                ro->panel_->setPosition(-sin(ro->phi_)*ro->radius_/
+                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
+            }
+            ro = ro->next;
+		}
+    }
+
+    void RadarOverlayElement::addObject(Vector3 pos){
+        if(firstRadarObject_ == NULL){
+            firstRadarObject_ = new RadarObject(container_);
+            firstRadarObject_->pos_ = pos;
+            lastRadarObject_ = firstRadarObject_;
+        }
+        else{
+            lastRadarObject_->next = new RadarObject(container_);
+            lastRadarObject_->next->pos_ = pos;
+            lastRadarObject_ = lastRadarObject_->next;
+        }
+	}
+
+	void RadarOverlayElement::listObjects(){
+	    int i = 0;
+	    RadarObject* ro = firstRadarObject_;
+	    COUT(3) << "List of RadarObjects:\n";
+	    // iterate through all Radar Objects
+	    while(ro != NULL) {
+	        COUT(3) << i++ << ": " << ro->pos_ << std::endl;
+	        ro = ro->next;
+	    }
+	}
+
+	float RadarOverlayElement::calcRadius(RadarObject* obj){
+	    return(acos((currentDir_.dotProduct(obj->pos_ - shipPos_))/
+			((obj->pos_ - shipPos_).length()*currentDir_.length())));
+	}
+
+	float RadarOverlayElement::calcPhi(RadarObject* obj){
+	    return(acos((currentOrth_.dotProduct(firstRadarObject_->pos_ - shipPos_))/
+        	((firstRadarObject_->pos_ - shipPos_).length()*currentOrth_.length())));
+	}
+
+	bool RadarOverlayElement::calcRight(RadarObject* obj){
+	    if((currentDir_.crossProduct(currentOrth_)).dotProduct(obj->pos_ - shipPos_) > 0)
+        	return true;
+        else return false;
+	}
+
+//////// RadarObject ////////
+
+	int RadarObject::count = 0;		// initialize static variable
+
+	RadarObject::RadarObject(Ogre::OverlayContainer* container){
+		container_ = container;
+		pos_ = Vector3(0.0, 0.0, 0.0);
+		init();
+	}
+
+	RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){
+		container_ = container;
+		pos_ = pos;
+		init();
+	}
+
+	RadarObject::~RadarObject(){}
+
+	void RadarObject::init(){
+	    next = NULL;
+		om = &Ogre::OverlayManager::getSingleton();
+		panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
+			"Object"+Ogre::StringConverter::toString(count++)));
+		panel_->setMaterialName("Orxonox/RedDot");
+		panel_->setDimensions(5,5);
+        panel_->setMetricsMode(Ogre::GMM_PIXELS);
+        panel_->show();
+        container_->addChild(panel_);
+	}
+}
+
+/* my local clipboard...
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
+COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
+*/
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.h
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.h	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.h	(revision 1362)
@@ -0,0 +1,89 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+#ifndef _RADAR_H__
+#define _RADAR_H__
+
+#include <string.h>
+#include <OgreOverlayManager.h>
+#include <OgreStringConverter.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include <OgrePrerequisites.h>
+
+#include <util/Math.h>
+#include <string.h>
+#include "core/Tickable.h"
+#include "core/ConsoleCommand.h"
+#include "objects/SpaceShip.h"
+#include "../OrxonoxPrereqs.h"
+#include "RadarObject.h"
+#include "GraphicsEngine.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport RadarOverlayElement : public Ogre::PanelOverlayElement
+    {
+        private:
+            Ogre::OverlayManager* om;               // our one and only overlay manager
+            Ogre::OverlayContainer* container_;     // pointer to the container we're in
+            Vector3 initialDir_;	                // direction of nose
+            Vector3 currentDir_;
+            Vector3 initialOrth_;                   // direction of normal
+            Vector3 currentOrth_;
+            Vector3 shipPos_;                       // position of ship
+            Ogre::Plane plane;                      // plane perpendicular to dir
+
+            Ogre::Real leftRel_, topRel_, dimRel_;  // relative position/dimension
+            int left_, top_, dim_;                  // absolute position/dimension
+            int windowW_, windowH_;             	// absolute window dimensions
+
+        public:
+            RadarOverlayElement(const Ogre::String& name);
+            ~RadarOverlayElement();
+            void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
+			void resize();
+            void update();
+            void updateNavMarker();
+            void addObject(Vector3 pos);
+            void listObjects();
+            float getDist2Focus();
+            float calcRadius(RadarObject* obj);
+            float calcPhi(RadarObject* obj);
+            bool calcRight(RadarObject* obj);
+
+            Ogre::PanelOverlayElement* navMarker_;  // marker to help navigating
+			RadarObject* firstRadarObject_;         // start of linked list
+			RadarObject* lastRadarObject_;          // end of linked list
+			RadarObject* focus_;                    // object that is focussed
+
+            static RadarOverlayElement* instance_s;
+            static void cycleFocus();
+	};
+}
+
+#endif
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.h~
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.h~	(revision 1362)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.h~	(revision 1362)
@@ -0,0 +1,89 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      Yuning Chai
+*   Co-authors:
+*      ...
+*
+*/
+
+#ifndef _RADAR_H__
+#define _RADAR_H__
+
+#include <string.h>
+#include <OgreOverlayElement.h>
+#include <OgrePanelOverlayElement.h>
+#include <util/Math.h>
+#include <string.h>
+#include "core/Tickable.h"
+#include <OgrePrerequisites.h>
+#include "objects/SpaceShip.h"
+#include "../OrxonoxPrereqs.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport RadarObject
+    {
+    	private:
+    		Ogre::OverlayManager* om;				// our one and only overlay manager
+    		
+    	public:
+    		RadarObject(Ogre::OverlayContainer* container);
+    		RadarObject(Ogre::OverlayContainer* container, Vector3 pos);
+    		~RadarObject();
+    		
+    		Vector3 pos_;							// position in space
+			Ogre::Real radius_, phi_;				// position on radar
+			bool right_;
+			Ogre::OverlayContainer* container_;
+			Ogre::PanelOverlayElement* panel_;		// the panel used to show the dot
+			
+    		static int count;
+	};
+
+    class _OrxonoxExport RadarOverlayElement : public Ogre::PanelOverlayElement
+    {
+        private:
+            Ogre::OverlayManager* om;               // our one and only overlay manager
+            Ogre::OverlayContainer* container_;
+            Vector3 initialDir_;	                // direction of nose
+            Vector3 currentDir_;					
+            Vector3 initialOrth_;                   // direction of normal
+            Vector3 currentOrth_;
+            Vector3 shipPos_;                       // position of ship
+            
+			RadarObject* tomato_;            
+            
+            Ogre::Real leftRel_, topRel_, dimRel_;  // relative position/dimension
+            int left_, top_, dim_;                  // absolute position/dimension
+            int windowW_, windowH_;             	// absolute window dimensions
+
+        public:
+            RadarOverlayElement(const Ogre::String& name);
+            ~RadarOverlayElement();
+            void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
+			void resize();            
+            void update();
+            void addObject(Vector3 pos);
+	};
+}
+
+#endif
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1361)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1362)
@@ -30,6 +30,4 @@
 #include "SpaceShip.h"
 
-#include <string>
-
 #include <OgreCamera.h>
 #include <OgreRenderWindow.h>
@@ -38,5 +36,5 @@
 
 #include "CameraHandler.h"
-//#include "util/Convert.h"
+#include "util/Convert.h"
 #include "util/Math.h"
 #include "core/CoreIncludes.h"
@@ -54,4 +52,5 @@
 {
     ConsoleCommand(SpaceShip, setMaxSpeedTest, AccessLevel::Debug, false);
+    ConsoleCommand(SpaceShip, whereAmI, AccessLevel::User, true);
     ConsoleCommandGeneric(test1, SpaceShip, createExecutor(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxSpeed", AccessLevel::Debug), false);
     ConsoleCommandGeneric(test2, SpaceShip, createExecutor(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxBlubber", AccessLevel::Debug), false);
@@ -232,12 +231,12 @@
       // change camera attributes here, if you want to ;)
     }
-    
+
     void SpaceShip::getFocus(){
       COUT(4) << "requesting focus" << std::endl;
       if(network::Client::getSingleton()==0 || network::Client::getSingleton()->getShipID()==objectID)
         CameraHandler::getInstance()->requestFocus(cam_);
-      
-    }
-    
+
+    }
+
     void SpaceShip::createCamera(){
 //       COUT(4) << "begin camera creation" << std::endl;
@@ -245,7 +244,7 @@
       COUT(4) << "position: (this)" << this->getNode()->getPosition() << std::endl;
       this->camNode_->setPosition(Vector3(-50,0,10));
-      Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0));
-      Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(0,0,-1));
-      camNode_->setOrientation(q1*q2);
+//      Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0));
+//      Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(0,0,-1));
+//      camNode_->setOrientation(q1*q2);
       COUT(4) << "position: (cam)" << this->camNode_->getPosition() << std::endl;
       cam_ = new Camera(this->camNode_);
@@ -253,4 +252,7 @@
       cam_->setTargetNode(this->getNode());
 //        cam->setPosition(Vector3(0,-350,0));
+      Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0));
+      Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(1,0,0));
+      camNode_->setOrientation(q2*q1);
       if(network::Client::getSingleton()!=0 && network::Client::getSingleton()->getShipID()==objectID){
         this->setBacksync(true);
@@ -383,4 +385,20 @@
     }
 
+    std::string SpaceShip::whereAmI() {
+	return getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().x)
+	+ "  " + getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().y)
+	+ "  " + getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().z);
+    }
+
+    Vector3 SpaceShip::getSPosition() {
+	return SpaceShip::getLocalShip()->getPosition();
+    }
+
+    Quaternion SpaceShip::getSOrientation() {
+	return SpaceShip::getLocalShip()->getOrientation();
+    }
+
+    float SpaceShip::getMaxSpeed() { return maxSpeed_; }
+
     void SpaceShip::tick(float dt)
     {
Index: code/trunk/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1361)
+++ code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1362)
@@ -29,9 +29,9 @@
 #ifndef _SpaceShip_H__
 #define _SpaceShip_H__
-
+#include <string>
 #include "OrxonoxPrereqs.h"
-
 #include <OgrePrerequisites.h>
 
+#include "util/Math.h"
 #include "core/InputInterfaces.h"
 #include "Camera.h"
@@ -66,5 +66,8 @@
 
             void getFocus();
-
+            static SpaceShip* instance_s;
+            static Vector3 getSPosition();
+            static Quaternion getSOrientation();
+            static std::string whereAmI();
             static void setMaxSpeedTest(float value)
                 { SpaceShip::instance_s->setMaxSpeed(value); }
@@ -76,8 +79,8 @@
             void mouseScrolled      (int abs, int rel) { }
 
+            float getMaxSpeed();
 
         private:
             void createCamera();
-            static SpaceShip* instance_s;
 
             Vector3 testvector_;
@@ -88,5 +91,5 @@
 
             Ogre::SceneNode* camNode_;
-            Camera* cam_;  
+            Camera* cam_;
             std::string camName_;
 
