diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index db9cc517c266441ca06204cf122d45b74f48a411..71c762c3708c8375adad87c74eaa124c9235e0b0 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -100,7 +100,9 @@ QStringList ToolChain::supportedToolChains()
     return QStringList() << QLatin1String("gcc")
                          << QLatin1String("mingw")
                          << QLatin1String("msvc")
-                         << QLatin1String("wince");
+                         << QLatin1String("wince")
+                         << QLatin1String("winscw")
+                         << QLatin1String("gcce");
 }
 
 QString ToolChain::toolChainName(ToolChainType tc)
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index 89993d821d9ff5bcb64343f36306e33bd2b2203f..bf303df876dffc1522db9e9925932087a7811c5c 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -75,6 +75,7 @@ public:
         WINCE,
 #ifdef QTCREATOR_WITH_S60
         WINSCW,
+        GCCE,
 #endif
         OTHER,
         UNKNOWN,
@@ -86,6 +87,7 @@ public:
     virtual void addToEnvironment(ProjectExplorer::Environment &env) = 0;
     virtual ToolChainType type() const = 0;
     virtual QString makeCommand() const = 0;
+    virtual QString defaultMakeTarget() const = 0;
 
     ToolChain();
     virtual ~ToolChain();
@@ -115,6 +117,7 @@ public:
     virtual void addToEnvironment(ProjectExplorer::Environment &env);
     virtual ToolChainType type() const;
     virtual QString makeCommand() const;
+    virtual QString defaultMakeTarget() const { return ""; }
 
 protected:
     virtual bool equals(ToolChain *other) const;
@@ -148,6 +151,7 @@ public:
     virtual void addToEnvironment(ProjectExplorer::Environment &env);
     virtual ToolChainType type() const;
     virtual QString makeCommand() const;
+    virtual QString defaultMakeTarget() const { return ""; }
 protected:
     virtual bool equals(ToolChain *other) const;
     QString m_name;
diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 018f07a41a46a79bb4bc855c8b1e4953054643a6..39da3103b6fea9e42db298fb3e1b15ac39c9dff5 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -68,7 +68,8 @@ bool MakeStep::init(const QString &name)
         workingDirectory = QFileInfo(project()->file()->fileName()).absolutePath();
     setWorkingDirectory(name, workingDirectory);
 
-    QString makeCmd = qobject_cast<Qt4Project *>(project())->makeCommand(name);
+    Qt4Project *qt4project = qobject_cast<Qt4Project *>(project());
+    QString makeCmd = qt4project->makeCommand(name);
     if (!value(name, "makeCmd").toString().isEmpty())
         makeCmd = value(name, "makeCmd").toString();
     if (!QFileInfo(makeCmd).isAbsolute()) {
@@ -92,6 +93,7 @@ bool MakeStep::init(const QString &name)
         }
     } else {
         args = value(name, "makeargs").toStringList();
+        args << qt4project->defaultMakeTarget(name);
     }
 
     // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the
diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e87728e5054ddb387bafbe074cb9c16021b40c86
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
@@ -0,0 +1,59 @@
+#include "gccetoolchain.h"
+
+#include <coreplugin/icore.h>
+
+#include <QtCore/QDir>
+#include <QtDebug>
+
+using namespace ProjectExplorer;
+using namespace Qt4ProjectManager::Internal;
+
+GCCEToolChain::GCCEToolChain(S60Devices::Device device)
+    : m_deviceId(device.id),
+    m_deviceName(device.name),
+    m_deviceRoot(device.epocRoot)
+{
+
+}
+
+ToolChain::ToolChainType GCCEToolChain::type() const
+{
+    return ToolChain::GCCE;
+}
+
+QByteArray GCCEToolChain::predefinedMacros()
+{
+    // TODO
+    return m_predefinedMacros;
+}
+
+QList<HeaderPath> GCCEToolChain::systemHeaderPaths()
+{
+    // TODO
+    return m_systemHeaderPaths;
+}
+
+void GCCEToolChain::addToEnvironment(ProjectExplorer::Environment &env)
+{
+    env.prependOrSetPath(QString("%1\\epoc32\\tools").arg(m_deviceRoot)); // e.g. make.exe
+    env.prependOrSetPath(QString("%1\\epoc32\\gcc\\bin").arg(m_deviceRoot)); // e.g. gcc.exe
+    env.set("EPOCDEVICE", QString("%1:%2").arg(m_deviceId, m_deviceName));
+    env.set("EPOCROOT", S60Devices::cleanedRootPath(m_deviceRoot));
+}
+
+QString GCCEToolChain::makeCommand() const
+{
+    return "make";
+}
+
+QString GCCEToolChain::defaultMakeTarget() const
+{
+    return "debug-gcce";
+}
+
+bool GCCEToolChain::equals(ToolChain *other) const
+{
+    return (other->type() == type()
+            && m_deviceId == static_cast<GCCEToolChain *>(other)->m_deviceId
+            && m_deviceName == static_cast<GCCEToolChain *>(other)->m_deviceName);
+}
diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
new file mode 100644
index 0000000000000000000000000000000000000000..36f1159a5c198730270a754f3d959f2d02b6934d
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
@@ -0,0 +1,36 @@
+#ifndef GCCETOOLCHAIN_H
+#define GCCETOOLCHAIN_H
+
+#include "s60devices.h"
+
+#include <projectexplorer/toolchain.h>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class GCCEToolChain : public ProjectExplorer::ToolChain
+{
+public:
+    GCCEToolChain(S60Devices::Device device);
+    QByteArray predefinedMacros();
+    QList<ProjectExplorer::HeaderPath> systemHeaderPaths();
+    void addToEnvironment(ProjectExplorer::Environment &env);
+    ProjectExplorer::ToolChain::ToolChainType type() const;
+    QString makeCommand() const;
+    QString defaultMakeTarget() const;
+
+protected:
+    bool equals(ToolChain *other) const;
+
+private:
+    QString m_deviceId;
+    QString m_deviceName;
+    QString m_deviceRoot;
+    QByteArray m_predefinedMacros;
+    QList<ProjectExplorer::HeaderPath> m_systemHeaderPaths;
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // GCCETOOLCHAIN_H
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
index b7f0d13b75dcb765a19ab980847bd11cddeab6b1..a2e92143aa10320fdfe0c79edec242064e5c57bc 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
@@ -4,9 +4,16 @@
 
 * QtVersion:
     * support the different tool chains
+    * gui for overriding the default make target if necessary,
+      make arguments --> make options
+    * more general "debug / release" configuration to be used in toolchain
 
 * WINSCW tool chain:
     * predefined macros
     * system includes
 
+* GCCE tool chain:
+    * predefined macros
+    * system includes
+
 * Run WINSCW executables
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
index e6a7fcd181f5be52d8269c4bf7736c19078f6fcb..af319a68ae61e01cac442d48c499a00655fd715d 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
@@ -5,11 +5,13 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60)
     SOURCES += $$PWD/s60devices.cpp \
         $$PWD/s60devicespreferencepane.cpp \
         $$PWD/s60manager.cpp \
-        $$PWD/winscwtoolchain.cpp
+        $$PWD/winscwtoolchain.cpp \
+        $$PWD/gccetoolchain.cpp
     HEADERS += $$PWD/s60devices.h \
         $$PWD/s60devicespreferencepane.h \
         $$PWD/s60manager.h \
-        $$PWD/winscwtoolchain.h
+        $$PWD/winscwtoolchain.h \
+        $$PWD/gccetoolchain.h
     FORMS += $$PWD/s60devicespreferencepane.ui
     OTHER_FILES += qt-s60-todo.txt
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
index caa78d2eeb1edbea1448ef50f86acee743469cd0..139df343581294afd6a9a098d5596b1a394d3980 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
@@ -32,6 +32,7 @@
 #include "s60devices.h"
 #include "s60devicespreferencepane.h"
 #include "winscwtoolchain.h"
