Index: code/trunk/bin/keybindings.ini
===================================================================
--- code/trunk/bin/keybindings.ini	(revision 1392)
+++ code/trunk/bin/keybindings.ini	(revision 1393)
@@ -15,5 +15,5 @@
 KeyEQUALS=activateConsole
 KeyBACK=
-KeyTAB=cycleRadarFocus
+KeyTAB=cycleNavigationFocus
 KeyQ=
 KeyW=
Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 1392)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 1393)
@@ -9,4 +9,5 @@
   hud/RadarOverlayElement.cc
   hud/RadarObject.cc
+  hud/Navigation.cc
   particle/ParticleInterface.cc
   tolua/tolua_bind.cc
Index: code/trunk/src/orxonox/hud/HUD.cc
===================================================================
--- code/trunk/src/orxonox/hud/HUD.cc	(revision 1392)
+++ code/trunk/src/orxonox/hud/HUD.cc	(revision 1393)
@@ -43,5 +43,5 @@
 namespace orxonox
 {
-    ConsoleCommandShortcut(HUD, cycleRadarFocus, AccessLevel::User);
+    ConsoleCommandShortcut(HUD, cycleNavigationFocus, AccessLevel::User);
 
     using namespace Ogre;
@@ -49,4 +49,6 @@
     HUD::HUD(){
         om = &Ogre::OverlayManager::getSingleton();
+        firstRadarObject = NULL;
+        lastRadarObject = NULL;
 
 		// create Factories
@@ -86,4 +88,7 @@
         radar->show();
 
+        // create Navigation
+        nav = new Navigation(container);
+
 		// set up screen-wide container
         container->show();
@@ -98,11 +103,14 @@
         container->addChild(test);
         container->addChild(fpsText);
+
         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(2000.0, 1000.0, 1000.0));
-        radar->addObject(Vector3(0.0, 4000.0, 0.0));
-        radar->addObject(Vector3(0.0, 0.0, 6800.0));
+        addRadarObject(Vector3(2000.0, 1000.0, 1000.0));
+        addRadarObject(Vector3(0.0, 4000.0, 0.0));
+        addRadarObject(Vector3(0.0, 0.0, 6800.0));
     }
 
@@ -113,5 +121,5 @@
     void HUD::tick(float dt)
     {
-        int d = (float)(radar->getDist2Focus()/10);
+        int d = (float)(nav->getDist2Focus()/10);
         if(d) test->setCaption("Distance: " + Ogre::StringConverter::toString(d));
         else test->setCaption("");
@@ -126,4 +134,22 @@
         radar->resize();
         radar->update();
+
+        nav->update();
+    }
+
+    void HUD::addRadarObject(Vector3 pos){
+        // check if this is the first RadarObject to create
+        if(firstRadarObject == NULL){
+            firstRadarObject = new RadarObject(container, pos);
+            lastRadarObject = firstRadarObject;
+        }
+        else{ // if not, append to list
+            lastRadarObject->next = new RadarObject(container, pos);
+            lastRadarObject = lastRadarObject->next;
+        }
+    }
+
+    RadarObject* HUD::getFirstRadarObject(){
+        return firstRadarObject;
     }
 
@@ -141,6 +167,6 @@
     }
 
-    /*static*/void HUD::cycleRadarFocus(){
-        HUD::getSingleton().radar->cycleFocus();
+    /*static*/void HUD::cycleNavigationFocus(){
+        HUD::getSingleton().nav->cycleFocus();
     }
 }
Index: code/trunk/src/orxonox/hud/HUD.h
===================================================================
--- code/trunk/src/orxonox/hud/HUD.h	(revision 1392)
+++ code/trunk/src/orxonox/hud/HUD.h	(revision 1393)
@@ -36,4 +36,6 @@
 #include "BarOverlayElement.h"
 #include "RadarOverlayElement.h"
+#include "Navigation.h"
+#include "RadarObject.h"
 
 
@@ -54,7 +56,12 @@
             BarOverlayElement* speedoBar;
             RadarOverlayElement* radar;
+            RadarObject* firstRadarObject;
+            RadarObject* lastRadarObject;
+            Navigation* nav;
 
         public:
             virtual void tick(float);
+            void addRadarObject(Vector3 pos);
+            RadarObject* getFirstRadarObject();
 
             static HUD* instance_s;
@@ -62,5 +69,5 @@
             static void setFPS(float fps);
             static void setEnergy(float value);
-            static void cycleRadarFocus();
+            static void cycleNavigationFocus();
     };
 }
