diff --git a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
index 7ccee302ce7ce9fa858a85c237703ff315847a5b..496d075703be27dd51dfdee9b855ab8dfc02db95 100644
--- a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
@@ -93,12 +93,12 @@ void FileFilterBaseItem::updateFileList()
 
     if (newFiles != m_files) {
         // update watched files
-        foreach (const QString &file, m_files - newFiles) {
-            m_fsWatcher.removePath(QDir(projectDir).absoluteFilePath(file));
-        }
-        foreach (const QString &file, newFiles - m_files) {
-            m_fsWatcher.addPath(QDir(projectDir).absoluteFilePath(file));
-        }
+        const QSet<QString> unwatchFiles = QSet<QString>(m_files - newFiles);
+        const QSet<QString> watchFiles = QSet<QString>(newFiles - m_files);
+        if (!unwatchFiles.isEmpty())
+            m_fsWatcher.removePaths(unwatchFiles.toList());
+        if (!watchFiles.isEmpty())
+            m_fsWatcher.addPaths(QSet<QString>(newFiles - m_files).toList());
 
         m_files = newFiles;
 
@@ -106,13 +106,13 @@ void FileFilterBaseItem::updateFileList()
     }
 
     // update watched directories
-    QSet<QString> watchedDirectories = m_fsWatcher.directories().toSet();
-    foreach (const QString &dir, watchedDirectories - dirsToBeWatched) {
-        m_fsWatcher.removePath(QDir(projectDir).absoluteFilePath(dir));
-    }
-    foreach (const QString &dir, dirsToBeWatched - watchedDirectories) {
-        m_fsWatcher.addPath(QDir(projectDir).absoluteFilePath(dir));
-    }
+    const QSet<QString> watchedDirectories = m_fsWatcher.directories().toSet();
+    const QSet<QString> unwatchDirs = watchedDirectories - dirsToBeWatched;
+    const QSet<QString> watchDirs = dirsToBeWatched - watchedDirectories;
+    if (!unwatchDirs.isEmpty())
+        m_fsWatcher.removePaths(unwatchDirs.toList());
+    if (!watchDirs.isEmpty())
+        m_fsWatcher.addPaths(watchDirs.toList());
 }
 
 QSet<QString> FileFilterBaseItem::filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs)
@@ -124,7 +124,7 @@ QSet<QString> FileFilterBaseItem::filesInSubTree(const QDir &rootDir, const QDir
 
     foreach (const QFileInfo &file, dir.entryInfoList(QDir::Files)) {
         if (m_regex.exactMatch(file.fileName())) {
-            fileSet.insert(rootDir.relativeFilePath(file.absoluteFilePath()));
+            fileSet.insert(file.absoluteFilePath());
         }
     }
 
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
index 1308c1bbe5b604945221067841ef862858ecf5d3..3a4de7f6347f02353642bcc6a1b516d4b561987e 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
@@ -78,6 +78,7 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath)
     emit sourceDirectoryChanged();
 }
 
+/* Returns list of absolute paths */
 QStringList QmlProjectItem::qmlFiles() const
 {
     const Q_D(QmlProjectItem);
diff --git a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp
index 18a90bf474116698a9e1de353300fd6bbd18462e..518475af1739f7d3dcced8fc82a0386cfff604f5 100644
--- a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp
+++ b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp
@@ -49,7 +49,8 @@ void TestProject::testQmlFileFilter()
 
         project->setSourceDirectory(testDataDir);
 
-        QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml");
+        QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
+                                                << testDataDir + "/file2.qml");
         QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet());
     }
 
@@ -75,7 +76,9 @@ void TestProject::testQmlFileFilter()
 
         project->setSourceDirectory(testDataDir);
 
-        QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml" << "subdir/file3.qml");
+        QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
+                                                << testDataDir + "/file2.qml"
+                                                << testDataDir + "/subdir/file3.qml");
         QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet());
     }
 
@@ -101,7 +104,7 @@ void TestProject::testQmlFileFilter()
 
         project->setSourceDirectory(testDataDir);
 
-        QStringList expectedFiles(QStringList() << "subdir/file3.qml");
+        QStringList expectedFiles(QStringList() <<  testDataDir + "/subdir/file3.qml");
         QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet());
     }
 
@@ -130,7 +133,9 @@ void TestProject::testQmlFileFilter()
 
         project->setSourceDirectory(testDataDir);
 
-        QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml" << "subdir/file3.qml");
+        QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
+                                                << testDataDir + "/file2.qml"
+                                                << testDataDir + "/subdir/file3.qml");
         QCOMPARE(project->qmlFiles().size(), 3);
         QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet());
     }