Index: code/branches/network/src/orxonox/hud/HUD.cc
===================================================================
--- code/branches/network/src/orxonox/hud/HUD.cc	(revision 1455)
+++ code/branches/network/src/orxonox/hud/HUD.cc	(revision 1456)
@@ -31,4 +31,5 @@
 
 #include <string>
+#include <set>
 #include <OgreOverlay.h>
 #include <OgreOverlayContainer.h>
@@ -57,6 +58,4 @@
         om = &Ogre::OverlayManager::getSingleton();
         sm = GraphicsEngine::getSingleton().getSceneManager();
-        firstRadarObject = NULL;
-        lastRadarObject = NULL;
         showFPS = true;
         showRenderTime = true;
@@ -178,17 +177,24 @@
 
     void HUD::addRadarObject(SceneNode* node, int colour){
-        // check if this is the first RadarObject to create
-        if(firstRadarObject == NULL){
-            firstRadarObject = new RadarObject(container, node, colour);
-            lastRadarObject = firstRadarObject;
-        }
-        else{ // if not, append to list
-            lastRadarObject->next = new RadarObject(container, node, colour);
-            lastRadarObject = lastRadarObject->next;
-        }
-    }
-
-    RadarObject* HUD::getFirstRadarObject(){
-        return firstRadarObject;
+        RadarObject* obj = new RadarObject(container, node, colour);
+        roSet.insert(obj);
+//        // check if this is the first RadarObject to create
+//        if(firstRadarObject == NULL){
+//            firstRadarObject = new RadarObject(container, node, colour);
+//            lastRadarObject = firstRadarObject;
+//        }
+//        else{ // if not, append to list
+//            lastRadarObject->next = new RadarObject(container, node, colour);
+//            lastRadarObject = lastRadarObject->next;
+//        }
+    }
+
+    void HUD::removeRadarObject(SceneNode* node){
+        for(std::set<RadarObject*>::iterator it=roSet.begin(); it!=roSet.end(); it++){
+            if((*it)->getNode() == node) {
+                delete (*it);
+                roSet.erase(it);
+            }
+        }
     }
 
Index: code/branches/network/src/orxonox/hud/HUD.h
===================================================================
--- code/branches/network/src/orxonox/hud/HUD.h	(revision 1455)
+++ code/branches/network/src/orxonox/hud/HUD.h	(revision 1456)
@@ -56,6 +56,4 @@
         BarOverlayElement* speedoBar;
         RadarOverlayElement* radar;
-        RadarObject* firstRadarObject;
-        RadarObject* lastRadarObject;
         Navigation* nav;
 
@@ -66,7 +64,9 @@
         virtual void tick(float);
         void addRadarObject(Ogre::SceneNode* node, int colour = 0);
-        RadarObject* getFirstRadarObject();
+        void removeRadarObject(Ogre::SceneNode* node);
         void setRenderTimeRatio(float ratio);
         void setFPS();
+
+        std::set<RadarObject*> roSet;
 
         static HUD* instance_s;
Index: code/branches/network/src/orxonox/hud/Navigation.cc
===================================================================
--- code/branches/network/src/orxonox/hud/Navigation.cc	(revision 1455)
+++ code/branches/network/src/orxonox/hud/Navigation.cc	(revision 1456)
@@ -40,4 +40,5 @@
 #include "RadarOverlayElement.h"
 #include "HUD.h"
+#include "core/Debug.h"
 
 namespace orxonox
@@ -204,11 +205,15 @@
     void Navigation::cycleFocus(){
         if(focus_ == NULL){
-            focus_ = HUD::getSingleton().getFirstRadarObject();
+            it_ = HUD::getSingleton().roSet.begin();
+            focus_ = *it_;
         }
         else{
             focus_->resetColour();
-            if(focus_ != NULL) focus_ = focus_->next;
-        }
-
+            if(it_ != HUD::getSingleton().roSet.end()){
+                focus_ = *it_;
+                ++it_;
+            }
+            else focus_ = NULL;
+        }
         if(focus_ == NULL){
             navMarker_->hide();
Index: code/branches/network/src/orxonox/hud/Navigation.h
===================================================================
--- code/branches/network/src/orxonox/hud/Navigation.h	(revision 1455)
+++ code/branches/network/src/orxonox/hud/Navigation.h	(revision 1456)
@@ -51,4 +51,5 @@
         Vector3 currentDir_;
         Vector3 currentOrth_;
+        std::set<RadarObject*>::iterator it_;
         int windowW_, windowH_;
         void init();
Index: code/branches/network/src/orxonox/hud/RadarObject.cc
===================================================================
--- code/branches/network/src/orxonox/hud/RadarObject.cc	(revision 1455)
+++ code/branches/network/src/orxonox/hud/RadarObject.cc	(revision 1456)
@@ -43,5 +43,4 @@
         node_ = node;
         colour_ = colour;
-        next = NULL;
         om = &OverlayManager::getSingleton();
         panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
@@ -57,5 +56,5 @@
 
     RadarObject::~RadarObject(){
-        // todo: clean up stuff
+        delete panel_;
     }
 
@@ -78,4 +77,8 @@
         return node_->getPosition();
     }
