Index: code/branches/usability/src/libraries/core/input/InputBuffer.cc
===================================================================
--- code/branches/usability/src/libraries/core/input/InputBuffer.cc	(revision 8035)
+++ code/branches/usability/src/libraries/core/input/InputBuffer.cc	(revision 8036)
@@ -47,18 +47,4 @@
                                \\\"(){}[]<>.:,;_-+*/=!?|$&%^~#";
 
-        this->keyTranslator_[KeyCode::Numpad0]      = '0';
-        this->keyTranslator_[KeyCode::Numpad1]      = '1';
-        this->keyTranslator_[KeyCode::Numpad2]      = '2';
-        this->keyTranslator_[KeyCode::Numpad3]      = '3';
-        this->keyTranslator_[KeyCode::Numpad4]      = '4';
-        this->keyTranslator_[KeyCode::Numpad5]      = '5';
-        this->keyTranslator_[KeyCode::Numpad6]      = '6';
-        this->keyTranslator_[KeyCode::Numpad7]      = '7';
-        this->keyTranslator_[KeyCode::Numpad8]      = '8';
-        this->keyTranslator_[KeyCode::Numpad9]      = '9';
-        this->keyTranslator_[KeyCode::NumpadPeriod] = '.';
-        this->keyTranslator_[KeyCode::Divide]       = '/';
-        this->keyTranslator_[KeyCode::NumpadEnter]  = '\n';
-
         this->lastKey_ = KeyCode::Unassigned;
         this->timeSinceKeyPressed_ = 0.0f;
@@ -242,9 +228,5 @@
         }
 
-        std::map<KeyCode::ByEnum, char>::iterator it = this->keyTranslator_.find(evt.getKeyCode());
-        if (it != this->keyTranslator_.end())
-            this->insert(it->second);
-        else
-            this->insert(static_cast<char>(evt.getText()));
+        this->insert(static_cast<char>(evt.getText()));
     }
 
Index: code/branches/usability/src/libraries/core/input/InputBuffer.h
===================================================================
--- code/branches/usability/src/libraries/core/input/InputBuffer.h	(revision 8035)
+++ code/branches/usability/src/libraries/core/input/InputBuffer.h	(revision 8036)
@@ -178,5 +178,4 @@
             std::list<BaseInputBufferListenerTuple*> listeners_;
             std::string allowedChars_;
-            std::map<KeyCode::ByEnum, char> keyTranslator_;
             unsigned int maxLength_;
             unsigned int cursor_;
Index: code/branches/usability/src/libraries/core/input/Keyboard.cc
===================================================================
--- code/branches/usability/src/libraries/core/input/Keyboard.cc	(revision 8035)
+++ code/branches/usability/src/libraries/core/input/Keyboard.cc	(revision 8036)
@@ -36,16 +36,26 @@
     {
         // update modifiers
-        if (arg.key == OIS::KC_RMENU    || arg.key == OIS::KC_LMENU)
-            modifiers_ |= KeyboardModifier::Alt;   // alt key
-        if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL)
-            modifiers_ |= KeyboardModifier::Ctrl;  // ctrl key
-        if (arg.key == OIS::KC_RSHIFT   || arg.key == OIS::KC_LSHIFT)
-            modifiers_ |= KeyboardModifier::Shift; // shift key
+        switch (arg.key)
+        {
+            case OIS::KC_RMENU:
+            case OIS::KC_LMENU:
+                modifiers_ |= KeyboardModifier::Alt;   // alt key
+                break;
+            case OIS::KC_RCONTROL:
+            case OIS::KC_LCONTROL:
+                modifiers_ |= KeyboardModifier::Ctrl;  // ctrl key
+                break;
+            case OIS::KC_RSHIFT:
+            case OIS::KC_LSHIFT:
+                modifiers_ |= KeyboardModifier::Shift; // shift key
+                break;
+            case OIS::KC_TAB:
+                // Do not distribute the alt+tab event (messes with the operating system)
+                if ((modifiers_ & KeyboardModifier::Alt) != 0)
+                    return true;
+            default:;
+        }
 
-        // Do not distribute the alt+tab event (messes with the operating system)
-        if ((modifiers_ & KeyboardModifier::Alt) != 0 && arg.key == OIS::KC_TAB)
-            return true;
-
-        KeyEvent evt(arg);
+        KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0);
         super::buttonPressed(evt);
         return true;
@@ -56,14 +66,46 @@
     {
         // update modifiers
-        if (arg.key == OIS::KC_RMENU    || arg.key == OIS::KC_LMENU)
-            modifiers_ &= ~KeyboardModifier::Alt;   // alt key
-        if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL)
-            modifiers_ &= ~KeyboardModifier::Ctrl;  // ctrl key
-        if (arg.key == OIS::KC_RSHIFT   || arg.key == OIS::KC_LSHIFT)
-            modifiers_ &= ~KeyboardModifier::Shift; // shift key
+        switch (arg.key)
+        {
+            case OIS::KC_RMENU:
+            case OIS::KC_LMENU:
+                modifiers_ &= ~KeyboardModifier::Alt;   // alt key
+                break;
+            case OIS::KC_RCONTROL:
+            case OIS::KC_LCONTROL:
+                modifiers_ &= ~KeyboardModifier::Ctrl;  // ctrl key
+                break;
+            case OIS::KC_RSHIFT:
+            case OIS::KC_LSHIFT:
+                modifiers_ &= ~KeyboardModifier::Shift; // shift key
+                break;
+            default:;
+        }
 
-        KeyEvent evt(arg);
+        KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0);
         super::buttonReleased(evt);
         return true;
     }
+
+    /// A map which returns the corresponding chars for some key codes
+    unsigned int Keyboard::getKeyText(const OIS::KeyEvent& arg)
+    {
+        switch (arg.key)
+        {
+            case OIS::KC_NUMPAD0:     return static_cast<unsigned int>('0');
+            case OIS::KC_NUMPAD1:     return static_cast<unsigned int>('1');
+            case OIS::KC_NUMPAD2:     return static_cast<unsigned int>('2');
+            case OIS::KC_NUMPAD3:     return static_cast<unsigned int>('3');
+            case OIS::KC_NUMPAD4:     return static_cast<unsigned int>('4');
+            case OIS::KC_NUMPAD5:     return static_cast<unsigned int>('5');
+            case OIS::KC_NUMPAD6:     return static_cast<unsigned int>('6');
+            case OIS::KC_NUMPAD7:     return static_cast<unsigned int>('7');
+            case OIS::KC_NUMPAD8:     return static_cast<unsigned int>('8');
+            case OIS::KC_NUMPAD9:     return static_cast<unsigned int>('9');
+            case OIS::KC_DECIMAL:     return static_cast<unsigned int>('.');
+            case OIS::KC_DIVIDE:      return static_cast<unsigned int>('/');
+            case OIS::KC_NUMPADENTER: return static_cast<unsigned int>('\n');
+            default:                  return arg.text;
+        }
+    }
 }
Index: code/branches/usability/src/libraries/core/input/Keyboard.h
===================================================================
--- code/branches/usability/src/libraries/core/input/Keyboard.h	(revision 8035)
+++ code/branches/usability/src/libraries/core/input/Keyboard.h	(revision 8036)
@@ -83,4 +83,6 @@
         static std::string getClassNameImpl() { return "Keyboard"; }
 
+        static unsigned int getKeyText(const OIS::KeyEvent& arg);
+
         //! Bit mask representing keyboard modifiers
         int modifiers_;
