diff --git a/src/plugins/duieditor/duieditor.cpp b/src/plugins/duieditor/duieditor.cpp
index 6f6c984276c31fc0badb50204ada620d7655a4b4..49782d0ee38b0ee9e497df8886cecbf8b4d75b80 100644
--- a/src/plugins/duieditor/duieditor.cpp
+++ b/src/plugins/duieditor/duieditor.cpp
@@ -68,7 +68,76 @@ using namespace JavaScript::AST;
 namespace DuiEditor {
 namespace Internal {
 
-class IdDeclarations: protected Visitor
+class FindWords: protected Visitor
+{
+public:
+    QStringList operator()(AST::Node *node)
+    {
+        _words.clear();
+        accept(node);
+        return QStringList(_words.toList());
+    }
+
+protected:
+    void accept(AST::Node *node)
+    { AST::Node::acceptChild(node, this); }
+
+    using Visitor::visit;
+    using Visitor::endVisit;
+
+    virtual bool visit(AST::UiPublicMember *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+    virtual bool visit(AST::UiObjectDefinition *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+    virtual bool visit(AST::UiQualifiedId *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+    virtual bool visit(AST::UiObjectBinding *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+    virtual bool visit(AST::IdentifierExpression *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+    virtual bool visit(AST::FieldMemberExpression *node)
+    {
+        if (node->name)
+            _words.insert(node->name->asString());
+
+        return true;
+    }
+
+private:
+    QSet<QString> _words;
+};
+
+class FindIdDeclarations: protected Visitor
 {
 public:
     typedef QMap<QString, QList<AST::SourceLocation> > Result;
@@ -344,16 +413,15 @@ void ScriptEditor::updateDocumentNow()
 
     bool parsed = parser.parse(&driver);
 
-    IdDeclarations updateIds;
+    FindIdDeclarations updateIds;
     m_ids = updateIds(parser.ast());
 
     if (parsed) {
         FindDeclarations findDeclarations;
         m_declarations = findDeclarations(parser.ast());
 
-        m_words.clear();
-        foreach (const JavaScriptNameIdImpl &id, driver.literals())
-            m_words.append(id.asString());
+        FindWords findWords;
+        m_words = findWords(parser.ast());
 
         QStringList items;
         items.append(tr("<Select Symbol>"));