diff --git a/Utils/Console/Node.cc b/Utils/Console/Node.cc
index 41c17797186f9d40fd02e1ab0061adddc0db84b7..5a043179c6ad243ee4838617e4e5fd16a3525a53 100644
--- a/Utils/Console/Node.cc
+++ b/Utils/Console/Node.cc
@@ -95,10 +95,15 @@ prefix_ bool senf::console::GenericNode::isChildOf(DirectoryNode & parent)
 prefix_ void senf::console::LinkNode::v_help(std::ostream & os)
     const
 {
-    os << "link to ";
     follow().help(os);
 }
 
+prefix_ std::string senf::console::LinkNode::v_shorthelp()
+    const
+{
+    return follow().shorthelp();
+}
+
 ///////////////////////////////////////////////////////////////////////////
 //senf::console::DirectoryNode
 
@@ -161,6 +166,14 @@ prefix_ void senf::console::DirectoryNode::v_help(std::ostream & output)
     output << doc_ << "\n";
 }
 
+prefix_ std::string senf::console::DirectoryNode::v_shorthelp()
+    const
+{
+    if (! shortdoc_.empty())
+        return shortdoc_;
+    return doc_.substr(0,doc_.find('\n'));
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::console::detail::NodeTraverser
 
@@ -217,6 +230,14 @@ prefix_ void senf::console::SimpleCommandNode::v_help(std::ostream & output)
     output << doc_ << "\n";
 }
 
+prefix_ std::string senf::console::SimpleCommandNode::v_shorthelp()
+    const
+{
+    if (! shortdoc_.empty())
+        return shortdoc_;
+    return doc_.substr(0,doc_.find('\n'));
+}
+
 prefix_ void senf::console::SimpleCommandNode::v_execute(boost::any & rv, std::ostream & os,
                                                          ParseCommandInfo const & command)
     const
diff --git a/Utils/Console/Node.cci b/Utils/Console/Node.cci
index 59228c229b474e502e18313b345ae3875b4a0af6..e0e3d7785e3d29c652bed1681b4fc7b39b078554 100644
--- a/Utils/Console/Node.cci
+++ b/Utils/Console/Node.cci
@@ -84,6 +84,12 @@ prefix_ void senf::console::GenericNode::help(std::ostream & output)
     v_help(output);
 }
 
+prefix_ std::string senf::console::GenericNode::shorthelp()
+    const
+{
+    return v_shorthelp();
+}
+
 prefix_ bool senf::console::GenericNode::operator==(GenericNode & other)
     const
 {
@@ -247,6 +253,13 @@ senf::console::DirectoryNode::doc(std::string const & doc)
     return *this;
 }
 
+prefix_ senf::console::DirectoryNode &
+senf::console::DirectoryNode::shortdoc(std::string const & doc)
+{
+    shortdoc_ = doc;
+    return *this;
+}
+
 prefix_ senf::console::DirectoryNode::ptr senf::console::DirectoryNode::thisptr()
 {
     return boost::static_pointer_cast<DirectoryNode>(shared_from_this());
@@ -334,6 +347,13 @@ senf::console::SimpleCommandNode::doc(std::string const & doc)
     return *this;
 }
 
