diff --git a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
index 49d8ccd8a30b8fae206084f729fca3d942663e92..fcbff3f5dcc7628ca43e40bc4a2fd15790270ad8 100644
--- a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
+++ b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
@@ -62,72 +62,105 @@ bool GdbMacrosBuildStep::init(const QString &buildConfiguration)
 
 void GdbMacrosBuildStep::run(QFutureInterface<bool> & fi)
 {
-    // TODO CONFIG handling
+    QVariant v = value("clean");
+    if (v.isNull() || v.toBool() == false) {
+        // Normal run
+        QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()
+                    ->resourcePath() + "/gdbmacros/";
+        QStringList files;
+        files << "gdbmacros.cpp"
+              << "gdbmacros.pro";
+
+
+        QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
+        QDir dir;
+        dir.mkpath(destDir);
+        foreach (const QString &file, files) {
+            QFile destination(destDir + file);
+            if (destination.exists())
+                destination.remove();
+            QFile::copy(dumperPath + file, destDir + file);
+        }
 
-    QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()
-                ->resourcePath() + "/gdbmacros/";
-    QStringList files;
-    files << "gdbmacros.cpp"
-          << "gdbmacros.pro";
+        Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
+
+        QProcess qmake;
+        qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
+        qmake.setWorkingDirectory(destDir);
+        QStringList configarguments;
+        QStringList makeArguments;
+
+        // Find qmake step...
+        QMakeStep *qmakeStep = qt4Project->qmakeStep();
+        // Find out which configuration is used in this build configuration
+        // and what kind of CONFIG we need to pass to qmake for that
+        if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) {
+            QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig();
+            QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt());
+            if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
+                configarguments << "CONFIG-=debug_and_release";
+            if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
+                configarguments << "CONFIG+=debug_and_release";
+            if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
+                configarguments << "CONFIG+=release";
+            if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
+                configarguments << "CONFIG+=debug";
+            if (projectBuildConfiguration & QtVersion::BuildAll)
+                makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release");
+
+        } else {
+            // Old style with CONFIG+=debug_and_release
+            configarguments << "CONFIG+=debug_and_release";
+            const MakeStep *ms = qt4Project->makeStep();
+            QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList();
+            if (makeargs.contains("debug")) {
+                makeArguments <<  "debug";
+            } else if (makeargs.contains("release")) {
+                makeArguments << "release";
+            }
+        }
 
+        QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec();
+        qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro");
+        qmake.waitForFinished();
 
-    QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
-    QDir dir;
-    dir.mkpath(destDir);
-    foreach (const QString &file, files) {
-        QFile destination(destDir + file);
-        if (destination.exists())
-            destination.remove();
-        QFile::copy(dumperPath + file, destDir + file);
-    }
 
-    Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
-
-    QProcess qmake;
-    qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
-    qmake.setWorkingDirectory(destDir);
-    QStringList configarguments;
-    QStringList makeArguments;
-
-    // Find qmake step...
-    QMakeStep *qmakeStep = qt4Project->qmakeStep();
-    // Find out which configuration is used in this build configuration
-    // and what kind of CONFIG we need to pass to qmake for that
-    if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) {
-        QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig();
-        QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt());
-        if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG-=debug_and_release";
-        if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG+=debug_and_release";
-        if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=release";
-        if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=debug";
-        if (projectBuildConfiguration & QtVersion::BuildAll)
-            makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release");
+        qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments);
+        qmake.waitForFinished();
 
+        fi.reportResult(true);
     } else {
-        // Old style with CONFIG+=debug_and_release
-        configarguments << "CONFIG+=debug_and_release";
-        const MakeStep *ms = qt4Project->makeStep();
-        QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList();
-        if (makeargs.contains("debug")) {
-            makeArguments <<  "debug";
-        } else if (makeargs.contains("release")) {
-            makeArguments << "release";
+        // Clean step, we want to remove the directory
+        QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
+        Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
+
+        QProcess make;
+        make.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
+        make.setWorkingDirectory(destDir);
+        make.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), QStringList()<<"distclean");
+        make.waitForFinished();
+
+        QStringList files;
+        files << "gdbmacros.cpp"
+              << "gdbmacros.pro";
+
+        QStringList directories;
+        directories << "debug"
+                    << "release";
+
+        foreach(const QString &file, files) {
+            QFile destination(destDir + file);
+            destination.remove();
         }
-    }
-
-    QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec();
-    qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro");
-    qmake.waitForFinished();
 
+        foreach(const QString &dir, directories) {
+            QDir destination(destDir + dir);
+            destination.rmdir(destDir + dir);
+        }
 
-    qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments);
-    qmake.waitForFinished();
-
-    fi.reportResult(true);
+        QDir(destDir).rmdir(destDir);
+        fi.reportResult(true);
+    }
 }
 
 QString GdbMacrosBuildStep::name()
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 7af448e233173f92f0ef9bd97459eef0f8dca814..611d4930b407c062d9ed982442e521eb48440fd4 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -610,9 +610,13 @@ void Qt4Project::addDefaultBuild()
         makeStep = new MakeStep(this);
         insertBuildStep(2, makeStep);
 
+        GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this);
+        gdbmacrosCleanStep->setValue("clean", true);
+        insertCleanStep(0, gdbmacrosCleanStep);
+
         MakeStep* cleanStep = new MakeStep(this);
         cleanStep->setValue("clean", true);
-        insertCleanStep(0, cleanStep);
+        insertCleanStep(1, cleanStep);
 
         ProjectLoadWizard wizard(this);
         wizard.execDialog();
@@ -629,6 +633,10 @@ void Qt4Project::addDefaultBuild()
             if (v.isValid() && v.toBool()) {
                 GdbMacrosBuildStep *gdbmacrostep = new GdbMacrosBuildStep(this);
                 insertBuildStep(0, gdbmacrostep);
+
+                GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this);
+                gdbmacrosCleanStep ->setValue("clean", true);
+                insertCleanStep(0, gdbmacrosCleanStep );
                 break;
             }
         }