+#include "gccetoolchain.h"
 
 #include <extensionsystem/pluginmanager.h>
 
@@ -116,3 +117,9 @@ ProjectExplorer::ToolChain *S60Manager::createWINSCWToolChain(const Qt4ProjectMa
     QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1);
     return new WINSCWToolChain(m_devices->deviceForId(id), version->mwcDirectory());
 }
+
+ProjectExplorer::ToolChain *S60Manager::createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const
+{
+    QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1);
+    return new GCCEToolChain(m_devices->deviceForId(id));
+}
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.h b/src/plugins/qt4projectmanager/qt-s60/s60manager.h
index 9e0ca37823b1f9d6d094587c26036a5230c678db..bed940a903c621339f93708a75ad7eebf9dd1ea3 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.h
@@ -53,6 +53,7 @@ public:
     static S60Manager *instance();
 
     ProjectExplorer::ToolChain *createWINSCWToolChain(const Qt4ProjectManager::QtVersion *version) const;
+    ProjectExplorer::ToolChain *createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const;
 
 private slots:
     void updateQtVersions();
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
index 6a924b95a673d5b5f937d1a25af12e6d169c1903..fce6eb22857dc5b458512594027ec9c4708ee6a4 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
@@ -4,7 +4,6 @@ using namespace ProjectExplorer;
 using namespace Qt4ProjectManager::Internal;
 
 WINSCWToolChain::WINSCWToolChain(S60Devices::Device device, const QString &mwcDirectory)
-        // TODO get rid of hardcoded carbide path
     : m_carbidePath(mwcDirectory),
     m_deviceId(device.id),
     m_deviceName(device.name),
@@ -62,8 +61,14 @@ QString WINSCWToolChain::makeCommand() const
     return "make";
 }
 
+QString WINSCWToolChain::defaultMakeTarget() const
+{
+    return "debug-winscw";
+}
+
 bool WINSCWToolChain::equals(ToolChain *other) const
 {
-    return (m_deviceId == static_cast<WINSCWToolChain *>(other)->m_deviceId
+    return (other->type() == type()
+            && m_deviceId == static_cast<WINSCWToolChain *>(other)->m_deviceId
             && m_deviceName == static_cast<WINSCWToolChain *>(other)->m_deviceName);
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
index 835ac84bece1dd38d6582ebf2bfcd38fe43c6b72..50f81b984a1b93ab550f0ef41b4d3d7038d5f414 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
@@ -17,6 +17,7 @@ public:
     void addToEnvironment(ProjectExplorer::Environment &env);
     ProjectExplorer::ToolChain::ToolChainType type() const;
     QString makeCommand() const;
+    QString defaultMakeTarget() const;
 
 protected:
     bool equals(ToolChain *other) const;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index e380f9df7dfb575ab7a6c335b7e02c473d582bd3..5ec3ce2d5f18ba28633983cb21c8c9cd94e73b31 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -380,6 +380,11 @@ QString Qt4Project::makeCommand(const QString &buildConfiguration) const
     return qtVersion(buildConfiguration)->toolChain()->makeCommand();
 }
 
+QString Qt4Project::defaultMakeTarget(const QString &buildConfiguration) const
+{
+    return qtVersion(buildConfiguration)->toolChain()->defaultMakeTarget();
+}
+
 void Qt4Project::updateCodeModel()
 {
     if (debug)
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 4a7da35289eee5ee1f0b7026760bcbdf19a01e26..aa933a849bc8e737dcc9463769f1b946bb0e4f1d 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -182,6 +182,7 @@ public:
     void notifyChanged(const QString &name);
 
     QString makeCommand(const QString &buildConfiguration) const;
+    QString defaultMakeTarget(const QString &buildConfiguration) const;
 
     // Is called by qmakestep qt4configurationwidget if the settings change
     // Informs all Qt4RunConfigurations that their cached values are now invalid