+prefix_ senf::console::SimpleCommandNode &
+senf::console::SimpleCommandNode::shortdoc(std::string const & doc)
+{
+    shortdoc_ = doc;
+    return *this;
+}
+
 prefix_ senf::console::SimpleCommandNode::ptr senf::console::SimpleCommandNode::thisptr()
 {
     return boost::static_pointer_cast<SimpleCommandNode>(shared_from_this());
diff --git a/Utils/Console/Node.hh b/Utils/Console/Node.hh
index 9a44c5af43fe5bba92576f9d82f7e8e7f54ccbf1..4772b45ba912840c905ef05c16070f2ffc77c27a 100644
--- a/Utils/Console/Node.hh
+++ b/Utils/Console/Node.hh
@@ -279,6 +279,7 @@ namespace console {
         bool active() const;            ///< \c true, if node is attached to the root() node
 
         void help(std::ostream & output) const; ///< Write help info to \a output
+        std::string shorthelp() const;  ///< Get short (one-line) documentation
 
         ptr thisptr();                  ///< Get smart pointer to node
         cptr thisptr() const;           ///< Get smart pointer to node (const)
@@ -312,8 +313,12 @@ namespace console {
 #endif
         virtual void v_help(std::ostream & output) const = 0;
                                         ///< Provide help information
-                                        /**< This member must be implemented in derived classes
-                                             to provide node specific help information. */
+                                        /**< This member must be implemented in derived classes to
+                                             provide node specific help information. */
+        virtual std::string v_shorthelp() const = 0;
+                                        ///< Provide short documentation
+                                        /**< This member must be implemented in derived classes to
+                                             provide node specific documentation. */
 
     private:
         std::string name_;
@@ -359,6 +364,7 @@ namespace console {
         explicit LinkNode(GenericNode & node);
 
         virtual void v_help(std::ostream &) const;
+        virtual std::string v_shorthelp() const;
 
         GenericNode::ptr node_;
     };
@@ -556,6 +562,7 @@ namespace console {
         ///////////////////////////////////////////////////////////////////////////
 
         DirectoryNode & doc(std::string const & doc); ///< Set node documentation
+        DirectoryNode & shortdoc(std::string const & doc); ///< Set node short documentation
 
         ptr thisptr();
         cptr thisptr() const;
@@ -566,9 +573,11 @@ namespace console {
     private:
         void add(GenericNode::ptr node);
         virtual void v_help(std::ostream & output) const;
+        virtual std::string v_shorthelp() const;
 
         ChildMap children_;
         std::string doc_;
+        std::string shortdoc_;
 
         friend DirectoryNode & root();
     };
@@ -694,18 +703,21 @@ namespace console {
         cptr thisptr() const;
 
         SimpleCommandNode & doc(std::string const & doc);
+        SimpleCommandNode & shortdoc(std::string const & doc);
 
     protected:
         SimpleCommandNode(Function const & fn);
 
     private:
         virtual void v_help(std::ostream & output) const;
+        virtual std::string v_shorthelp() const;
         virtual void v_execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command)
             const;
 
 
         Function fn_;
         std::string doc_;
+        std::string shortdoc_;
     };
 
 #ifndef DOXYGEN
diff --git a/Utils/Console/Node.test.cc b/Utils/Console/Node.test.cc
index 1b2a3c715df1efec87442bc997e1cbb8201ef3dd..aeea861d34da1651a05f659e5c9ed5c2b34fa285 100644
--- a/Utils/Console/Node.test.cc
+++ b/Utils/Console/Node.test.cc
@@ -107,10 +107,15 @@ BOOST_AUTO_UNIT_TEST(directoryNode)
         completions, 
         completions+sizeof(completions)/sizeof(completions[0]) );
 
-    p->doc("test doc");
+    p->doc("test doc\nline 2");
     std::stringstream ss;
     p->help(ss);
-    BOOST_CHECK_EQUAL( ss.str(), "test doc\n" );
+    BOOST_CHECK_EQUAL( ss.str(), "test doc\nline 2\n" );
+    BOOST_CHECK_EQUAL( p->shorthelp(), "test doc" );
+    p->doc("");
+    BOOST_CHECK_EQUAL( p->shorthelp(), "" );
+    p->shortdoc("short doc");
+    BOOST_CHECK_EQUAL( p->shorthelp(), "short doc" );
 
     BOOST_CHECK( senf::console::root().remove("dir1") == p );
     senf::console::root().remove("dir2");
diff --git a/Utils/Console/OverloadedCommand.cc b/Utils/Console/OverloadedCommand.cc
index abae95e9256f6d9efd0fe8579d4b1c10a94d4d9c..8a0c631ca772f977a57d37b2a3bd15dfd56b7e8c 100644
--- a/Utils/Console/OverloadedCommand.cc
+++ b/Utils/Console/OverloadedCommand.cc
@@ -155,6 +155,14 @@ prefix_ void senf::console::OverloadedCommandNode::v_help(std::ostream & os)
     }
 }
 
+prefix_ std::string senf::console::OverloadedCommandNode::v_shorthelp()
+    const
+{
+    if (!shortdoc_.empty())
+        return shortdoc_;
+    return doc_.substr(0,doc_.find('\n'));
+}
+
 prefix_ void senf::console::OverloadedCommandNode::v_execute(boost::any & rv,
                                                              std::ostream & os,
                                                              ParseCommandInfo const & command)
diff --git a/Utils/Console/OverloadedCommand.cci b/Utils/Console/OverloadedCommand.cci
index c2fbdc6c26da6062869f1670322c09fe75b1da9b..dbbb7c0668f5dea535ec99883bb3305bcaae004e 100644
--- a/Utils/Console/OverloadedCommand.cci
+++ b/Utils/Console/OverloadedCommand.cci
@@ -56,6 +56,13 @@ senf::console::OverloadedCommandNode::doc(std::string const & doc)
     return *this;
 }
 