+
+    SceneNode* RadarObject::getNode(){
+        return node_;
+    }
 }
 
Index: code/branches/network/src/orxonox/hud/RadarObject.h
===================================================================
--- code/branches/network/src/orxonox/hud/RadarObject.h	(revision 1455)
+++ code/branches/network/src/orxonox/hud/RadarObject.h	(revision 1456)
@@ -51,4 +51,5 @@
         void resetColour();
         Vector3 getPosition();
+        Ogre::SceneNode* getNode();
 
         bool right_;
@@ -56,5 +57,4 @@
         Ogre::OverlayContainer* container_;
         Ogre::PanelOverlayElement* panel_;		// the panel used to show the dot
-        RadarObject* next;                      // next pointer of linked list
 
         static int count;
Index: code/branches/network/src/orxonox/hud/RadarOverlayElement.cc
===================================================================
--- code/branches/network/src/orxonox/hud/RadarOverlayElement.cc	(revision 1455)
+++ code/branches/network/src/orxonox/hud/RadarOverlayElement.cc	(revision 1456)
@@ -81,28 +81,26 @@
         currentDir_ = SpaceShip::getLocalShip()->getDir();
         currentOrth_ = SpaceShip::getLocalShip()->getOrth();
-        RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
         // iterate through all RadarObjects
-        while(ro != NULL){
+        for(std::set<RadarObject*>::iterator it=HUD::getSingleton().roSet.begin(); it!=HUD::getSingleton().roSet.end(); it++){
         // calc position on radar...
-            float radius = calcRadius(shipPos_, currentDir_, currentOrth_, ro);
-            float phi = calcPhi(shipPos_, currentDir_, currentOrth_, ro);
-            bool right = calcRight(shipPos_, currentDir_, currentOrth_, ro);
+            float radius = calcRadius(shipPos_, currentDir_, currentOrth_, (*it));
+            float phi = calcPhi(shipPos_, currentDir_, currentOrth_, (*it));
+            bool right = calcRight(shipPos_, currentDir_, currentOrth_, (*it));
 
             // set size to fit distance...
-            float d = (ro->getPosition()-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);
+            float d = ((*it)->getPosition()-shipPos_).length();
+            if(d<4000) (*it)->panel_->setDimensions(4,4);
+            else if(d<8000) (*it)->panel_->setDimensions(3,3);
+            else if(d<16000) (*it)->panel_->setDimensions(2,2);
+            else (*it)->panel_->setDimensions(1,1);
 
             if (right){
-                ro->panel_->setPosition(sin(phi)*radius/
+                (*it)->panel_->setPosition(sin(phi)*radius/
                     3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
             }
             else {
-                ro->panel_->setPosition(-sin(phi)*radius/
+                (*it)->panel_->setPosition(-sin(phi)*radius/
                     3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
             }
-            ro = ro->next;
         }
     }
@@ -110,10 +108,8 @@
     void RadarOverlayElement::listObjects(){
         int i = 0;
-        RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
         COUT(3) << "List of RadarObjects:\n";
         // iterate through all Radar Objects
-        while(ro != NULL) {
-            COUT(3) << i++ << ": " << ro->getPosition() << std::endl;
-            ro = ro->next;
+        for(std::set<RadarObject*>::iterator it=HUD::getSingleton().roSet.begin(); it!=HUD::getSingleton().roSet.end(); it++){
+            COUT(3) << i++ << ": " << (*it)->getPosition() << std::endl;
         }
     }
