diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index e82e3b044be5eaff7fd0a26140ab88212ea9a52c..3ee0fde7c6d9f80222d3c0521fbabd321e625245 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -87,7 +87,9 @@ ObjectValue *Bind::scopeChainAt(Document::Ptr currentDocument, const Snapshot &s
     }
 
     LinkImports()(binds);
-    ObjectValue *scope = Link()(binds, currentBind, currentObject);
+    ObjectValue *scope = interp->globalObject();
+    if (currentBind)
+        scope = Link()(binds, currentBind, currentObject);
     qDeleteAll(binds);
 
     return scope;
diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp
index ef2a6c03dee1ec634682ad902f6408e4685177aa..28bb8d1194ecceac71c6043e474f9d4e79c1644a 100644
--- a/src/plugins/qmljseditor/qmlcodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp
@@ -607,36 +607,15 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
         return -1;
 
     const QFileInfo currentFileInfo(fileName);
-    const QString currentFilePath = currentFileInfo.absolutePath();
 
     bool isQmlFile = false;
     if (currentFileInfo.suffix() == QLatin1String("qml"))
         isQmlFile = true;
 
-    const QIcon componentIcon = iconForColor(Qt::yellow);
     const QIcon symbolIcon = iconForColor(Qt::darkCyan);
 
     Interpreter::Engine interp;
 
-    QHash<QString, Document::Ptr> userComponents; // ####
-
-    foreach (Document::Ptr doc, snapshot) {
-        const QFileInfo fileInfo(doc->fileName());
-        const QString absolutePath = fileInfo.absolutePath();
-
-        // ### generalize
-        if (fileInfo.suffix() != QLatin1String("qml"))
-            continue;
-        else if (absolutePath != currentFilePath && ! isImported(qmlDocument, absolutePath))
-            continue;
-
-        const QString typeName = fileInfo.baseName();
-        if (typeName.isEmpty() || ! typeName.at(0).isUpper())
-            continue;
-
-        userComponents.insert(typeName, doc);
-    }
-
     // Set up the current scope chain.
     Interpreter::ObjectValue *scope = interp.globalObject();
 
@@ -644,9 +623,13 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
         AST::UiObjectMember *declaringMember = 0;
 
         const int cursorPosition = editor->position();
-        foreach (const Range &range, semanticInfo.ranges) {
-            if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) {
+        for (int i = semanticInfo.ranges.size() - 1; i != -1; --i) {
+            const Range &range = semanticInfo.ranges.at(i);
+            if (range.begin.isNull() || range.end.isNull()) {
+                continue;
+            } else if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) {
                 declaringMember = range.ast;
+                break;
             }
         }
 
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index d06f03fb810e0032bb23ccd28759fd1c9240e8a2..593ca9eb89528ac1fb410bd22ab11bbfcad74def 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -397,27 +397,29 @@ protected:
 
     virtual bool visit(AST::UiObjectBinding *ast)
     {
-        _ranges.append(createRange(ast));
+        if (ast->initializer)
+            _ranges.append(createRange(ast, ast->initializer));
         return true;
     }
 
     virtual bool visit(AST::UiObjectDefinition *ast)
     {
-        _ranges.append(createRange(ast));
+        if (ast->initializer)
+            _ranges.append(createRange(ast, ast->initializer));
         return true;
     }
 
-    Range createRange(AST::UiObjectMember *ast)
+    Range createRange(AST::UiObjectMember *member, AST::UiObjectInitializer *ast)
     {
         Range range;
 
-        range.ast = ast;
+        range.ast = member;
 
         range.begin = QTextCursor(_textDocument);
-        range.begin.setPosition(ast->firstSourceLocation().begin());
+        range.begin.setPosition(ast->lbraceToken.begin());
 
         range.end = QTextCursor(_textDocument);
-        range.end.setPosition(ast->lastSourceLocation().end());
+        range.end.setPosition(ast->rbraceToken.end());
         return range;
     }
 };