+prefix_ senf::console::OverloadedCommandNode &
+senf::console::OverloadedCommandNode::shortdoc(std::string const & doc)
+{
+    shortdoc_ = doc;
+    return *this;
+}
+
 prefix_ unsigned
 senf::console::OverloadedCommandNode::overloadIndex(CommandOverload const & overload)
 {
diff --git a/Utils/Console/OverloadedCommand.hh b/Utils/Console/OverloadedCommand.hh
index bb80f2332eef138fc2d8d276b521e7dd62d2f535..fb374ec301b35e21ba1a8881bc26d98d63d7d771 100644
--- a/Utils/Console/OverloadedCommand.hh
+++ b/Utils/Console/OverloadedCommand.hh
@@ -184,6 +184,8 @@ namespace console {
 
         OverloadedCommandNode & doc(std::string const & doc);
                                         ///< Assign global help for all overloads
+        OverloadedCommandNode & shortdoc(std::string const & doc);
+                                        ///< Assign short documentation for all overloads
 
         unsigned overloadIndex(CommandOverload const & overload);
                                         ///< Return the overload index for \a overload
@@ -197,6 +199,7 @@ namespace console {
         OverloadedCommandNode();
 
         virtual void v_help(std::ostream & output) const;
+        virtual std::string v_shorthelp() const;
         virtual void v_execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command)
             const;
 
@@ -204,6 +207,7 @@ namespace console {
 
         Overloads overloads_;
         std::string doc_;
+        std::string shortdoc_;
     };
 
     /** \brief Basic command overload
diff --git a/Utils/Console/ParsedCommand.cci b/Utils/Console/ParsedCommand.cci
index aeab60e2202654840e96fa45c6518fd66cf46444..1ec6a29601d02effac45b2c4d60da154c0dbbc8d 100644
--- a/Utils/Console/ParsedCommand.cci
+++ b/Utils/Console/ParsedCommand.cci
@@ -120,6 +120,12 @@ prefix_ void senf::console::ParsedCommandAttributorBase::nodeDoc(std::string con
     node().doc(doc);
 }
 
+prefix_ void senf::console::ParsedCommandAttributorBase::shortDoc(std::string const & doc)
+    const
+{
+    node().shortdoc(doc);
+}
+
 ///////////////////////////////cci.e///////////////////////////////////////
 #undef prefix_
 
diff --git a/Utils/Console/ParsedCommand.cti b/Utils/Console/ParsedCommand.cti
index 065f14fa857ff1c854a8f16b308efffea6bdefd1..7e9710f35c446f069686619499c74ccaccc80a6b 100644
--- a/Utils/Console/ParsedCommand.cti
+++ b/Utils/Console/ParsedCommand.cti
@@ -102,6 +102,15 @@ senf::console::ParsedArgumentAttributorBase<Overload,Self,ReturnType>::doc(std::
     return static_cast<Self const &>(*this);
 }
 
+template <class Overload, class Self, class ReturnType>
+prefix_ Self senf::console::ParsedArgumentAttributorBase<Overload,Self,ReturnType>::
+shortdoc(std::string const & doc)
+    const
+{
+    this->ParsedCommandAttributorBase::shortDoc(doc);
+    return static_cast<Self const &>(*this);
+}
+
 template <class Overload, class Self, class ReturnType>
 prefix_ Self senf::console::ParsedArgumentAttributorBase<Overload,Self,ReturnType>::
 overloadDoc(std::string const & doc)
@@ -136,6 +145,15 @@ senf::console::ParsedArgumentAttributorBase<Overload,Self,void>::doc(std::string
     return static_cast<Self const &>(*this);
 }
 
+template <class Overload, class Self>
+prefix_ Self senf::console::ParsedArgumentAttributorBase<Overload, Self, void>::
+shortdoc(std::string const & doc)
+    const
+{
+    this->ParsedCommandAttributorBase::shortDoc(doc);
+    return static_cast<Self const &>(*this);
+}
+
 template <class Overload, class Self>
 prefix_ Self senf::console::ParsedArgumentAttributorBase<Overload,Self,void>::
 overloadDoc(std::string const & doc)
diff --git a/Utils/Console/ParsedCommand.hh b/Utils/Console/ParsedCommand.hh
index ba0bbca5afdc4d81ac90756620f015d61d7fc98a..45276cb3dfdf455271eb45b048456b8e129e2c18 100644
--- a/Utils/Console/ParsedCommand.hh
+++ b/Utils/Console/ParsedCommand.hh
@@ -216,6 +216,7 @@ namespace console {
         ParsedCommandOverloadBase & overload() const;
         void overloadDoc(std::string const & doc) const;
         void nodeDoc(std::string const & doc) const;
+        void shortDoc(std::string const & doc) const;
         
     private:
         ParsedCommandOverloadBase & overload_;
@@ -398,6 +399,7 @@ namespace console {
     {
     public:
         Self doc(std::string const & doc) const; ///< Set documentation for all overloads
+        Self shortdoc(std::string const & doc) const; ///< Set short documentation for all overloads
         Self overloadDoc(std::string const & doc) const; ///< Set overload specific documentation
         Self formatter(typename Overload::Formatter formatter) const; 
                                         ///< Set return value formatter
@@ -426,6 +428,7 @@ namespace console {
     {
     public:
         Self doc(std::string const & doc) const; ///< Set documentation for all overloads
+        Self shortdoc(std::string const & doc) const; ///< Set short documentation for all overloads
         Self overloadDoc(std::string const & doc) const; ///< Set overload specific documentation
 
     protected:
diff --git a/Utils/Console/ParsedCommand.test.cc b/Utils/Console/ParsedCommand.test.cc
index e2413e77cbb2bd99559f8e28b2c18d382ea842f4..74f57d7351ee463875da91c2fa87227ccea26c51 100644
--- a/Utils/Console/ParsedCommand.test.cc
+++ b/Utils/Console/ParsedCommand.test.cc
@@ -165,6 +165,9 @@ BOOST_AUTO_UNIT_TEST(parsedCommand)
                 "lux sto ioco. Per Re dono. Copiose reus scitus jus diligens sis scapulare\n"
                 "Servitium transi." )
 
+            .shortdoc(
+                "Ops fortunate." )
+
             .overloadDoc(
                 "Lo nam balnearius Opprimo Pennatus, no decentia sui, dicto esse se pulchritudo,\n"
                 "pupa Sive res indifferenter. Captivo pa." )
@@ -201,6 +204,8 @@ BOOST_AUTO_UNIT_TEST(parsedCommand)
                          boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
 
         BOOST_CHECK_EQUAL( ss.str(), "333\n" "224\n" "Value: foo\n" "Value: \n" );
+
+        BOOST_CHECK_EQUAL( dir("cb").shorthelp(), "Ops fortunate." );
     }
 
     {
diff --git a/Utils/Console/Variables.cti b/Utils/Console/Variables.cti
index f428842b5bf0ce61ae1168148726b8c497731733..e5a311c999d475b4e938b54b0696763f2e52b635 100644
--- a/Utils/Console/Variables.cti
+++ b/Utils/Console/Variables.cti
@@ -78,6 +78,14 @@ senf::console::ConstVariableAttributor<Variable>::doc(std::string const & doc)
     return *this;
 }
 
+template <class Variable>
+prefix_ senf::console::ConstVariableAttributor<Variable>
+senf::console::ConstVariableAttributor<Variable>::shortdoc(std::string const & doc)
+{
+    queryOverload_.node().shortdoc(doc);
+    return *this;
+}
+
 template <class Variable>
 prefix_ senf::console::ConstVariableAttributor<Variable>
 senf::console::ConstVariableAttributor<Variable>::formatter(Formatter formatter)
@@ -144,6 +152,14 @@ senf::console::VariableAttributor<Variable>::doc(std::string const & doc)
     return *this;
 }
 
+template <class Variable>
+prefix_ typename senf::console::VariableAttributor<Variable>
+senf::console::VariableAttributor<Variable>::shortdoc(std::string const & doc)
+{
+    ConstVariableAttributor<Variable>::shortdoc(doc);
+    return *this;
+}
+
 template <class Variable>
 prefix_ typename senf::console::VariableAttributor<Variable>
 senf::console::VariableAttributor<Variable>::formatter(Formatter formatter)
diff --git a/Utils/Console/Variables.hh b/Utils/Console/Variables.hh
index 870f2ed7a10f1aec239f54b64efe4ddb9e8b1937..4f93a93fcd3bd3d9862a1877a0a21478d4cb9a40 100644
--- a/Utils/Console/Variables.hh
+++ b/Utils/Console/Variables.hh
@@ -86,6 +86,7 @@ namespace console {
         typedef ConstVariableAttributor return_type;
 
         ConstVariableAttributor doc(std::string const & doc);
+        ConstVariableAttributor shortdoc(std::string const & doc);
         ConstVariableAttributor formatter(Formatter formatter);
 
         OverloadedCommandNode & node() const; ///< Return the node object
@@ -145,6 +146,7 @@ namespace console {
         typedef typename ConstVariableAttributor<Variable>::QueryOverload QueryOverload;
 
         VariableAttributor doc(std::string const & doc); ///< Set documentation of the variable
+        VariableAttributor shortdoc(std::string const & doc); ///< Set short documentation
         VariableAttributor formatter(Formatter formatter); ///< Set formatter
         /**< The \a formatter must be a callable with a signature
              compatible with