diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index c4631c02d90001ffa23153b2295d3a05bd729bf3..1f6c187d3346875c44651075a15486c028148e81 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -945,6 +945,8 @@ static bool qmlCompletionItemLessThan(const TextEditor::CompletionItem &l, const
         return true;
     else if (r.text.isEmpty())
         return false;
+    else if (l.data.isValid() != r.data.isValid())
+        return l.data.isValid();
     else if (l.text.at(0).isUpper() && r.text.at(0).isLower())
         return false;
     else if (l.text.at(0).isLower() && r.text.at(0).isUpper())
@@ -963,15 +965,14 @@ QList<TextEditor::CompletionItem> CodeCompletion::getCompletions()
 
     // Remove duplicates
     QString lastKey;
+    QVariant lastData;
     QList<TextEditor::CompletionItem> uniquelist;
 
     foreach (const TextEditor::CompletionItem &item, completionItems) {
-        if (item.text != lastKey) {
+        if (item.text != lastKey || item.data.type() != lastData.type()) {
             uniquelist.append(item);
             lastKey = item.text;
-        } else {
-            if (item.data.canConvert<QString>())
-                uniquelist.append(item);
+            lastData = item.data;
         }
     }