Index: code/branches/hud3/src/orxonox/hud/HUD.cc
===================================================================
--- code/branches/hud3/src/orxonox/hud/HUD.cc	(revision 1346)
+++ code/branches/hud3/src/orxonox/hud/HUD.cc	(revision 1350)
@@ -81,4 +81,5 @@
         radar->addObject(Vector3(1500.0, 0.0, 0.0));
         radar->addObject(Vector3(0.0, 4000.0, 0.0));
+        RadarOverlayElement::cycleFocus();
     }
 
Index: code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc
===================================================================
--- code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc	(revision 1346)
+++ code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc	(revision 1350)
@@ -32,5 +32,8 @@
     using namespace Ogre;
 
+    RadarOverlayElement* RadarOverlayElement::instance_s = NULL;
+
     RadarOverlayElement::RadarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
+        RadarOverlayElement::instance_s = this;
     }
 
@@ -47,4 +50,14 @@
         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
@@ -105,4 +118,41 @@
             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 = 0.97;//atan(windowW_/windowH_); // doesn't work correctly yet
+        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);
+            }
+        }
     }
 
@@ -147,4 +197,16 @@
         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_ = RadarOverlayElement::instance_s->focus_->next;
+        if(RadarOverlayElement::instance_s->focus_ == NULL)
+            RadarOverlayElement::instance_s->navMarker_->hide();
+        else
+            RadarOverlayElement::instance_s->navMarker_->show();
+	}
 }
 
Index: code/branches/hud3/src/orxonox/hud/RadarOverlayElement.h
===================================================================
--- code/branches/hud3/src/orxonox/hud/RadarOverlayElement.h	(revision 1346)
+++ code/branches/hud3/src/orxonox/hud/RadarOverlayElement.h	(revision 1350)
@@ -50,5 +50,5 @@
         private:
             Ogre::OverlayManager* om;               // our one and only overlay manager
-            Ogre::OverlayContainer* container_;
+            Ogre::OverlayContainer* container_;     // pointer to the container we're in
             Vector3 initialDir_;	                // direction of nose
             Vector3 currentDir_;
@@ -57,7 +57,4 @@
             Vector3 shipPos_;                       // position of ship
             Ogre::Plane plane;                      // plane perpendicular to dir
-
-			RadarObject* firstRadarObject_;         // start of linked list
-			RadarObject* lastRadarObject_;          // end of linked list
 
             Ogre::Real leftRel_, topRel_, dimRel_;  // relative position/dimension
@@ -71,4 +68,5 @@
 			void resize();
             void update();
+            void updateNavMarker();
             void addObject(Vector3 pos);
             void listObjects();
@@ -76,4 +74,12 @@
             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();
 	};
 }
