diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index e2119a5cb74e1cd4e2689b4cf84397c343a5d170..a88742112e71ff4095c60cac20f787347f079834 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -1326,41 +1326,6 @@ void CppModelManager::updateIncludesInPaths(QFutureInterface<void> &future,
     future.reportFinished();
 }
 
-// Function that sorts headers and sources apart to be used for
-// MimeDB::findByFile() on a sequence of file names.
-class HeaderSourceSorter {
-public:
-    explicit HeaderSourceSorter(QStringList *sources, QStringList *headers);
-    void operator()(const Core::MimeType &, const QFileInfo &, const QString &);
-
-private:
-    QStringList m_sourceMimeTypes;
-    QStringList m_headerMimeTypes;
-
-    QStringList *m_sources;
-    QStringList *m_headers;
-};
-
-HeaderSourceSorter::HeaderSourceSorter(QStringList *sources, QStringList *headers) :
-        m_sources(sources),
-        m_headers(headers)
-{
-    m_headerMimeTypes << QLatin1String("text/x-hdr") << QLatin1String("text/x-c++hdr");
-    m_sourceMimeTypes << QLatin1String("text/x-csrc") << QLatin1String("text/x-c++src")
-                      << QLatin1String("text/x-objcsrc");
-}
-
-void HeaderSourceSorter::operator()(const Core::MimeType &mimeType, const QFileInfo &, const QString &name)
-{
-    if (mimeType) {
-        if (m_sourceMimeTypes.contains(mimeType.type())) {
-            m_sources->append(name);
-        } else if (m_headerMimeTypes.contains(mimeType.type())) {
-            m_headers->append(name);
-        }
-    }
-}
-
 void CppModelManager::parse(QFutureInterface<void> &future,
                             CppPreprocessor *preproc,
                             QStringList files)
@@ -1368,14 +1333,28 @@ void CppModelManager::parse(QFutureInterface<void> &future,
     if (files.isEmpty())
         return;
 
-    foreach (const QString &file, files)
-        preproc->snapshot.remove(file);
+    const Core::MimeDatabase *mimeDb = Core::ICore::instance()->mimeDatabase();
+    Core::MimeType cSourceTy = mimeDb->findByType(QLatin1String("text/x-csrc"));
+    Core::MimeType cppSourceTy = mimeDb->findByType(QLatin1String("text/x-c++src"));
+    Core::MimeType mSourceTy = mimeDb->findByType(QLatin1String("text/x-objcsrc"));
 
     QStringList sources;
     QStringList headers;
-    const Core::MimeDatabase *mimeDb = Core::ICore::instance()->mimeDatabase();
-    mimeDb->findByFile(files.constBegin(), files.constEnd(),
-                       HeaderSourceSorter(&sources, &headers));
+
+    QStringList suffixes = cSourceTy.suffixes();
+    suffixes += cppSourceTy.suffixes();
+    suffixes += mSourceTy.suffixes();
+
+    foreach (const QString &file, files) {
+        QFileInfo info(file);
+
+        preproc->snapshot.remove(file);
+
+        if (suffixes.contains(info.suffix()))
+            sources.append(file);
+        else
+            headers.append(file);
+    }
 
     const int sourceCount = sources.size();
     files = sources;