diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index 4afc7b8c728863d25316073640f988ca377f2a56..fb991807161aee52e2971983b039a3c57a644c0a 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -89,6 +89,35 @@ QList<CppClass> sortClasses(const QList<CppClass> &cppClasses)
 
 } // Anonymous
 
+namespace CppEditor {
+namespace Internal {
+
+class CppClassLabel : public QLabel
+{
+public:
+    CppClassLabel(CPPEditorWidget *editor, QWidget *parent)
+        : QLabel(parent), m_editor(editor)
+    {}
+
+    void setup(CppClass *cppClass)
+    {
+        setText(cppClass->name());
+        m_link = cppClass->link();
+    }
+
+private:
+    void mousePressEvent(QMouseEvent *)
+    {
+        m_editor->openLink(m_link);
+    }
+
+    CPPEditorWidget *m_editor;
+    CPPEditorWidget::Link m_link;
+};
+
+} // namespace Internal
+} // namespace CppEditor
+
 // CppTypeHierarchyWidget
 CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
     QWidget(0),
@@ -104,6 +133,9 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
     if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
         m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
 
+        m_inspectedClass = new CppClassLabel(m_cppEditor, this);
+        m_inspectedClass->setMargin(5);
+        layout->addWidget(m_inspectedClass);
         m_model = new QStandardItemModel(this);
         m_treeView = new NavigationTreeView(this);
         m_delegate = new AnnotatedItemDelegate(this);
@@ -158,6 +190,7 @@ void CppTypeHierarchyWidget::perform()
         const QSharedPointer<CppElement> &cppElement = evaluator.cppElement();
         CppElement *element = cppElement.data();
         if (CppClass *cppClass = dynamic_cast<CppClass *>(element)) {
+            m_inspectedClass->setup(cppClass);
             QStandardItem *bases = new QStandardItem(tr("Bases"));
             m_model->invisibleRootItem()->appendRow(bases);
             QVector<CppClass> v;
@@ -166,7 +199,8 @@ void CppTypeHierarchyWidget::perform()
             m_treeView->expand(m_model->indexFromItem(bases));
             QStandardItem *derived = new QStandardItem(tr("Derived"));
             m_model->invisibleRootItem()->appendRow(derived);
-            buildDerivedHierarchy(*cppClass, derived);
+            foreach (const CppClass &derivedClass, sortClasses(cppClass->derived()))
+                buildDerivedHierarchy(derivedClass, derived);
         }
     }
 }
@@ -183,7 +217,7 @@ void CppTypeHierarchyWidget::buildBaseHierarchy(QVector<CppClass> *s)
         }
     } else {
         QStandardItem *parent = m_model->item(0, 0);
-        for (int i = s->size() - 1; i >= 0; --i) {
+        for (int i = s->size() - 1; i > 0; --i) {
             QStandardItem *item = itemForClass(s->at(i));
             parent->appendRow(item);
             m_treeView->expand(m_model->indexFromItem(parent));
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 8e4a1a2ed39b7b21cfcc232ba6dd42b7cb25749d..0bb43f753c20676743e87577406b6655f8d97f8e 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -43,6 +43,7 @@ QT_BEGIN_NAMESPACE
 class QStandardItemModel;
 class QStandardItem;
 class QModelIndex;
+class QLabel;
 template <class> class QVector;
 QT_END_NAMESPACE
 
@@ -60,6 +61,7 @@ namespace Internal {
 
 class CPPEditorWidget;
 class CppClass;
+class CppClassLabel;
 
 class CppTypeHierarchyWidget : public QWidget
 {
@@ -84,6 +86,7 @@ private:
     Utils::NavigationTreeView *m_treeView;
     QStandardItemModel *m_model;
     Utils::AnnotatedItemDelegate *m_delegate;
+    CppClassLabel *m_inspectedClass;
 };
 
 // @todo: Pretty much the same design as the OutlineWidgetStack. Maybe we can generalize the