diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 9e3a5a534f9cb577b4410b3e4b2630f3dfc7d4ef..c777141dd81849248dda891c31d7a5ef0aa67bd0 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -745,7 +745,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
         }
 
         if (m_completionOperator != T_EOF_SYMBOL)
-            qSort(m_completions.begin(), m_completions.end(), completionItemLessThan);
+            sortCompletion(m_completions);
 
         // always remove duplicates
         m_completions = removeDuplicates(m_completions);
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index 7f46be938a22217cf9fdef26262c71229bbc0555..80aa8035c9fc27001e4c3964d50e22f3b5bf805b 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -1074,13 +1074,18 @@ static bool qmlCompletionItemLessThan(const TextEditor::CompletionItem &l, const
     return l.text < r.text;
 }
 
+void CodeCompletion::sortCompletion(QList<TextEditor::CompletionItem> &completionItems)
+{
+    qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan);
+}
+
 QList<TextEditor::CompletionItem> CodeCompletion::getCompletions()
 {
     QList<TextEditor::CompletionItem> completionItems;
 
     completions(&completionItems);
 
-    qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan);
+    sortCompletion(completionItems);
 
     // Remove duplicates
     QString lastKey;
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.h b/src/plugins/qmljseditor/qmljscodecompletion.h
index 98821f579fc75a50226790c61ed4055cfc2f4cb3..440d20fb9c34d3db9a7298333bebfcaaf5b9247b 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.h
+++ b/src/plugins/qmljseditor/qmljscodecompletion.h
@@ -77,6 +77,7 @@ public:
     virtual void complete(const TextEditor::CompletionItem &item, QChar typedChar);
     virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems);
     virtual QList<TextEditor::CompletionItem> getCompletions();
+    virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems);
 
     virtual void cleanup();
 
diff --git a/src/plugins/texteditor/icompletioncollector.cpp b/src/plugins/texteditor/icompletioncollector.cpp
index 87d76d3bc5488257cc9ddd504259080b81da9943..29f64719b2cba3465355556363cd330cf817c8e9 100644
--- a/src/plugins/texteditor/icompletioncollector.cpp
+++ b/src/plugins/texteditor/icompletioncollector.cpp
@@ -127,10 +127,15 @@ QList<CompletionItem> ICompletionCollector::getCompletions()
     return uniquelist;
 }
 
-bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems)
+bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &items)
 {
     if (! m_d->m_completionSettings.m_partiallyComplete)
         return false;
+    if (items.size() >= 100)
+        return false;
+
+    QList<TextEditor::CompletionItem> completionItems = items;
+    sortCompletion(completionItems);
 
     // Compute common prefix
     QString firstKey = completionItems.first().text;
@@ -155,6 +160,11 @@ bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionI
     return false;
 }
 
+void ICompletionCollector::sortCompletion(QList<TextEditor::CompletionItem> &completionItems)
+{
+    qStableSort(completionItems.begin(), completionItems.end(), &ICompletionCollector::completionItemLessThan);
+}
+
 void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items,
                                   QList<TextEditor::CompletionItem> *filteredItems,
                                   const QString &key)
diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h
index 687f40762bea75150815fd2edd6ab6f5265b8df1..716667a9550afc847a532612bf395486a3d4904f 100644
--- a/src/plugins/texteditor/icompletioncollector.h
+++ b/src/plugins/texteditor/icompletioncollector.h
@@ -139,6 +139,8 @@ public:
      */
     virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems);
 
+    virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems);
+
     /* Called when it's safe to clean up the completion items.
      */
     virtual void cleanup() = 0;