diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index a764d1bb898ab377896c2919ff74f09223b97895..b4a535813084eb3b59d685f4834d280b6ad59ce8 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -965,7 +965,7 @@ static QString msgEngineNotAvailable(const char *engine)
 static IDebuggerEngine *debuggerEngineForToolChain(int toolChainType)
 {
     switch (toolChainType) {
-    //case ProjectExplorer::ToolChain::LinuxICC:
+    case ProjectExplorer::ToolChain::LINUX_ICC:
     case ProjectExplorer::ToolChain::MinGW:
     case ProjectExplorer::ToolChain::GCC:
         return gdbEngine;
@@ -1885,7 +1885,7 @@ bool DebuggerManager::checkDebugConfiguration(int toolChain,
     bool success = true;
     switch(toolChain) {
     case ProjectExplorer::ToolChain::GCC:
-    //case ProjectExplorer::ToolChain::LinuxICC:
+    case ProjectExplorer::ToolChain::LINUX_ICC:
     case ProjectExplorer::ToolChain::MinGW:
     case ProjectExplorer::ToolChain::WINCE: // S60
     case ProjectExplorer::ToolChain::WINSCW:
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index c21d3744b06ce5d7b8295b82ef289e53f3502726..d699c609b2391e24fb2c5d84ede2980353af97db 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -348,10 +348,11 @@ void GenericProject::setToolChainType(ProjectExplorer::ToolChain::ToolChainType
     } else if (type == ToolChain::WINCE) {
         const QString msvcVersion, wincePlatform; // ### FIXME
         m_toolChain = ToolChain::createWinCEToolChain(msvcVersion, wincePlatform);
-
-    } else if (type == ToolChain::GCC || type == ToolChain::GCC) {
+    } else if (type == ToolChain::GCC) {
         const QLatin1String qmake_cxx("g++"); // ### FIXME
         m_toolChain = ToolChain::createGccToolChain(qmake_cxx);
+    } else if (type == ToolChain::LINUX_ICC) {
+        m_toolChain = ToolChain::createLinuxIccToolChain();
     }
 }
 
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 3dcbb42102950853b67bc0217bde609ccac62650..467f124e7e278b6622c8350875b430673a9e6dc8 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -194,6 +194,9 @@ private slots:
     void testGccOutputParsers_data();
     void testGccOutputParsers();
 
+    void testLinuxIccOutputParsers_data();
+    void testLinuxIccOutputParsers();
+
     void testGnuMakeParserParsing_data();
     void testGnuMakeParserParsing();
     void testGnuMakeParserTaskMangling_data();
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index 431893dddeab4ac14e7996bd72552033f2a16be0..bc9824c9141ab5539f6c972da8687a16554a131b 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -77,7 +77,8 @@ HEADERS += projectexplorer.h \
     doubletabwidget.h \
     addtargetdialog.h \
     buildenvironmentwidget.h \
-    buildconfigdialog.h
+    buildconfigdialog.h \
+    linuxiccparser.h
 SOURCES += projectexplorer.cpp \
     projectwindow.cpp \
     buildmanager.cpp \
@@ -141,7 +142,8 @@ SOURCES += projectexplorer.cpp \
     doubletabwidget.cpp \
     addtargetdialog.cpp \
     buildenvironmentwidget.cpp \
-    buildconfigdialog.cpp
+    buildconfigdialog.cpp \
+    linuxiccparser.cpp
 FORMS += processstep.ui \
     editorsettingspropertiespage.ui \
     runsettingspropertiespage.ui \
diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index a4bb2db97b9bc37cb5233dacf4cd231b2c05e125..523689e57b65fe78d64aa314268da9bfdbb9feb5 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -33,6 +33,7 @@
 #include "projectexplorersettings.h"
 #include "gccparser.h"
 #include "msvcparser.h"
+#include "linuxiccparser.h"
 
 #include <QtCore/QDebug>
 #include <QtCore/QFileInfo>
@@ -83,6 +84,11 @@ ToolChain *ToolChain::createMinGWToolChain(const QString &gcc, const QString &mi
     return new MinGWToolChain(gcc, mingwPath);
 }
 
+ToolChain *ToolChain::createLinuxIccToolChain()
+{
+    return new LinuxIccToolChain();
+}
+
 ToolChain *ToolChain::createMSVCToolChain(const QString &name, bool amd64)
 {
     return MSVCToolChain::create(name, amd64);
@@ -124,8 +130,8 @@ QString ToolChain::toolChainName(ToolChainType tc)
     switch (tc) {
     case GCC:
         return QCoreApplication::translate("ToolChain", "GCC");
-//    case LinuxICC:
-//        return QCoreApplication::translate("ToolChain", "Intel C++ Compiler (Linux)");
+    case LINUX_ICC:
+        return QCoreApplication::translate("ToolChain", "Intel C++ Compiler (Linux)");
     case MinGW:
         return QString::fromLatin1("MinGW");
     case MSVC:
@@ -319,6 +325,21 @@ IOutputParser *MinGWToolChain::outputParser() const
     return new GccParser;
 }
 
+LinuxIccToolChain::LinuxIccToolChain()
+    : GccToolChain(QLatin1String("icpc"))
+{
+}
+
+ToolChain::ToolChainType LinuxIccToolChain::type() const
+{
+    return ToolChain::LINUX_ICC;
+}
+
+IOutputParser *LinuxIccToolChain::outputParser() const
+{
+    return new LinuxIccParser;
+}
+
 // ---------------- MSVC installation location code
 
 // Format the name of an SDK or VC installation version with platform
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index 99cf9667e3d3f42e8c657ee999785210fa98e5fc..ea3453d9e14e89137894bb7139180b9ff74394d4 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -76,7 +76,7 @@ public:
     enum ToolChainType
     {
         GCC = 0,
-        // LINUX_ICC = 1,
+        LINUX_ICC = 1,
         MinGW = 2,
         MSVC = 3,
         WINCE = 4,
@@ -107,6 +107,7 @@ public:
     // Factory methods
     static ToolChain *createGccToolChain(const QString &gcc);
     static ToolChain *createMinGWToolChain(const QString &gcc, const QString &mingwPath);
+    static ToolChain *createLinuxIccToolChain();
     static ToolChain *createMSVCToolChain(const QString &name, bool amd64);
     static ToolChain *createWinCEToolChain(const QString &name, const QString &platform);
     static QStringList availableMSVCVersions();
@@ -157,6 +158,15 @@ private:
     QString m_mingwPath;
 };
 
+class PROJECTEXPLORER_EXPORT LinuxIccToolChain : public GccToolChain
+{
+public:
+    LinuxIccToolChain();
+    virtual ToolChainType type() const;
+
+    virtual IOutputParser *outputParser() const;
+};
+
 // TODO some stuff needs to be moved into this
 class PROJECTEXPLORER_EXPORT MSVCToolChain : public ToolChain
 {
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 25ef2e71d9fa2c89690eb179e7260c193fbd048e..c5f62e8654a15d120e5433be2a6f1ee6d6c7e688 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -142,6 +142,7 @@ bool Qt4RunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configu
     case ToolChain::GCC:         case ToolChain::MinGW:
     case ToolChain::GCCE_GNUPOC: case ToolChain::RVCT_ARMV5_GNUPOC:
     case ToolChain::OTHER:       case ToolChain::UNKNOWN:
+    case ToolChain::LINUX_ICC:
     case ToolChain::INVALID:
         enabled = true;
         break;
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 8dd511f5031ff6a8aef32cdf876bbd5b016248a6..b2091a5913ad7627a38ba270d09ff1d90666284a 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -1305,17 +1305,20 @@ void QtVersion::updateToolChainAndMkspec() const
         m_toolChains << ToolChainPtr(
                 ProjectExplorer::ToolChain::createMinGWToolChain(qmakeCXX, mingwDirectory()));
         m_targetIds.insert(QLatin1String(Constants::DESKTOP_TARGET_ID));
-    } else if (qmakeCXX == "g++" || qmakeCXX == "icc") {
+    } else if (qmakeCXX == "g++") {
         ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
         //addToEnvironment(env);
-        qmakeCXX = env.searchInPath(qmakeCXX);
         if (qmakeCXX.isEmpty()) {
             // macx-xcode mkspec resets the value of QMAKE_CXX.
             // Unfortunately, we need a valid QMAKE_CXX to configure the parser.
             qmakeCXX = QLatin1String("cc");
         }
+        qmakeCXX = env.searchInPath(qmakeCXX);
         m_toolChains << ToolChainPtr(ProjectExplorer::ToolChain::createGccToolChain(qmakeCXX));
         m_targetIds.insert(QLatin1String(Constants::DESKTOP_TARGET_ID));
+    } else if (qmakeCXX == "icpc") {
+        m_toolChains << ToolChainPtr(ProjectExplorer::ToolChain::createLinuxIccToolChain());
+        m_targetIds.insert(QLatin1String(Constants::DESKTOP_TARGET_ID));
     }
 
     if (m_toolChains.isEmpty()) {