diff --git a/src/plugins/duieditor/duieditor.cpp b/src/plugins/duieditor/duieditor.cpp
index 73daaa165e67943d336b511b45b90c0a5bf02c0d..80f659d2b1f63397204453eec3ec8b7e65a83114 100644
--- a/src/plugins/duieditor/duieditor.cpp
+++ b/src/plugins/duieditor/duieditor.cpp
@@ -39,8 +39,6 @@
 #include "parser/javascriptastvisitor_p.h"
 #include "parser/javascriptast_p.h"
 
-#include <indenter.h>
-
 #include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <texteditor/basetextdocument.h>
@@ -69,11 +67,12 @@ namespace Internal {
 class IdDeclarations: protected Visitor
 {
 public:
-    typedef QMap<QString, QPair<AST::SourceLocation, AST::SourceLocation> > Result;
+    typedef QMap<QString, QList<AST::SourceLocation> > Result;
 
     Result operator()(AST::Node *node)
     {
         _ids.clear();
+        _maybeIds.clear();
         accept(node);
         return _ids;
     }
@@ -107,17 +106,37 @@ protected:
             if (AST::ExpressionStatement *stmt = AST::cast<AST::ExpressionStatement*>(node->statement)) {
                 if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(stmt->expression)) {
                     if (idExpr->name) {
-                        _ids[idExpr->name->asString()] = qMakePair(idExpr->firstSourceLocation(),
-                                                                   idExpr->lastSourceLocation());
+                        const QString id = idExpr->name->asString();
+                        QList<AST::SourceLocation> *locs = &_ids[id];
+                        locs->append(idExpr->firstSourceLocation());
+                        locs->append(_maybeIds.value(id));
+                        _maybeIds.remove(id);
                     }
                 }
             }
         }
+
+        accept(node->statement);
+
+        return false;
+    }
+
+    virtual bool visit(AST::IdentifierExpression *node)
+    {
+        if (node->name) {
+            const QString name = node->name->asString();
+
+            if (_ids.contains(name))
+                _ids[name].append(node->identifierToken);
+            else
+                _maybeIds[name].append(node->identifierToken);
+        }
         return false;
     }
 
 private:
     Result _ids;
+    Result _maybeIds;
 };
 
 class FindDeclarations: protected Visitor
@@ -477,15 +496,16 @@ void ScriptEditor::updateMethodBoxIndex()
     tc.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
     const QString wordUnderCursor = tc.selectedText();
 
-    const QPair<AST::SourceLocation, AST::SourceLocation> id = m_ids.value(wordUnderCursor);
-
     QList<QTextEdit::ExtraSelection> selections;
-    if (id.first.offset && id.second.offset) {
+    foreach (const AST::SourceLocation &loc, m_ids.value(wordUnderCursor)) {
+        if (! loc.isValid())
+            continue;
+
         QTextEdit::ExtraSelection sel;
         sel.format.setBackground(Qt::yellow);
         sel.cursor = textCursor();
-        sel.cursor.setPosition(id.first.begin());
-        sel.cursor.setPosition(id.second.end(), QTextCursor::KeepAnchor);
+        sel.cursor.setPosition(loc.begin());
+        sel.cursor.setPosition(loc.end(), QTextCursor::KeepAnchor);
         selections.append(sel);
     }
 
diff --git a/src/plugins/duieditor/duieditor.h b/src/plugins/duieditor/duieditor.h
index 943f68f7e392aba758253810565d62139875e1b6..0e245a3dd7bf7b42a0ae1ae9002776cfe6059eb5 100644
--- a/src/plugins/duieditor/duieditor.h
+++ b/src/plugins/duieditor/duieditor.h
@@ -120,7 +120,7 @@ private:
     QComboBox *m_methodCombo;
     QList<Declaration> m_declarations;
     QStringList m_words;
-    QMap<QString, QPair<JavaScript::AST::SourceLocation, JavaScript::AST::SourceLocation> > m_ids;
+    QMap<QString, QList<JavaScript::AST::SourceLocation> > m_ids; // ### use QMultiMap
 };
 
 } // namespace Internal