diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index d01c4ff5ab2f7967c18ec5e1295181c746dcb374..305b16b2c25c457ba455f761b69b090a88b691f7 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -32,6 +32,9 @@
 #include "cpppreprocessor.h"
 #include "modelmanagertesthelper.h"
 
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/session.h>
+
 #include <QDebug>
 #include <QFileInfo>
 #include <QtTest>
@@ -360,3 +363,53 @@ void CppToolsPlugin::test_modelmanager_snapshot_after_two_projects()
     foreach (const QString &file, project2.projectFiles)
         QVERIFY(mm->snapshot().contains(file));
 }
+
+void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles()
+{
+    TestDataDirectory testDataDirectory(QLatin1String("testdata_guiproject1"));
+    const QString projectFile = testDataDirectory.file(QLatin1String("testdata_guiproject1.pro"));
+
+    // Open project with *.ui file
+    ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance();
+    QString errorOpeningProject;
+    Project *project = pe->openProject(projectFile, &errorOpeningProject);
+    QVERIFY(errorOpeningProject.isEmpty());
+    project->configureAsExampleProject(QStringList());
+
+    // Check working copy.
+    // An AbstractEditorSupport object should have been added for the ui_* file.
+    CppModelManagerInterface *mm = CppModelManagerInterface::instance();
+    CppModelManagerInterface::WorkingCopy workingCopy = mm->workingCopy();
+
+    QCOMPARE(workingCopy.size(), 2); // mm->configurationFileName() and "ui_*.h"
+
+    QStringList fileNamesInWorkinCopy;
+    QHashIterator<QString, QPair<QString, unsigned> > it = workingCopy.iterator();
+    while (it.hasNext()) {
+        it.next();
+        fileNamesInWorkinCopy << QFileInfo(it.key()).fileName();
+    }
+    fileNamesInWorkinCopy.sort();
+    const QString expectedUiHeaderFileName = QLatin1String("ui_mainwindow.h");
+    QCOMPARE(fileNamesInWorkinCopy.at(0), mm->configurationFileName());
+    QCOMPARE(fileNamesInWorkinCopy.at(1), expectedUiHeaderFileName);
+
+    // Check CppPreprocessor / includes.
+    // The CppPreprocessor is expected to find the ui_* file in the working copy.
+    const QString fileIncludingTheUiFile = testDataDirectory.file(QLatin1String("mainwindow.cpp"));
+    while (!mm->snapshot().document(fileIncludingTheUiFile))
+        QCoreApplication::processEvents();
+
+    const CPlusPlus::Snapshot snapshot = mm->snapshot();
+    const Document::Ptr document = snapshot.document(fileIncludingTheUiFile);
+    QVERIFY(document);
+    const QStringList includedFiles = document->includedFiles();
+    QCOMPARE(includedFiles.size(), 2);
+    QCOMPARE(QFileInfo(includedFiles.at(0)).fileName(), QLatin1String("mainwindow.h"));
+    QCOMPARE(QFileInfo(includedFiles.at(1)).fileName(), QLatin1String("ui_mainwindow.h"));
+
+    // Close Project
+    ProjectExplorer::SessionManager *sm = pe->session();
+    sm->removeProject(project);
+    ModelManagerTestHelper::verifyClean();
+}
diff --git a/src/plugins/cpptools/cpppreprocessor.cpp b/src/plugins/cpptools/cpppreprocessor.cpp
index 825b29ce8c22e1c3aff610fca7ae35a15c0b2e56..57a3fb4a72bbdb500c845bff9d83acda96325699 100644
--- a/src/plugins/cpptools/cpppreprocessor.cpp
+++ b/src/plugins/cpptools/cpppreprocessor.cpp
@@ -231,7 +231,7 @@ QString CppPreprocessor::resolveFile_helper(const QString &fileName, IncludeType
 
     foreach (const QString &includePath, m_includePaths) {
         QString path = includePath + fileName;
-        if (checkFile(path))
+        if (m_workingCopy.contains(path) || checkFile(path))
             return path;
     }
 
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index d10c690221560663c6383bca3e00cdc985db0a54..09bea7fc3ce2eb61d7dadcdfae3c734887a1da3d 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -164,6 +164,7 @@ private slots:
     void test_modelmanager_refresh_1();
     void test_modelmanager_refresh_2();
     void test_modelmanager_snapshot_after_two_projects();
+    void test_modelmanager_extraeditorsupport_uiFiles();
 
 private:
     void test_completion();
diff --git a/src/plugins/cpptools/modelmanagertesthelper.h b/src/plugins/cpptools/modelmanagertesthelper.h
index 8a228cac42ae21500ec6e300f34b9e740e1c25e6..b2b042c445212fb09a0f80cc6d6670e1a1b61fe6 100644
--- a/src/plugins/cpptools/modelmanagertesthelper.h
+++ b/src/plugins/cpptools/modelmanagertesthelper.h
@@ -79,7 +79,7 @@ public:
     ~ModelManagerTestHelper();
 
     void cleanup();
-    void verifyClean();
+    static void verifyClean();
 
     Project *createProject(const QString &name);
 
diff --git a/tests/cppmodelmanager/testdata_guiproject1/main.cpp b/tests/cppmodelmanager/testdata_guiproject1/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..50ca345343b36e5fe4f49bbffb79fd434e849a36
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/main.cpp
@@ -0,0 +1,13 @@
+// Copyright license
+
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..495189aa3b0ceeb22d1c11184b809e40f557a0b8
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp
@@ -0,0 +1,16 @@
+// Copyright license
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..6dae9639b636b4e3080957ef2fd48aa6e6532ca7
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h
@@ -0,0 +1,24 @@
+// Copyright license
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+private:
+    Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui
new file mode 100644
index 0000000000000000000000000000000000000000..6050363fa71ed2da04105077f9fef06150d05ee2
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui
@@ -0,0 +1,24 @@
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>MainWindow</string>
+  </property>
+  <widget class="QMenuBar" name="menuBar" />
+  <widget class="QToolBar" name="mainToolBar" />
+  <widget class="QWidget" name="centralWidget" />
+  <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro b/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro
new file mode 100644
index 0000000000000000000000000000000000000000..0fdc70ad7b41420cf36da51bd1f92dc6582df529
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro
@@ -0,0 +1,9 @@
+QT       += core gui
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = testdata_guiproject1
+TEMPLATE = app
+
+SOURCES += main.cpp mainwindow.cpp
+HEADERS  += mainwindow.h
+FORMS    += mainwindow.ui