diff --git a/src/libs/utils/fileinprojectfinder.cpp b/src/libs/utils/fileinprojectfinder.cpp
index f24b14b41e883d5815b5dfa4246a7d8abcf24ed2..58b7e1824de1fcdb3789ead2d345dfd3842628a1 100644
--- a/src/libs/utils/fileinprojectfinder.cpp
+++ b/src/libs/utils/fileinprojectfinder.cpp
@@ -80,6 +80,12 @@ QString FileInProjectFinder::projectDirectory() const
     return m_projectDir;
 }
 
+void FileInProjectFinder::setProjectFiles(const QStringList &projectFiles)
+{
+    m_projectFiles = projectFiles;
+    m_cache.clear();
+}
+
 /**
   Returns the best match for the given originalPath in the project directory.
 
@@ -87,6 +93,8 @@ QString FileInProjectFinder::projectDirectory() const
   If not, the leading directory in the path is stripped, and the - now shorter - path is
   checked for existence. This continues until either the file is found, or the relative path
   does not contain any directories any more: In this case the originalPath is returned.
+
+  Second, we walk the list of project files, and search for a file name match there.
   */
 QString FileInProjectFinder::findFile(const QString &originalPath, bool *success) const
 {
@@ -125,6 +133,16 @@ QString FileInProjectFinder::findFile(const QString &originalPath, bool *success
         }
     }
 
+    const QString fileName = QFileInfo(originalPath).fileName();
+    foreach (const QString &f, m_projectFiles) {
+        if (QFileInfo(f).fileName() == fileName) {
+            m_cache.insert(originalPath, f);
+            if (success)
+                *success = true;
+            return f;
+        }
+    }
+
     if (success)
         *success = false;
 
diff --git a/src/libs/utils/fileinprojectfinder.h b/src/libs/utils/fileinprojectfinder.h
index 777033e6eb588dbf7535694921c83b19dc1cebee..f8edf6b1cc7619d589e5dab30bc6fc539dba9815 100644
--- a/src/libs/utils/fileinprojectfinder.h
+++ b/src/libs/utils/fileinprojectfinder.h
@@ -49,10 +49,13 @@ public:
     void setProjectDirectory(const QString &absoluteProjectPath);
     QString projectDirectory() const;
 
+    void setProjectFiles(const QStringList &projectFiles);
+
     QString findFile(const QString &originalPath, bool *success = 0) const;
 
 private:
     QString m_projectDir;
+    QStringList m_projectFiles;
     mutable QHash<QString,QString> m_cache;
 };
 
diff --git a/src/plugins/qt4projectmanager/qtoutputformatter.cpp b/src/plugins/qt4projectmanager/qtoutputformatter.cpp
index 5137b0e2f70bc1b645b645627e797af023d4eb64..f85f311642f81a513e66e681774fb4ec3107502f 100644
--- a/src/plugins/qt4projectmanager/qtoutputformatter.cpp
+++ b/src/plugins/qt4projectmanager/qtoutputformatter.cpp
@@ -58,8 +58,13 @@ QtOutputFormatter::QtOutputFormatter(ProjectExplorer::Project *project)
     , m_qtTestFail(QLatin1String("^   Loc: \\[(.*)\\]$"))
     , m_project(project)
 {
-    if(project)
+    if(project) {
+        m_projectFinder.setProjectFiles(project->files(Qt4Project::ExcludeGeneratedFiles));
         m_projectFinder.setProjectDirectory(project->projectDirectory());
+
+        connect(project, SIGNAL(fileListChanged()),
+                this, SLOT(updateProjectFileList()));
+    }
 }
 
 LinkResult QtOutputFormatter::matchLine(const QString &line) const
@@ -196,6 +201,7 @@ void QtOutputFormatter::handleLink(const QString &href)
             const QString fileName = QUrl(qmlLineColumnLink.cap(1)).toLocalFile();
             const int line = qmlLineColumnLink.cap(2).toInt();
             const int column = qmlLineColumnLink.cap(3).toInt();
+
             TextEditor::BaseTextEditorWidget::openEditorAt(m_projectFinder.findFile(fileName), line, column - 1);
 
             return;
@@ -256,3 +262,9 @@ void QtOutputFormatter::handleLink(const QString &href)
         }
     }
 }
+
+void QtOutputFormatter::updateProjectFileList()
+{
+    if (m_project)
+        m_projectFinder.setProjectFiles(m_project.data()->files(Qt4Project::ExcludeGeneratedFiles));
+}
diff --git a/src/plugins/qt4projectmanager/qtoutputformatter.h b/src/plugins/qt4projectmanager/qtoutputformatter.h
index 45ef2f28bc4916d4fc8bfa24b11a93eca480c92c..740e95cf81d69c55e71747b51caa26a4d7549889 100644
--- a/src/plugins/qt4projectmanager/qtoutputformatter.h
+++ b/src/plugins/qt4projectmanager/qtoutputformatter.h
@@ -60,6 +60,7 @@ struct LinkResult
 class QT4PROJECTMANAGER_EXPORT QtOutputFormatter
     : public ProjectExplorer::OutputFormatter
 {
+    Q_OBJECT
 public:
     QtOutputFormatter(ProjectExplorer::Project *project);
 
@@ -67,6 +68,9 @@ public:
         ProjectExplorer::OutputFormat format);
     virtual void handleLink(const QString &href);
 
+private slots:
+    void updateProjectFileList();
+
 private:
     LinkResult matchLine(const QString &line) const;
     void appendLine(QTextCursor & cursor, LinkResult lr,