diff --git a/src/plugins/qmleditor/qmllookupcontext.cpp b/src/plugins/qmleditor/qmllookupcontext.cpp
index ae37b10ace715f2a7a5181785d16b3c7599fd541..cf6bea32311b78368472fea23d61fe6b21b1c833 100644
--- a/src/plugins/qmleditor/qmllookupcontext.cpp
+++ b/src/plugins/qmleditor/qmllookupcontext.cpp
@@ -91,22 +91,43 @@ static inline QmlSymbol *resolveParent(const QStack<QmlSymbol*> &scopes)
 
 QmlSymbol *QmlLookupContext::resolve(const QString &name)
 {
-    // look at property definitions
-    if (!_scopes.isEmpty())
-        if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.top(), _doc->fileName()))
-            return propertySymbol;
+    // find element type names
+    if (QmlSymbol *type = resolveType(name))
+        return type;
+
+    // find ids
+    const QmlDocument::IdTable ids = _doc->ids();
+    if (ids.contains(name))
+        return ids[name];
 
     if (name == "parent") {
         return resolveParent(_scopes);
     }
 
-    // look at the ids.
-    const QmlDocument::IdTable ids = _doc->ids();
+    // find script methods
+    // ### TODO
 
-    if (ids.contains(name))
-        return ids[name];
-    else
-        return resolveType(name);
+    // find properties of the scope object
+    int scopeObjectIndex = findFirstQmlObjectScope(_scopes, _scopes.size() - 1);
+    if (scopeObjectIndex != -1)
+        if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.at(scopeObjectIndex), _doc->fileName()))
+            return propertySymbol;
+
+    // find properties of the component's root object
+    if (!_doc->symbols().isEmpty())
+        if (QmlSymbol *propertySymbol = resolveProperty(name, _doc->symbols()[0], _doc->fileName()))
+            return propertySymbol;
+
+    // component chain
+    // ### TODO: Might lead to ambiguity.
+
+    // context chain
+    // ### TODO: ?
+
+    // global object
+    // ### TODO
+
+    return 0;
 }
 
 QmlSymbol *QmlLookupContext::resolveType(const QString &name, const QString &fileName)