diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp
index 33e2269cf97b3ae30c43542d7c060d9ed647ae88..f2bff31f320a26060f3d89526c23855a0ddaa97f 100644
--- a/src/plugins/qmljseditor/qmloutlinemodel.cpp
+++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp
@@ -63,6 +63,8 @@ private:
         return text;
     }
 
+
+
     bool visit(AST::UiObjectDefinition *objDef)
     {
         AST::SourceLocation location;
@@ -71,7 +73,9 @@ private:
                 - objDef->firstSourceLocation().offset
                 + objDef->lastSourceLocation().length;
 
-        QModelIndex index = m_model->enterElement(asString(objDef->qualifiedTypeNameId), location);
+        const QString typeName = asString(objDef->qualifiedTypeNameId);
+        const QString id = getId(objDef);
+        QModelIndex index = m_model->enterElement(asString(objDef->qualifiedTypeNameId), id, location);
         m_nodeToIndex.insert(objDef, index);
         return true;
     }
@@ -100,6 +104,26 @@ private:
         m_model->leaveProperty();
     }
 
+    QString getId(AST::UiObjectDefinition *objDef) {
+        QString id;
+        for (AST::UiObjectMemberList *it = objDef->initializer->members; it; it = it->next) {
+            if (AST::UiScriptBinding *binding = dynamic_cast<AST::UiScriptBinding*>(it->member)) {
+                if (binding->qualifiedId->name->asString() == "id") {
+                    AST::ExpressionStatement *expr = dynamic_cast<AST::ExpressionStatement*>(binding->statement);
+                    if (!expr)
+                        continue;
+                    AST::IdentifierExpression *idExpr = dynamic_cast<AST::IdentifierExpression*>(expr->expression);
+                    if (!idExpr)
+                        continue;
+                    id = idExpr->name->asString();
+                    break;
+                }
+            }
+        }
+        return id;
+    }
+
+
     QmlOutlineModel *m_model;
     QHash<AST::Node*, QModelIndex> m_nodeToIndex;
     int indent;
@@ -128,10 +152,15 @@ void QmlOutlineModel::update(QmlJS::Document::Ptr doc)
     emit updated();
 }
 
-QModelIndex QmlOutlineModel::enterElement(const QString &type, const AST::SourceLocation &sourceLocation)
+QModelIndex QmlOutlineModel::enterElement(const QString &type, const QString &id, const AST::SourceLocation &sourceLocation)
 {
     QStandardItem *item = enterNode(sourceLocation);
-    item->setText(type);
+    if (!id.isEmpty()) {
+        item->setText(id);
+    } else {
+        item->setText(type);
+    }
+    item->setToolTip(type);
     item->setIcon(m_icons.objectDefinitionIcon());
     return item->index();
 }
diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h
index e5065238d91c5502c40ff38e82b69ef7ad855b76..8df66e4db5bda2f768288ccaa5dda95a9ac5c389 100644
--- a/src/plugins/qmljseditor/qmloutlinemodel.h
+++ b/src/plugins/qmljseditor/qmloutlinemodel.h
@@ -21,7 +21,7 @@ public:
 
     void update(QmlJS::Document::Ptr doc);
 
-    QModelIndex enterElement(const QString &typeName, const QmlJS::AST::SourceLocation &location);
+    QModelIndex enterElement(const QString &typeName, const QString &id, const QmlJS::AST::SourceLocation &location);
     void leaveElement();
 
     QModelIndex enterProperty(const QString &name, const QmlJS::AST::SourceLocation &location);