diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index 1761ec7887ea9cb0d4b6e3218efe507f6e91e8c2..fa43bf0ca33903b96862d7063f57d392da0e0864 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -118,7 +118,7 @@ public:
 class QmakePriFileEvalResult
 {
 public:
-    QStringList folders;
+    QSet<FileName> folders;
     QSet<FileName> recursiveEnumerateFiles;
     QMap<FileType, QSet<FileName>> foundFiles;
 };
@@ -229,7 +229,7 @@ bool QmakePriFile::buildsFile(const FileName &fn) const
 
 QmakePriFile::~QmakePriFile()
 {
-    watchFolders(QSet<QString>());
+    watchFolders( {} );
     qDeleteAll(m_children);
 }
 
@@ -310,26 +310,25 @@ void QmakePriFile::extractInstalls(
             auto *result = proToResult.value(source.proFile);
             if (!result)
                 result = fallback;
-            result->folders << source.fileName;
+            result->folders.insert(FileName::fromString(source.fileName));
         }
     }
 }
 
 void QmakePriFile::processValues(QmakePriFileEvalResult &result)
 {
-    result.folders.removeDuplicates();
-
     // Remove non existing items and non folders
-    QStringList::iterator it = result.folders.begin();
+    auto it = result.folders.begin();
     while (it != result.folders.end()) {
-        QFileInfo fi(*it);
+        QFileInfo fi((*it).toFileInfo());
         if (fi.exists()) {
             if (fi.isDir()) {
+                result.recursiveEnumerateFiles += recursiveEnumerate((*it).toString());
                 // keep directories
                 ++it;
             } else {
                 // move files directly to recursiveEnumerateFiles
-                result.recursiveEnumerateFiles << FileName::fromString(*it);
+                result.recursiveEnumerateFiles += (*it);
                 it = result.folders.erase(it);
             }
         } else {
@@ -338,9 +337,6 @@ void QmakePriFile::processValues(QmakePriFileEvalResult &result)
         }
     }
 
-    foreach (const QString &folder, result.folders)
-        result.recursiveEnumerateFiles += recursiveEnumerate(folder);
-
     for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
         FileType type = static_cast<FileType>(i);
         QSet<FileName> &foundFiles = result.foundFiles[type];
@@ -354,7 +350,7 @@ void QmakePriFile::processValues(QmakePriFileEvalResult &result)
 void QmakePriFile::update(const Internal::QmakePriFileEvalResult &result)
 {
     m_recursiveEnumerateFiles = result.recursiveEnumerateFiles;
-    watchFolders(result.folders.toSet());
+    watchFolders(result.folders);
 
     for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
         const FileType type = static_cast<FileType>(i);
@@ -362,20 +358,20 @@ void QmakePriFile::update(const Internal::QmakePriFileEvalResult &result)
     }
 }
 
-void QmakePriFile::watchFolders(const QSet<QString> &folders)
+void QmakePriFile::watchFolders(const QSet<FileName> &folders)
 {
+    const QSet<QString> folderStrings =
+            Utils::transform(folders, [] (const FileName &f) { return f.toString(); });
     QSet<QString> toUnwatch = m_watchedFolders;
-    toUnwatch.subtract(folders);
+    toUnwatch.subtract(folderStrings);
 
-    QSet<QString> toWatch = folders;
+    QSet<QString> toWatch = folderStrings;
     toWatch.subtract(m_watchedFolders);
 
-    if (!toUnwatch.isEmpty())
-        m_project->unwatchFolders(toUnwatch.toList(), this);
-    if (!toWatch.isEmpty())
-        m_project->watchFolders(toWatch.toList(), this);
+    m_project->unwatchFolders(toUnwatch.toList(), this);
+    m_project->watchFolders(toWatch.toList(), this);
 
-    m_watchedFolders = folders;
+    m_watchedFolders = folderStrings;
 }
 
 bool QmakePriFile::knowsFile(const FileName &filePath) const
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
index 527e0dbc68f6b82392b6be41d200feaf17789589..228a92876ebf55d5d39cfd12e5ee9e1565fb66ea 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
@@ -209,7 +209,7 @@ private:
             Internal::QmakePriFileEvalResult *fallback,
             const InstallsList &installList);
     static void processValues(Internal::QmakePriFileEvalResult &result);
-    void watchFolders(const QSet<QString> &folders);
+    void watchFolders(const QSet<Utils::FileName> &folders);
 
     QmakeProject *m_project = nullptr;
     QmakeProFile *m_qmakeProFile = nullptr;