Index: code/branches/console/src/libraries/core/Shell.cc
===================================================================
--- code/branches/console/src/libraries/core/Shell.cc	(revision 5968)
+++ code/branches/console/src/libraries/core/Shell.cc	(revision 5969)
@@ -35,8 +35,4 @@
 #include "Core.h"
 #include "ConsoleCommand.h"
-
-#define SHELL_UPDATE_LISTENERS(function) \
-    for (std::list<ShellListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ) \
-        (*(it++))->function()
 
 namespace orxonox
@@ -153,5 +149,5 @@
     void Shell::registerListener(ShellListener* listener)
     {
-        this->listeners_.insert(this->listeners_.end(), listener);
+        this->listeners_.push_back(listener);
     }
 
@@ -161,5 +157,5 @@
         {
             if ((*it) == listener)
-                this->listeners_.erase(it++);
+                it = this->listeners_.erase(it);
             else
                 ++it;
@@ -170,5 +166,5 @@
     {
         this->inputBuffer_->setCursorPosition(cursor);
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -199,5 +195,5 @@
         this->finishedLastLine_ = true;
 
-        SHELL_UPDATE_LISTENERS(linesChanged);
+        this->updateListeners<&ShellListener::linesChanged>();
     }
 
@@ -258,5 +254,5 @@
                 if (!this->scrollPosition_)
                 {
-                    SHELL_UPDATE_LISTENERS(lineAdded);
+                    this->updateListeners<&ShellListener::lineAdded>();
                 }
             }
@@ -265,5 +261,5 @@
                 (*this->lines_.begin()) += output;
                 this->finishedLastLine_ = newline;
-                SHELL_UPDATE_LISTENERS(onlyLastLineChanged);
+                this->updateListeners<&ShellListener::onlyLastLineChanged>();
             }
 
@@ -273,6 +269,6 @@
     void Shell::inputChanged()
     {
-        SHELL_UPDATE_LISTENERS(inputChanged);
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::inputChanged>();
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -299,6 +295,6 @@
     {
         this->inputBuffer_->removeBehindCursor();
-        SHELL_UPDATE_LISTENERS(inputChanged);
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::inputChanged>();
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -306,5 +302,5 @@
     {
         this->inputBuffer_->removeAtCursor();
-        SHELL_UPDATE_LISTENERS(inputChanged);
+        this->updateListeners<&ShellListener::inputChanged>();
     }
 
@@ -313,6 +309,6 @@
         this->inputBuffer_->clear();
         this->historyPosition_ = 0;
-        SHELL_UPDATE_LISTENERS(inputChanged);
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::inputChanged>();
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -320,5 +316,5 @@
     {
         this->inputBuffer_->increaseCursor();
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -326,5 +322,5 @@
     {
         this->inputBuffer_->decreaseCursor();
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -332,5 +328,5 @@
     {
         this->inputBuffer_->setCursorToEnd();
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -338,5 +334,5 @@
     {
         this->inputBuffer_->setCursorToBegin();
-        SHELL_UPDATE_LISTENERS(cursorChanged);
+        this->updateListeners<&ShellListener::cursorChanged>();
     }
 
@@ -366,5 +362,5 @@
             ++this->scrollPosition_;
 
-            SHELL_UPDATE_LISTENERS(linesChanged);
+            this->updateListeners<&ShellListener::linesChanged>();
         }
     }
@@ -377,5 +373,5 @@
             --this->scrollPosition_;
 
-            SHELL_UPDATE_LISTENERS(linesChanged);
+            this->updateListeners<&ShellListener::linesChanged>();
         }
     }
@@ -393,5 +389,5 @@
         this->scrollIterator_ = this->lines_.begin();
 
-        SHELL_UPDATE_LISTENERS(exit);
+        this->updateListeners<&ShellListener::exit>();
     }
 }
Index: code/branches/console/src/libraries/core/Shell.h
===================================================================
--- code/branches/console/src/libraries/core/Shell.h	(revision 5968)
+++ code/branches/console/src/libraries/core/Shell.h	(revision 5969)
@@ -132,4 +132,11 @@
             void exit();
 
+            template <void (ShellListener::*F)()>
+            void updateListeners()
+            {
+                for (std::list<ShellListener*>::const_iterator it = this->listeners_.begin(); it != this->listeners_.end(); )
+                    ((*(it++))->*F)();
+            }
+
             std::list<ShellListener*> listeners_;
             InputBuffer* inputBuffer_;
