Index: code/branches/questsystem5/src/orxonox/overlays/notifications/Notification.cc
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/Notification.cc	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/Notification.cc	(revision 2785)
@@ -106,5 +106,5 @@
     {
         this->sender_ = sender;
-        bool successful = NotificationManager::registerNotification(this);
+        bool successful = NotificationManager::getInstance().registerNotification(this);
         if(!successful)
             return false;
Index: code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.cc
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.cc	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.cc	(revision 2785)
@@ -48,9 +48,5 @@
     const std::string NotificationManager::NONE = "none";
 
-    std::multimap<std::time_t,Notification*> NotificationManager::allNotificationsList_s;
-    std::map<int,std::multimap<std::time_t,Notification*>*> NotificationManager::notificationLists_s;
-    std::map<NotificationQueue*,int> NotificationManager::queueList_s;
-    
-    int NotificationManager::highestIndex_s = 0;
+    NotificationManager* NotificationManager::singletonRef_s = NULL;
 
     /**
@@ -58,7 +54,9 @@
         Constructor. Registers the Object.
     */
-    NotificationManager::NotificationManager(BaseObject* creator) : BaseObject(creator)
-    {
-        RegisterObject(NotificationManager);
+    NotificationManager::NotificationManager() : BaseObject(this)
+    {
+        RegisterRootObject(NotificationManager);
+
+        this->highestIndex_ = 0;
     }
 
@@ -69,4 +67,19 @@
     NotificationManager::~NotificationManager()
     {
+    }
+
+    /**
+    @brief
+        Returns the current (and single) instance of the NotificationManager. Creates one, if there isn't one to begin with.
+    @return
+        Returns a reference to the single instance of the NotificationManager.
+    */
+    /*static*/ NotificationManager & NotificationManager::getInstance()
+    {
+        if(singletonRef_s == NULL)
+        {
+            singletonRef_s = new NotificationManager();
+        }
+        return *singletonRef_s;
     }
     
@@ -79,5 +92,5 @@
         Returns true if successful.
     */
-    /*static*/ bool NotificationManager::registerNotification(Notification* notification)
+    bool NotificationManager::registerNotification(Notification* notification)
     {
     
@@ -87,5 +100,5 @@
         std::time_t time = std::time(0); //TDO: Doesn't this expire? //!< Get current time.
         
-        allNotificationsList_s.insert(std::pair<std::time_t,Notification*>(time,notification));
+        this->allNotificationsList_.insert(std::pair<std::time_t,Notification*>(time,notification));
         
         if(notification->getSender() == NONE) //!< If the sender has no specific name, then the Notification is only added to the list of all Notifications.
@@ -97,10 +110,10 @@
         
         //!< Insert the notification in all queues that have its sender as target.
-        for(std::map<NotificationQueue*,int>::iterator it = queueList_s.begin(); it != queueList_s.end(); it++) //!< Iterate through all queues.
+        for(std::map<NotificationQueue*,int>::iterator it = this->queueList_.begin(); it != this->queueList_.end(); it++) //!< Iterate through all queues.
         {
             std::set<std::string> set = it->first->getTargetsSet();
             if(all || set.find(notification->getSender()) != set.end() || set.find(ALL) != set.end()) //TDO: Make sure this works.
             {
-                notificationLists_s[it->second]->insert(std::pair<std::time_t,Notification*>(time,notification)); //!< Insert the Notification in the Notifications list of the current NotificationQueue.
+                this->notificationLists_[it->second]->insert(std::pair<std::time_t,Notification*>(time,notification)); //!< Insert the Notification in the Notifications list of the current NotificationQueue.
                 it->first->update(notification, time); //!< Update the queue.
             }
@@ -120,10 +133,10 @@
         Returns true if successful.
     */
-    /*static*/ bool NotificationManager::registerQueue(NotificationQueue* queue)
-    {
-        NotificationManager::highestIndex_s += 1;
-        int index = NotificationManager::highestIndex_s;
-        
-        queueList_s[queue] = index; //!< Add the NotificationQueue to the list of queues.
+    bool NotificationManager::registerQueue(NotificationQueue* queue)
+    {
+        this->highestIndex_ += 1;
+        int index = this->highestIndex_;
+        
+        this->queueList_[queue] = index; //!< Add the NotificationQueue to the list of queues.
         
         std::set<std::string> set = queue->getTargetsSet(); //TDO: Works this?
@@ -132,14 +145,14 @@
         if(set.find(ALL) != set.end())
         {
-            notificationLists_s[index] = &allNotificationsList_s;
+            this->notificationLists_[index] = &this->allNotificationsList_;
             COUT(3) << "NotificationQueue registered with the NotificationManager." << std::endl;
             return true;
         }
         
-        notificationLists_s[index] = new std::multimap<std::time_t,Notification*>;
-        std::multimap<std::time_t,Notification*> map = *notificationLists_s[index];
+        this->notificationLists_[index] = new std::multimap<std::time_t,Notification*>;
+        std::multimap<std::time_t,Notification*> map = *this->notificationLists_[index];
         
         //! Iterate through all Notifications to determine whether any of them should belong to the newly registered NotificationQueue.
-        for(std::multimap<std::time_t,Notification*>::iterator it = allNotificationsList_s.begin(); it != allNotificationsList_s.end(); it++)
+        for(std::multimap<std::time_t,Notification*>::iterator it = this->allNotificationsList_.begin(); it != this->allNotificationsList_.end(); it++)
         {
             if(set.find(it->second->getSender()) != set.end()) //!< Checks whether the overlay has the sender of the current notification as target.
@@ -170,7 +183,7 @@
         Make sure the map is deleted.
     */
-    /*static*/ std::multimap<std::time_t,Notification*>* NotificationManager::getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart, const std::time_t & timeFrameEnd)
-    {
-        std::multimap<std::time_t,Notification*>* notifications = NotificationManager::notificationLists_s[NotificationManager::queueList_s[queue]];
+    std::multimap<std::time_t,Notification*>* NotificationManager::getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart, const std::time_t & timeFrameEnd)
+    {
+        std::multimap<std::time_t,Notification*>* notifications = this->notificationLists_[this->queueList_[queue]];
         
         if(notifications == NULL)
Index: code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.h
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.h	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationManager.h	(revision 2785)
@@ -50,5 +50,5 @@
     /**
     @brief
-        The NotificationManager functions as a gateway between Notifications and NotificationQueues.
+        The Singleton NotificationManager functions as a gateway between Notifications and NotificationQueues.
         It receives, organizes Notifications and the redistributes them to the specific NotificationQueues.
     @author
@@ -57,6 +57,8 @@
     class _OrxonoxExport NotificationManager : public BaseObject
     {
+        protected:
+            NotificationManager();
+
         public:
-            NotificationManager(BaseObject* creator);
             virtual ~NotificationManager();
 	        
@@ -64,9 +66,11 @@
             static const std::string NONE;
          
+            static NotificationManager & getInstance(); //! Returns a reference to the single instance of the NotificationManager.
+
             //TDO: Visibility?
-            static bool registerNotification(Notification* notification); //!< Registers a Notification within the NotificationManager.
-            static bool registerQueue(NotificationQueue* queue); //!< Registers a NotificationQueue within the NotificationManager.
+            bool registerNotification(Notification* notification); //!< Registers a Notification within the NotificationManager.
+            bool registerQueue(NotificationQueue* queue); //!< Registers a NotificationQueue within the NotificationManager.
             
-            static std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart, const std::time_t & timeFrameEnd); //!< Returns the Notifications for a specific NotificationQueue in a specified timeframe.
+            std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart, const std::time_t & timeFrameEnd); //!< Returns the Notifications for a specific NotificationQueue in a specified timeframe.
             
             /**
@@ -76,6 +80,6 @@
             @return Returns a time-ordered list of Notifications.
             */
-            static std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart)
-                { return NotificationManager::getNotifications(queue, timeFrameStart, std::time(0)); }
+            std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, const std::time_t & timeFrameStart)
+                { return this->getNotifications(queue, timeFrameStart, std::time(0)); }
             /**
             @brief Fetches the Notifications for a specific NotificationQueue starting at a specified timespan before now.
@@ -84,13 +88,15 @@
             @return Returns a time-ordered list of Notifications.
             */
-            static std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, int timeDelay)
-                { return NotificationManager::getNotifications(queue, std::time(0)-timeDelay, std::time(0)); }
+            std::multimap<std::time_t,Notification*>* getNotifications(NotificationQueue* queue, int timeDelay)
+                { return this->getNotifications(queue, std::time(0)-timeDelay, std::time(0)); }
      
-	       private:
-            static int highestIndex_s; //!< This variable holds the highest index (resp. key) in notificationLists_s, to secure that  no key appears twice.
+        private:
+            static NotificationManager* singletonRef_s;
+
+            int highestIndex_; //!< This variable holds the highest index (resp. key) in notificationLists_s, to secure that  no key appears twice.
         
-            static std::multimap<std::time_t,Notification*> allNotificationsList_s; //!< Container where all notifications are stored (together with their respecive timestamps).
-            static std::map<NotificationQueue*,int> queueList_s; //!< Container where all NotificationQueues are stored with a number as identifier.
-            static std::map<int,std::multimap<std::time_t,Notification*>*> notificationLists_s; //!< Container where all Notifications, for each identifier (associated with a NotificationQueue), are stored.
+            std::multimap<std::time_t,Notification*> allNotificationsList_; //!< Container where all notifications are stored (together with their respecive timestamps).
+            std::map<NotificationQueue*,int> queueList_; //!< Container where all NotificationQueues are stored with a number as identifier.
+            std::map<int,std::multimap<std::time_t,Notification*>*> notificationLists_; //!< Container where all Notifications, for each identifier (associated with a NotificationQueue), are stored.
             
 
Index: code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationOverlay.cc
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationOverlay.cc	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationOverlay.cc	(revision 2785)
@@ -74,4 +74,6 @@
         this->setFont(this->queue_->getFont());
         this->setTextSize(this->queue_->getFontSize());
+
+        this->setPosition(this->queue_->getPosition());
     }
 
Index: code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.cc
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.cc	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.cc	(revision 2785)
@@ -46,4 +46,5 @@
     
     const std::string NotificationQueue::DEFAULT_FONT = "VeraMono";
+    const Vector2 NotificationQueue::DEFAULT_POSITION = Vector2(0.0,0.0);
 
     /**
@@ -78,5 +79,5 @@
         this->tickTime_ = 0.0;
         
-        NotificationManager::registerQueue(this);
+        NotificationManager::getInstance().registerQueue(this);
     }
     
@@ -90,4 +91,5 @@
         this->setNotificationLength(DEFAULT_LENGTH);
         this->setDisplayTime(DEFAULT_DISPLAY_TIME);
+        this->setPosition(DEFAULT_POSITION);
         
         this->setTargets(NotificationManager::ALL);
@@ -113,4 +115,5 @@
         XMLPortParam(NotificationQueue, "font", setFont, getFont, xmlElement, mode);
         XMLPortParam(NotificationQueue, "fontSize", setFontSize, getFontSize, xmlElement, mode);
+        XMLPortParam(NotificationQueue, "position", setPosition, getPosition, xmlElement, mode);
         
         COUT(3) << "NotificationQueue created." << std::endl;
@@ -152,5 +155,5 @@
         this->clear();
     
-        std::multimap<std::time_t,Notification*>* notifications = NotificationManager::getNotifications(this, this->displayTime_);
+        std::multimap<std::time_t,Notification*>* notifications = NotificationManager::getInstance().getNotifications(this, this->displayTime_);
         
         if(notifications == NULL)
@@ -315,5 +318,5 @@
             return false;
         this->fontSize_ = size;
-        for (std::map<Notification*, NotificationOverlayContainer*>::iterator it = this->overlays_.begin(); it != this->overlays_.end(); ++it) //!< Set the font size for each overlay.
+        for (std::map<Notification*, NotificationOverlayContainer*>::iterator it = this->overlays_.begin(); it != this->overlays_.end(); it++) //!< Set the font size for each overlay.
         {
             it->second->overlay->setFontSize(size);
@@ -333,5 +336,5 @@
     {
         this->font_ = font;
-        for (std::map<Notification*, NotificationOverlayContainer*>::iterator it = this->overlays_.begin(); it != this->overlays_.end(); ++it) //!< Set the font for each overlay.
+        for (std::map<Notification*, NotificationOverlayContainer*>::iterator it = this->overlays_.begin(); it != this->overlays_.end(); it++) //!< Set the font for each overlay.
         {
             it->second->overlay->setFont(font);
@@ -345,4 +348,15 @@
         {
             it->second->overlay->scroll(pos);
+        }
+    }
+
+    void NotificationQueue::positionChanged()
+    {
+        int counter = 0;
+        for (std::multiset<NotificationOverlayContainer*, NotificationOverlayContainerCompare>::iterator it = this->containers_.begin(); it != this->containers_.end(); it++) //!< Set the position for each overlay.
+        {
+            (*it)->overlay->setPosition(this->getPosition());
+            (*it)->overlay->scroll(Vector2(0.0,(1.1*this->getFontSize())*counter));
+            counter++;
         }
     }
Index: code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.h
===================================================================
--- code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.h	(revision 2783)
+++ code/branches/questsystem5/src/orxonox/overlays/notifications/NotificationQueue.h	(revision 2785)
@@ -44,5 +44,4 @@
 #include <map>
 #include <ctime>
-#include "util/Math.h"
 
 #include "orxonox/overlays/OverlayGroup.h"
@@ -114,13 +113,10 @@
             inline int getDisplayTime() const
                 { return this->displayTime_; }
-                
             /**
-            @brief Returns the targets of this queue, reps. the senders which Notifications are displayed in this queue.
-            @return Retuns a set of string holding the different targets.
+            @brief Returns the position of the NotificationQueue.
+            @return Returns the position.
             */
-            inline const std::set<std::string> & getTargetsSet()
-                { return this->targets_; }
-            bool getTargets(std::string* string) const; //!< Returns a string consisting of the concatination of the targets.
-            
+            inline const Vector2 & getPosition() const
+                { return this->position_; }
             /**
             @brief Returns the font size used to display the Notifications.
@@ -135,4 +131,15 @@
             inline const std::string & getFont() const
                 { return this->font_; }
+                
+            /**
+            @brief Returns the targets of this queue, reps. the senders which Notifications are displayed in this queue.
+            @return Retuns a set of string holding the different targets.
+            */
+            inline const std::set<std::string> & getTargetsSet()
+                { return this->targets_; }
+            bool getTargets(std::string* string) const; //!< Returns a string consisting of the concatination of the targets.
+            
+            inline void setPosition(Vector2 pos)
+                { this->position_ = pos; this->positionChanged(); }
 
             void scroll(const Vector2 pos);
@@ -142,6 +149,8 @@
             static const int DEFAULT_LENGTH = 64; //!< The default maximum number of Notifications displayed.
             static const int DEFAULT_DISPLAY_TIME = 30; //!< The default display time.
-            static const float DEFAULT_FONT_SIZE = 0.02; //!< The default font size.
+            static const float DEFAULT_FONT_SIZE = 0.025; //!< The default font size.
+
             static const std::string DEFAULT_FONT; //!< The default font.
+            static const Vector2 DEFAULT_POSITION; //!< the default position.
         
             int maxSize_; //!< The maximal number of Notifications displayed.
@@ -149,4 +158,5 @@
             int notificationLength_; //!< The maximal number of characters a Notification-message is allowed to have.
             int displayTime_; //!< The time a Notification is displayed.
+            Vector2 position_; //!< The position of the NotificationQueue.
             
             std::set<std::string> targets_; //!< The targets the Queue displays Notifications of.
@@ -172,4 +182,6 @@
             bool setFontSize(float size); //!< Set the font size.
             bool setFont(const std::string & font); //!< Set the font.
+
+            void positionChanged();
             
             void addNotification(Notification* notification, const std::time_t & time); //!< Add a notification to the queue.
