diff --git a/karaf/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java b/karaf/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
index 4c1ddc6..b124691 100644
--- a/karaf/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
+++ b/karaf/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
@@ -114,7 +114,7 @@
             Object param = it.next();
             // Check for help
             if (HELP.name().equals(param) || Arrays.asList(HELP.aliases()).contains(param)) {
-                printUsage(action.getClass().getAnnotation(Command.class), options.keySet(), arguments.keySet(), System.out);
+                printUsage(session, action.getClass().getAnnotation(Command.class), options.keySet(), arguments.keySet(), System.out);
                 return false;
             }
             if (processOptions && param instanceof String && ((String) param).startsWith("-")) {
@@ -205,7 +205,7 @@
         return true;
     }
 
-    protected void printUsage(Command command, Set<Option> options, Set<Argument> arguments, PrintStream out)
+    protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> arguments, PrintStream out)
     {
         options = new HashSet<Option>(options);
         options.add(HELP);
diff --git a/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/commands/BlueprintCommand.java b/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/commands/BlueprintCommand.java
index 1ae8192..89eade5 100644
--- a/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/commands/BlueprintCommand.java
+++ b/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/commands/BlueprintCommand.java
@@ -26,7 +26,10 @@
 import java.util.HashSet;
 import java.util.Arrays;
 import java.io.PrintStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import jline.Terminal;
 import org.apache.felix.gogo.commands.Action;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.Option;
@@ -85,8 +88,9 @@
         }
 
         @Override
-        protected void printUsage(Command command, Set<Option> options, Set<Argument> args, PrintStream out)
+        protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> args, PrintStream out)
         {
+            Terminal term = (Terminal) session.get(".jline.terminal");
             List<Argument> arguments = new ArrayList<Argument>(args);
             Collections.sort(arguments, new Comparator<Argument>() {
                 public int compare(Argument o1, Argument o2) {
@@ -98,7 +102,7 @@
             if (command != null && (command.description() != null || command.name() != null))
             {
                 out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DESCRIPTION").a(Ansi.Attribute.RESET));
-                out.print("\t");
+                out.print("        ");
                 if (command.name() != null) {
                     out.println(Ansi.ansi().a(command.scope()).a(":").a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
                     out.println();
@@ -133,7 +137,7 @@
             }
 
             out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("SYNTAX").a(Ansi.Attribute.RESET));
-            out.print("\t");
+            out.print("        ");
             out.println(syntax.toString());
             out.println();
             if (arguments.size() > 0)
@@ -141,7 +145,9 @@
                 out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("ARGUMENTS").a(Ansi.Attribute.RESET));
                 for (Argument argument : arguments)
                 {
-                    out.println(String.format("\t%-15s%s", argument.name(), argument.description()));
+                    out.print("        ");
+                    out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(argument.name()).a(Ansi.Attribute.RESET));
+                    printFormatted("                ", argument.description(), term != null ? term.getTerminalWidth() : 80, out);
                 }
                 out.println();
             }
@@ -155,9 +161,9 @@
                     {
                         opt += ", " + alias;
                     }
-                    out.print("\t");
-                    out.println(opt);
-                    out.println(String.format("\t%-15s%s", "", option.description()));
+                    out.print("        ");
+                    out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
+                    printFormatted("                ", option.description(), term != null ? term.getTerminalWidth() : 80, out);
                 }
                 out.println();
             }
