diff --git a/src/interpreter.cpp b/src/interpreter.cpp
index f112b52..5b13337 100644
--- a/src/interpreter.cpp
+++ b/src/interpreter.cpp
@@ -8,6 +8,7 @@
 
 #include <boost/mpl/for_each.hpp>
 #include <iostream>
+#include <sstream>
 #include "datastore_access.hpp"
 #include "interpreter.hpp"
 #include "utils.hpp"
@@ -79,6 +80,60 @@
         std::cout << it << std::endl;
 }
 
+std::string Interpreter::buildTypeInfo(const std::string& path) const
+{
+    std::ostringstream ss;
+    switch (m_datastore.schema()->nodeType(path)) {
+    case yang::NodeTypes::Container:
+        ss << "container";
+        break;
+    case yang::NodeTypes::PresenceContainer:
+        ss << "presence container";
+        break;
+    case yang::NodeTypes::Leaf:
+    {
+        auto leafType = m_datastore.schema()->leafType(path);
+        auto typedefName = m_datastore.schema()->leafTypeName(path);
+        std::string baseTypeStr;
+        if (leafType == yang::LeafDataTypes::LeafRef) {
+            ss << "-> ";
+            ss << m_datastore.schema()->leafrefPath(path) << " ";
+            baseTypeStr = leafDataTypeToString(m_datastore.schema()->leafrefBaseType(path));
+        } else {
+            baseTypeStr = leafDataTypeToString(leafType);
+        }
+
+        if (typedefName) {
+            ss << *typedefName << " (" << baseTypeStr << ")";
+        } else {
+            ss << baseTypeStr;
+        }
+
+        if (auto units = m_datastore.schema()->units(path)) {
+            ss << " [" + *units + "]";
+        }
+
+        if (m_datastore.schema()->leafIsKey(path)) {
+            ss << " (key)";
+        }
+        break;
+    }
+    case yang::NodeTypes::List:
+        ss << "list";
+        break;
+    }
+    return ss.str();
+}
+
+void Interpreter::operator()(const describe_& describe) const
+{
+    auto path = absolutePathFromCommand(describe);
+    std::cout << path << ": " << buildTypeInfo(path) << std::endl;
+    if (auto description = m_datastore.schema()->description(path)) {
+        std::cout << std::endl << *description << std::endl;
+    }
+}
+
 struct commandLongHelpVisitor : boost::static_visitor<const char*> {
     template <typename T>
     auto constexpr operator()(boost::type<T>) const
@@ -156,6 +211,15 @@
     }
 }
 
+std::string Interpreter::absolutePathFromCommand(const describe_& describe) const
+{
+    auto pathStr = boost::apply_visitor(pathToStringVisitor(), describe.m_path);
+    if (boost::apply_visitor(getPathScopeVisitor(), describe.m_path) == Scope::Absolute)
+        return pathStr;
+    else
+        return joinPaths(m_parser.currentNode(), pathStr);
+}
+
 Interpreter::Interpreter(Parser& parser, DatastoreAccess& datastore)
     : m_parser(parser)
     , m_datastore(datastore)
