[1mdiff --git a/include/shellcore/types.h b/include/shellcore/types.h[m
[1mindex 214ff41..1e6acdf 100644[m
[1m--- a/include/shellcore/types.h[m
[1m+++ b/include/shellcore/types.h[m
[36m@@ -132,6 +132,7 @@[m [mstruct SHCORE_PUBLIC Value {[m
     container_type::mapped_type& operator [](const std::string &k) { return _map[k]; }[m
     bool operator == (const Map_type &other) const { return _map == other._map; }[m
 [m
[32m+[m[32m    bool empty() const { return _map.empty(); }[m
     size_t size() const { return _map.size(); }[m
     size_t count(const std::string &k) const { return _map.count(k); }[m
   private:[m
[1mdiff --git a/shellcore/types.cc b/shellcore/types.cc[m
[1mindex ef7505a..c2fc5a5 100644[m
[1m--- a/shellcore/types.cc[m
[1m+++ b/shellcore/types.cc[m
[36m@@ -984,9 +984,13 @@[m [mstd::string &Value::append_descr(std::string &s_out, int indent, int quote_strin[m
           s_out.append((indent + 1) * 4, ' ');[m
         iter->append_descr(s_out, indent < 0 ? indent : indent + 1, '"');[m
       }[m
[31m-      s_out += nl;[m
[31m-      if (indent > 0)[m
[31m-        s_out.append(indent * 4, ' ');[m
[32m+[m[41m      [m
[32m+[m[32m      if (!vec->empty()) {[m
[32m+[m[32m        s_out += nl;[m
[32m+[m[32m        if (indent > 0)[m
[32m+[m[32m          s_out.append(indent * 4, ' ');[m
[32m+[m[32m      }[m
[32m+[m[41m      [m
       s_out += "]";[m
     }[m
     break;[m
[36m@@ -996,7 +1000,11 @@[m [mstd::string &Value::append_descr(std::string &s_out, int indent, int quote_strin[m
         throw Exception::value_error("Invalid map value encountered");[m
       Map_type *map = value.map->get();[m
       Map_type::iterator myend = map->end(), mybegin = map->begin();[m
[31m-      s_out += "{" + nl;[m
[32m+[m[32m      s_out += "{";[m
[32m+[m[41m      [m
[32m+[m[32m      if (!map->empty())[m
[32m+[m[32m        s_out += nl;[m
[32m+[m[41m      [m
       for (Map_type::iterator iter = mybegin; iter != myend; ++iter) {[m
         if (iter != mybegin)[m
           s_out += ", " + nl;[m
[36m@@ -1007,9 +1015,13 @@[m [mstd::string &Value::append_descr(std::string &s_out, int indent, int quote_strin[m
         s_out += "\": ";[m
         iter->second.append_descr(s_out, indent < 0 ? indent : indent + 1, '"');[m
       }[m
[31m-      s_out += nl;[m
[31m-      if (indent > 0)[m
[31m-        s_out.append(indent * 4, ' ');[m
[32m+[m[41m      [m
[32m+[m[32m      if (!map->empty()) {[m
[32m+[m[32m        s_out += nl;[m
[32m+[m[32m        if (indent > 0)[m
[32m+[m[32m          s_out.append(indent * 4, ' ');[m
[32m+[m[32m      }[m
[32m+[m[41m      [m
       s_out += "}";[m
     }[m
     break;[m