Index: code/trunk/src/orxonox/hud/Navigation.cc
===================================================================
--- code/trunk/src/orxonox/hud/Navigation.cc	(revision 1393)
+++ code/trunk/src/orxonox/hud/Navigation.cc	(revision 1393)
@@ -0,0 +1,122 @@
+/*
+*   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 <OgreOverlayManager.h>
+#include <GraphicsEngine.h>
+#include "objects/SpaceShip.h"
+#include "HUD.h"
+#include "Navigation.h"
+
+namespace orxonox
+{
+    using namespace Ogre;
+
+    Navigation::Navigation(OverlayContainer* container){
+        container_ = container;
+        focus_ = NULL;
+        init();
+    }
+
+    Navigation::Navigation(OverlayContainer* container, RadarObject* focus){
+        container_ = container;
+        focus_ = focus;
+        init();
+    }
+
+    void Navigation::init(){
+		om = &OverlayManager::getSingleton();
+        // create nav marker ...
+        navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
+        navMarker_->setMetricsMode(GMM_PIXELS);
+        navMarker_->setMaterialName("Orxonox/NavMarker");
+        navMarker_->setDimensions(16,16);
+        navMarker_->hide();
+        container_->addChild(navMarker_);
+	}
+
+	void Navigation::update(){
+        if(focus_ == NULL) return;
+        shipPos_ = SpaceShip::instance_s->getPosition();
+        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
+        // 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 Navigation::cycleFocus(){
+	    if(focus_ == NULL){
+            focus_ = HUD::getSingleton().getFirstRadarObject();
+	    }
+        else{
+            focus_->panel_->setMaterialName("Orxonox/RedDot");
+            focus_ = focus_->next;
+        }
+
+        if(focus_ == NULL){
+            navMarker_->hide();
+        }
+        else{
+            navMarker_->show();
+            focus_->panel_->setMaterialName("Orxonox/WhiteDot");
+        }
+	}
+
+	float Navigation::getDist2Focus(){
+	    if(focus_ == NULL) return(0.0);
+	    return((focus_->pos_-shipPos_).length());
+	}
+}
Index: code/trunk/src/orxonox/hud/Navigation.h
===================================================================
--- code/trunk/src/orxonox/hud/Navigation.h	(revision 1393)
+++ code/trunk/src/orxonox/hud/Navigation.h	(revision 1393)
@@ -0,0 +1,62 @@
+/*
+*   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 _NAVIGATION_H__
+#define _NAVIGATION_H__
+
+#include <OgrePrerequisites.h>
+#include <OgrePanelOverlayElement.h>
+#include "../OrxonoxPrereqs.h"
+#include "util/Math.h"
+#include "RadarObject.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport Navigation
+    {
+    	private:
+    		Ogre::OverlayManager* om;				    // our one and only overlay manager
+    		Vector3 shipPos_;                           // position of ship
+    		int windowW_, windowH_;
+
+    		void init();
+
+    	public:
+    		Navigation(Ogre::OverlayContainer* container);
+    		Navigation(Ogre::OverlayContainer* container, RadarObject* focus);
+    		~Navigation();
+            Ogre::OverlayContainer* container_;
+			Ogre::PanelOverlayElement* navMarker_;     // the panel used to show the dot
+			RadarObject* focus_;                        // next pointer of linked list
+
+    		void update();
+    		void cycleFocus();
+    		float getDist2Focus();
+	};
+}
+
+#endif
Index: code/trunk/src/orxonox/hud/RadarObject.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1392)
+++ code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1393)
@@ -67,8 +67,2 @@
 	}
 }
-
-/* 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 1392)
+++ code/trunk/src/orxonox/hud/RadarObject.h	(revision 1393)
@@ -28,5 +28,4 @@
 #ifndef _RADAR2_H__
 #define _RADAR2_H__
-
 #include <OgrePrerequisites.h>
 #include "../OrxonoxPrereqs.h"
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1392)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1393)
@@ -22,5 +22,5 @@
 *      Yuning Chai
 *   Co-authors:
-*      ...
+*      Felix Schulthess
 *
 */
@@ -37,4 +37,5 @@
 #include "core/ConsoleCommand.h"
 #include "objects/SpaceShip.h"
+#include "HUD.h"
 #include "RadarOverlayElement.h"
 
@@ -57,16 +58,4 @@
         topRel_ = topRel;
         container_ = container;
-        firstRadarObject_ = NULL;
-        lastRadarObject_ = NULL;
-        focus_ = NULL;
-
-        // create nav marker ...
-        navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
-        navMarker_->setMetricsMode(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
@@ -98,9 +87,8 @@
     void RadarOverlayElement::update() {
         shipPos_ = SpaceShip::instance_s->getPosition();
-        currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_; 		// according to beni....
+        currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_;
 		currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
         plane = Plane(currentDir_, shipPos_);
-
-        RadarObject* ro = firstRadarObject_;
+        RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
         // iterate through all RadarObjects
 		while(ro != NULL){
@@ -125,59 +113,12 @@
                     3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
             }
+            listObjects();
             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_;
+	    RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
 	    COUT(3) << "List of RadarObjects:\n";
 	    // iterate through all Radar Objects
@@ -186,9 +127,4 @@
 	        ro = ro->next;
 	    }
-	}
-
-	float RadarOverlayElement::getDist2Focus(){
-	    if(focus_ == NULL) return(0.0);
-	    return((focus_->pos_-shipPos_).length());
 	}
 
@@ -211,27 +147,3 @@
         else return false;
 	}
-
-	void RadarOverlayElement::cycleFocus(){
-	    if(focus_ == NULL){
-            focus_ = firstRadarObject_;
-	    }
-        else{
-            focus_->panel_->setMaterialName("Orxonox/RedDot");
-            focus_ = focus_->next;
-        }
-
-        if(focus_ == NULL){
-            navMarker_->hide();
-        }
-        else{
-            navMarker_->show();
-            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.h
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.h	(revision 1392)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.h	(revision 1393)
@@ -58,17 +58,8 @@
 			void resize();
             void update();
-            void updateNavMarker();
-            void addObject(Vector3 pos);
             void listObjects();
-            void cycleFocus();
-            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
 	};
 }
