Index: code/branches/network/src/orxonox/console/InGameConsole.cc
===================================================================
--- code/branches/network/src/orxonox/console/InGameConsole.cc	(revision 1469)
+++ code/branches/network/src/orxonox/console/InGameConsole.cc	(revision 1470)
@@ -47,5 +47,7 @@
 
 #define LINES 30
-#define CHAR_WIDTH 7.85 // fix this please - determine the char-width dynamically
+#define CHAR_WIDTH1 7.34 // fix this please - determine the char-width dynamically
+#define CHAR_WIDTH2 8.28 // fix this please - determine the char-width dynamically
+#define CHAR_WIDTH3 7.78 // fix this please - determine the char-width dynamically
 
 namespace orxonox
@@ -177,8 +179,9 @@
     void InGameConsole::cursorChanged()
     {
-        std::string input = Shell::getInstance().getInput();
+        /*std::string input = Shell::getInstance().getInput();
         input.insert(Shell::getInstance().getCursorPosition(), 1, this->cursorSymbol_);
         if (LINES > 0)
-            this->print(input, 0);
+            this->print(input, 0);*/
+        this->setCursorPosition(Shell::getInstance().getCursorPosition() - inputWindowStart_);
     }
 
@@ -245,7 +248,7 @@
         this->consoleOverlayCursor_ = static_cast<PanelOverlayElement*>(this->om_->createOverlayElement("Panel", "InGameConsoleCursor"));
         this->consoleOverlayCursor_->setMetricsMode(Ogre::GMM_PIXELS);
-        this->consoleOverlayCursor_->setPosition(40,217);
-        this->consoleOverlayCursor_->setDimensions(2, 20);
-        this->consoleOverlayCursor_->setMaterialName("ConsoleNoise");
+        this->consoleOverlayCursor_->setPosition(5,219);
+        this->consoleOverlayCursor_->setDimensions(1, 14);
+        this->consoleOverlayCursor_->setMaterialName("Orxonox/GreenDot");
 
         this->consoleOverlay_ = this->om_->create("InGameConsoleConsole");
@@ -285,5 +288,5 @@
 
         if (LINES > 0)
-            this->maxCharsPerLine_ = max((unsigned int)10, (unsigned int) ((float)this->desiredTextWidth_ / CHAR_WIDTH));
+            this->maxCharsPerLine_ = max((unsigned int)10, (unsigned int) ((float)this->desiredTextWidth_ / CHAR_WIDTH3));
         else
             this->maxCharsPerLine_ = 10;
@@ -333,6 +336,16 @@
 
         this->cursor_ += dt;
-        if (this->cursor_ >= 2 * InGameConsole::BLINK)
+        if (this->cursor_ >= InGameConsole::BLINK)
+        {
             this->cursor_ = 0;
+            bShowCursor_ = !bShowCursor_;
+            if (bShowCursor_)
+              this->consoleOverlayCursor_->show();
+            else
+              this->consoleOverlayCursor_->hide();
+        }
+
+        /*if (this->cursor_ >= 2 * InGameConsole::BLINK)
+          this->cursor_ = 0;
 
         if (this->cursor_ >= InGameConsole::BLINK && this->cursorSymbol_ == '|')
@@ -345,5 +358,5 @@
             this->cursorSymbol_ = '|';
             this->cursorChanged();
-        }
+        }*/
 
         // this creates a flickering effect
@@ -445,4 +458,27 @@
             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(0.80, 1.00, 0.80, 1.00));
         }
+    }
+
+    void InGameConsole::setCursorPosition(int pos)
+    {
+        static std::string char1 = "bdefgilpqtzCEGIJKNOPQT5[}äü";
+        static std::string char2 = "Z4";
+
+        if (pos > maxCharsPerLine_)
+          pos = maxCharsPerLine_;
+        else if (pos < 0)
+          pos = 0;
+
+        float width = 0;
+        for (int i = 0; i < pos; ++i)
+        {
+            if (char1.find(displayedText_[i]) != std::string::npos)
+                width += CHAR_WIDTH1;
+            else if (char2.find(displayedText_[i]) != std::string::npos)
+                width += CHAR_WIDTH2;
+            else
+                width += CHAR_WIDTH3;
+        }
+        this->consoleOverlayCursor_->setPosition(width + 5, 219);
     }
 
@@ -480,4 +516,5 @@
                 }
                 this->consoleOverlayTextAreas_[index]->setCaption(convert2UTF(output));
+                this->displayedText_ = output;
                 this->numLinesShifted_ = linesUsed;
             }
@@ -493,4 +530,7 @@
                     output = output.substr(this->inputWindowStart_, this->maxCharsPerLine_);
                 }
+                else
+                  this->inputWindowStart_ = 0;
+                this->displayedText_ = output;
                 this->consoleOverlayTextAreas_[index]->setCaption(convert2UTF(output));
             }
Index: code/branches/network/src/orxonox/console/InGameConsole.h
===================================================================
--- code/branches/network/src/orxonox/console/InGameConsole.h	(revision 1469)
+++ code/branches/network/src/orxonox/console/InGameConsole.h	(revision 1470)
@@ -72,4 +72,5 @@
             void shiftLines();
             void colourLine(int colourcode, int index);
+            void setCursorPosition(int pos);
             void print(const std::string& text, int index, bool alwaysShift = false);
             static Ogre::UTFString convert2UTF(std::string s);
@@ -90,4 +91,6 @@
             char cursorSymbol_;
             bool active_;
+            bool bShowCursor_;
+            std::string displayedText_;
             Ogre::OverlayManager* om_;
             Ogre::Overlay* consoleOverlay_;
