Index: Kernel/Core/Console.cs
===================================================================
--- Kernel/Core/Console.cs	(revision 868)
+++ Kernel/Core/Console.cs	(working copy)
@@ -38,7 +38,7 @@
 		public const string CONSOLE_KEY_UP_HANDLER = "CONSOLE_KEY_UP_HANDLER";
 		public const string CONSOLE_KEY_DOWN_HANDLER = "CONSOLE_KEY_DOWN_HANDLER";
 		public const string CONSOLE_TIMER_HANDLER = "CONSOLE_TIMER_HANDLER";
-
+		private static bool iswaiting = false;
 		private static bool initialized = false;
 		private static bool overwrite = false;
 
@@ -206,41 +206,60 @@
 			}
 				//case Keys.Enter:
 			else if (key == Keys.Enter) {
-				TextMode.WriteLine ();
-				TextMode.ClearToEndOfLine ();
-				TextMode.RefreshCursor ();
-				DispatchBuffer ();
+				if (iswaiting) {
+					iswaiting = false;
+					TextMode.ClearScreen();
+					Prompter.WritePrompt();
+				} else {
+					TextMode.WriteLine();
+					TextMode.ClearToEndOfLine();
+					TextMode.RefreshCursor();
+					DispatchBuffer();
+				}
 				return;
 			}
 			//}
 
 			// Code to fix keymap issue with caps.
 			bool upperCase = shifted;
-			if (
-				(scancode >= 0x10 && scancode <= 0x26) ||
-				(scancode == 0x1e || scancode == 0x1f) ||
-				(scancode >= 0x2c && scancode <= 0x2f) ||
-				(scancode >= 0x30 && scancode <= 0x32))
-				upperCase ^= Keyboard.CapsLock ();
+			if (!iswaiting) {
+				if (
+				       (scancode >= 0x10 && scancode <= 0x26) ||
+				       (scancode == 0x1e || scancode == 0x1f) ||
+				       (scancode >= 0x2c && scancode <= 0x2f) ||
+				       (scancode >= 0x30 && scancode <= 0x32))
+					upperCase ^= Keyboard.CapsLock();
 
-			byte character = Keyboard.Translate (scancode, upperCase);
-			if (character == 0) {
-				// just so that you can actually see that keyboard input works (& we simply don't know what character you just pressed)...
-				TextMode.WriteChar ((byte) '?');
-				TextMode.Write ((int) scancode);
-				TextMode.RefreshCursor ();
-				textBuffer->AppendChar ((byte) 255);
-				return;
+				byte character = Keyboard.Translate(scancode, upperCase);
+				if (character == 0) {
+					// just so that you can actually see that keyboard input works (& we simply don't know what character you just pressed)...
+					TextMode.WriteChar((byte)'?');
+					TextMode.Write((int)scancode);
+					TextMode.RefreshCursor();
+					textBuffer->AppendChar((byte)255);
+					return;
+				}
+
+
+				int read = TextMode.GetReadPosition();
+				int write = TextMode.GetWritePosition();
+				if (read != write)
+					TextMode.SetReadPos(write);
+
+				TextMode.WriteChar(character);
+				textBuffer->AppendChar(character);
+				TextMode.RefreshCursor();
 			}
+		}
 
-			int read = TextMode.GetReadPosition ();
-			int write = TextMode.GetWritePosition ();
-			if (read != write)
-				TextMode.SetReadPos (write);
+		public static void Waitforenter()
+		{
+			iswaiting = true;
+		}
 
-			TextMode.WriteChar (character);
-			textBuffer->AppendChar (character);
-			TextMode.RefreshCursor ();
+		public static bool iswaitingforenter()
+		{
+			return iswaiting;
 		}
 
 		private static void DispatchBuffer ()
