Index: /code/branches/console/src/libraries/core/IOConsole.cc
===================================================================
--- /code/branches/console/src/libraries/core/IOConsole.cc	(revision 5985)
+++ /code/branches/console/src/libraries/core/IOConsole.cc	(revision 5986)
@@ -127,7 +127,7 @@
                     this->buffer_->buttonPressed(KeyEvent(KeyCode::End,      0, 0));
                 else if (this->escapeSequence_ == "5~")
-                    this->buffer_->buttonPressed(KeyEvent(KeyCode::PageUp,   0, 0));
+                    this->buffer_->buttonPressed(KeyEvent(KeyCode::AltPageUp,   0, 0));
                 else if (this->escapeSequence_ == "6~")
-                    this->buffer_->buttonPressed(KeyEvent(KeyCode::PageDown, 0, 0));
+                    this->buffer_->buttonPressed(KeyEvent(KeyCode::AltPageDown, 0, 0));
                 else if (this->escapeSequence_.size() > 4)
                     // User probably very quickly pressed ESC and [
Index: /code/branches/console/src/libraries/core/Shell.cc
===================================================================
--- /code/branches/console/src/libraries/core/Shell.cc	(revision 5985)
+++ /code/branches/console/src/libraries/core/Shell.cc	(revision 5986)
@@ -30,4 +30,5 @@
 
 #include "util/OutputHandler.h"
+#include "util/StringUtils.h"
 #include "CommandExecutor.h"
 #include "CoreIncludes.h"
@@ -132,4 +133,6 @@
         this->inputBuffer_->registerListener(this, &Shell::scroll_up, KeyCode::PageUp);
         this->inputBuffer_->registerListener(this, &Shell::scroll_down, KeyCode::PageDown);
+        this->inputBuffer_->registerListener(this, &Shell::history_search_up, KeyCode::AltPageUp);
+        this->inputBuffer_->registerListener(this, &Shell::history_search_down, KeyCode::AltPageDown);
     }
 
@@ -357,4 +360,40 @@
     }
 
+    void Shell::history_search_up()
+    {
+        if (this->historyPosition_ == this->historyOffset_)
+            return;
+        unsigned int cursorPosition = this->getCursorPosition();
+        std::string input_str( this->getInput().substr(0,cursorPosition) ); //only search for the expression from the beginning of the inputline untill the cursor position
+	for (unsigned int newPos = this->historyPosition_+1; newPos<=this->historyOffset_; newPos++)
+        {
+            if (getLowercase(this->commandHistory_[this->historyOffset_ - newPos]).find(getLowercase(input_str)) == 0) //search case insensitive
+            {
+                this->historyPosition_ = newPos;
+                this->inputBuffer_->set(this->getFromHistory());
+                this->setCursorPosition( cursorPosition );
+                return;
+            }
+        }
+    }
+
+    void Shell::history_search_down()
+    {
+        if (this->historyPosition_ == 0)
+            return;
+        unsigned int cursorPosition = this->getCursorPosition();
+        std::string input_str( this->getInput().substr(0,cursorPosition) ); //only search for the expression from the beginn$
+        for (unsigned int newPos = this->historyPosition_-1; newPos>0; newPos--)
+        {
+            if (getLowercase(this->commandHistory_[this->historyOffset_ - newPos]).find(getLowercase(input_str)) == 0) //sear$
+            {
+                this->historyPosition_ = newPos;
+                this->inputBuffer_->set(this->getFromHistory());
+                this->setCursorPosition( cursorPosition );
+                return;
+            }
+        }
+    }
+
     void Shell::scroll_up()
     {
Index: /code/branches/console/src/libraries/core/Shell.h
===================================================================
--- /code/branches/console/src/libraries/core/Shell.h	(revision 5985)
+++ /code/branches/console/src/libraries/core/Shell.h	(revision 5986)
@@ -129,4 +129,6 @@
             void history_up();
             void history_down();
+            void history_search_up();
+            void history_search_down();
             void scroll_up();
             void scroll_down();
Index: /code/branches/console/src/libraries/core/input/InputPrereqs.h
===================================================================
--- /code/branches/console/src/libraries/core/input/InputPrereqs.h	(revision 5985)
+++ /code/branches/console/src/libraries/core/input/InputPrereqs.h	(revision 5986)
@@ -179,4 +179,5 @@
             Up            = OIS::KC_UP,              // UpArrow on arrow keypad
             PageUp        = OIS::KC_PGUP,            // PgUp on arrow keypad
+            AltPageUp     = OIS::KC_PGUP+1,          // Alternative PgUp for the IOConsole
             Left          = OIS::KC_LEFT,            // LeftArrow on arrow keypad
             Right         = OIS::KC_RIGHT,           // RightArrow on arrow keypad
@@ -184,4 +185,5 @@
             Down          = OIS::KC_DOWN,            // DownArrow on arrow keypad
             PageDown      = OIS::KC_PGDOWN,          // PgDn on arrow keypad
+            AltPageDown   = OIS::KC_END-1,           // Alternative PgUp for IOConsole
             Insert        = OIS::KC_INSERT,          // Insert on arrow keypad
             Delete        = OIS::KC_DELETE,          // Delete on arrow keypad
@@ -286,9 +288,9 @@
             "UP",
             "PageUp",
-            "",
+            "", // used for AltPageUp
             "Left",
             "",
             "Right",
-            "",
+            "", // used for AltPageDown
             "End", "Down", "PageDown", "Insert", "Delete",
             "","","","","","","",