@@ -165,7 +171,13 @@
 
         protected void printFormatted(String prefix, String str, int termWidth, PrintStream out) {
             int pfxLen = length(prefix);
-            
+            int maxwidth = termWidth - pfxLen;
+            Pattern wrap = Pattern.compile("(\\S\\S{" + maxwidth + ",}|.{1," + maxwidth + "})(\\s+|$)");
+            Matcher m = wrap.matcher(str);
+            while (m.find()) {
+                out.print(prefix);
+                out.println(m.group());
+            }
         }
 
         protected int length(String str) {
diff --git a/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/jline/ConsoleFactory.java b/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/jline/ConsoleFactory.java
index ff0a8df..8dde072 100644
--- a/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/jline/ConsoleFactory.java
+++ b/karaf/shell/console/src/main/java/org/apache/felix/karaf/shell/console/jline/ConsoleFactory.java
@@ -93,6 +93,9 @@
             CommandSession session = console.getSession();
             session.put("USER", "karaf");
             session.put("APPLICATION", System.getProperty("karaf.name", "root"));
+            session.put("LINES", Integer.toString(terminal.getTerminalHeight()));
+            session.put("COLUMNS", Integer.toString(terminal.getTerminalWidth()));
+            session.put(".jline.terminal", terminal);
             new Thread(console, "Karaf Shell Console Thread").start();
         }
     }
diff --git a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
index 996a2f4..98cadda 100644
--- a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
+++ b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
@@ -30,6 +30,7 @@
 import java.util.Properties;
 import java.util.concurrent.Callable;
 
+import jline.Terminal;
 import org.apache.felix.karaf.shell.console.Completer;
 import org.apache.felix.karaf.shell.console.completer.AggregateCompleter;
 import org.apache.felix.karaf.shell.console.jline.Console;
@@ -37,6 +38,8 @@
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.Environment;
 import org.apache.sshd.server.ExitCallback;
+import org.apache.sshd.server.Signal;
+import org.apache.sshd.server.SignalListener;
 import org.osgi.service.blueprint.container.ReifiedType;
 import org.osgi.service.command.CommandProcessor;
 import org.osgi.service.command.CommandSession;
@@ -93,22 +96,32 @@
 
         public void start(final Environment env) throws IOException {
             try {
+                final Terminal terminal = new SshTerminal(env);
                 Console console = new Console(commandProcessor,
                                               in,
                                               new PrintStream(new LfToCrLfFilterOutputStream(out), true),
                                               new PrintStream(new LfToCrLfFilterOutputStream(err), true),
-                                              new SshTerminal(env),
+                                              terminal,
                                               new AggregateCompleter(completers),
                                               new Runnable() {
                                                   public void run() {
                                                       destroy();
                                                   }
                                               });
-                CommandSession session = console.getSession();
+                final CommandSession session = console.getSession();
                 session.put("APPLICATION", System.getProperty("karaf.name", "root"));
                 for (Map.Entry<String,String> e : env.getEnv().entrySet()) {
                     session.put(e.getKey(), e.getValue());
                 }
+                session.put("LINES", Integer.toString(terminal.getTerminalHeight()));
+                session.put("COLUMNS", Integer.toString(terminal.getTerminalWidth()));
+                env.addSignalListener(new SignalListener() {
+                    public void signal(Signal signal) {
+                        session.put("LINES", Integer.toString(terminal.getTerminalHeight()));
+                        session.put("COLUMNS", Integer.toString(terminal.getTerminalWidth()));
+                    }
+                }, Signal.WINCH);
+                session.put(".jline.terminal", terminal);
                 new Thread(console).start();
             } catch (Exception e) {
                 throw (IOException) new IOException("Unable to start shell").initCause(e);
diff --git a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/SshTerminal.java b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/SshTerminal.java
index 9c4d42f..b4fe699 100644
--- a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/SshTerminal.java
+++ b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/SshTerminal.java
@@ -28,7 +28,7 @@
 import org.apache.sshd.server.Signal;
 import org.apache.sshd.server.SignalListener;
 
-public class SshTerminal extends Terminal implements SignalListener {
+public class SshTerminal extends Terminal {
 
     public static final short ARROW_START = 27;
     public static final short ARROW_PREFIX = 91;
@@ -52,7 +52,6 @@
 
     public SshTerminal(Environment environment) {
         this.environment = environment;
-        this.environment.addSignalListener(this);
         try {
             replayReader = new InputStreamReader(replayStream, encoding);
         } catch (Exception e) {
@@ -100,9 +99,6 @@
     public void disableEcho() {
     }
 
-    public void signal(Signal signal) {
-    }
-
     public int readVirtualKey(InputStream in) throws IOException {
         int c = readCharacter(in);
 
