diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index a2189b441161881f4e554b3de159dc87192e6e8f..2ec850951de48f26d848a3e52f4f15c174ec6be6 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -1603,6 +1603,8 @@ void Qt4ProFileNode::applyEvaluate(bool parseResult, bool async)
     // update TargetInformation
     m_qt4targetInformation = targetInformation(m_readerExact);
 
+    setupInstallsList(m_readerExact);
+
     // update other variables
     QHash<Qt4Variable, QStringList> newVarValues;
 
@@ -1932,6 +1934,51 @@ TargetInformation Qt4ProFileNode::targetInformation() const
     return m_qt4targetInformation;
 }
 
+void Qt4ProFileNode::setupInstallsList(const ProFileReader *reader)
+{
+    m_installsList.clear();
+    if (!reader)
+        return;
+    const QStringList &itemList = reader->values(QLatin1String("INSTALLS"));
+    foreach (const QString &item, itemList) {
+        QString itemPath;
+        const QString pathVar = item + QLatin1String(".path");        
+        const QStringList &itemPaths = reader->values(pathVar);
+        if (itemPaths.count() != 1) {
+            qDebug("Invalid RHS: Variable '%s' has %d values.",
+                qPrintable(pathVar), itemPaths.count());
+            if (itemPaths.isEmpty()) {
+                qDebug("Ignoring INSTALLS item '%s', because it has no path.",
+                    qPrintable(item));
+                continue;
+            } else {
+                itemPath = itemPaths.last();
+            }
+        }
+
+        const QStringList &itemFiles
+            = reader->absoluteFileValues(item + QLatin1String(".files"),
+                  m_projectDir, QStringList() << m_projectDir, 0);
+        if (item == QLatin1String("target")) {
+            if (!m_installsList.targetPath.isEmpty())
+                qDebug("Overwriting existing target.path in INSTALLS list.");
+            m_installsList.targetPath = itemPath;
+        } else {
+            if (itemFiles.isEmpty()) {
+                qDebug("Ignoring INSTALLS item '%s', because it has no files.",
+                    qPrintable(item));
+                continue;
+            }
+            m_installsList.items << InstallsItem(itemPath, itemFiles);
+        }
+    }
+}
+
+InstallsList Qt4ProFileNode::installsList() const
+{
+    return m_installsList;
+}
+
 QString Qt4ProFileNode::buildDir() const
 {
     const QDir srcDirRoot = QFileInfo(m_project->rootProjectNode()->path()).absoluteDir();
diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h
index a616f552714f8561368c12a7c750f4300e60184a..104e6e21ca2ae0aea0c2f371339d54e93955ef8b 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.h
+++ b/src/plugins/qt4projectmanager/qt4nodes.h
@@ -248,6 +248,18 @@ struct TargetInformation
 
 };
 
+struct InstallsItem {
+    InstallsItem(QString p, QStringList f) : path(p), files(f) {}
+    QString path;
+    QStringList files;
+};
+
+struct InstallsList {
+    void clear() { targetPath.clear(); items.clear(); }
+    QString targetPath;
+    QList<InstallsItem> items;
+};
+
 // Implements ProjectNode for qt4 pro files
 class Qt4ProFileNode : public Qt4PriFileNode
 {
@@ -279,6 +291,8 @@ public:
     TargetInformation targetInformation(const QString &fileName) const;
     TargetInformation targetInformation() const;
 
+    InstallsList installsList() const;
+
     QString makefile() const;
 
     void update();
@@ -309,6 +323,7 @@ private:
     QStringList libDirectories(ProFileReader *reader) const;
     QStringList subDirsPaths(ProFileReader *reader) const;
     TargetInformation targetInformation(ProFileReader *reader) const;
+    void setupInstallsList(const ProFileReader *reader);
 
     void invalidate();
 
@@ -317,6 +332,7 @@ private:
 
     QMap<QString, QDateTime> m_uitimestamps;
     TargetInformation m_qt4targetInformation;
+    InstallsList m_installsList;
     friend class Qt4NodeHierarchy;
 
     // Async stuff