diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java b/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
index 573b0e7..db23c1e 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
@@ -78,8 +78,31 @@
         }
     }
 
+    public static Object invokePrivateMethod(Object o, String methodName, Object[] params) throws Exception {
+        final Method methods[] = o.getClass().getDeclaredMethods();
+        for (int i = 0; i < methods.length; ++i) {
+            if (methodName.equals(methods[i].getName())) {
+                methods[i].setAccessible(true);
+                return methods[i].invoke(o, params);
+            }
+        }
+        return null;
+    }
+    
+    private static <T> T unwrapBIS(T stream) {
+        try {
+             return (T) invokePrivateMethod(stream, "getInIfOpen", null);
+        } catch (Throwable t) {
+             return stream;
+        }
+    }
+
     protected void doStart(String user) throws Exception {
-        InputStream in = unwrap(System.in);
+        final Terminal terminal = terminalFactory.getTerminal();
+        // unwrap stream so it can be recognized by the terminal and wrapped to get 
+        // special keys in windows
+        InputStream unwrappedIn = unwrapBIS(unwrap(System.in));
+        InputStream in = terminal.wrapInIfNeeded(unwrappedIn);
         PrintStream out = unwrap(System.out);
         PrintStream err = unwrap(System.err);
         Runnable callback = new Runnable() {
@@ -91,7 +114,6 @@
                 }
             }
         };
-        final Terminal terminal = terminalFactory.getTerminal();
         this.console = new Console(commandProcessor,
                                    in,
                                    wrap(out),
