diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 60e91697b792a1ec13b981f2fa908c01f9a930e2..53eac322e45be0517a54aaf7f5ec29ec5667a2e6 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -561,7 +561,7 @@ void DebuggerManager::notifyInferiorUpdateFinished()
 void DebuggerManager::notifyInferiorRunningRequested()
 {
     setStatus(DebuggerInferiorRunningRequested);
-    showStatusMessage(tr("Running..."), 5000);
+    showStatusMessage(tr("Running requested..."), 5000);
 }
 
 void DebuggerManager::notifyInferiorRunning()
@@ -579,7 +579,7 @@ void DebuggerManager::notifyInferiorExited()
 void DebuggerManager::notifyInferiorPidChanged(int pid)
 {
     //QMessageBox::warning(0, "PID", "PID: " + QString::number(pid)); 
-    //qDebug() << "PID: " << pid; 
+    qDebug() << "PID: " << pid; 
     emit inferiorPidChanged(pid);
 }
 
@@ -1082,22 +1082,12 @@ bool DebuggerManager::useCustomDumpers() const
     return m_settings.m_useCustomDumpers;
 }
 
-bool DebuggerManager::useFastStart() const
-{
-    return 0; // && m_settings.m_useFastStart;
-}
-
 void DebuggerManager::setUseCustomDumpers(bool on)
 {
     m_settings.m_useCustomDumpers = on;
     engine()->setUseCustomDumpers(on);
 }
 
-void DebuggerManager::setUseFastStart(bool on)
-{
-    m_settings.m_useFastStart = on;
-}
-
 void DebuggerManager::setDebugDumpers(bool on)
 {
     m_settings.m_debugDumpers = on;
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index a43feb7e96c394a1cf73faffe52e2cee3ee56ca5..a3407a0aa59c4f410d3a711929805d872f6d972e 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -170,7 +170,11 @@ private:
     virtual bool skipKnownFrames() const = 0;
     virtual bool debugDumpers() const = 0;
     virtual bool useCustomDumpers() const = 0;
-    virtual bool useFastStart() const = 0;
+    
+    virtual bool wantsAllPluginBreakpoints() const = 0;
+    virtual bool wantsSelectedPluginBreakpoints() const = 0;
+    virtual bool wantsNoPluginBreakpoints() const = 0;
+    virtual QString selectedPluginBreakpointsPattern() const = 0;
 
     virtual void reloadDisassembler() = 0;
     virtual void reloadModules() = 0;
@@ -288,7 +292,6 @@ public slots:
     void setUseCustomDumpers(bool on);
     void setDebugDumpers(bool on);
     void setSkipKnownFrames(bool on);
-    void setUseFastStart(bool on);
 
 private slots:
     void showDebuggerOutput(const QString &prefix, const QString &msg);
@@ -323,7 +326,14 @@ private:
     bool skipKnownFrames() const;
     bool debugDumpers() const;
     bool useCustomDumpers() const;
-    bool useFastStart() const;
+    bool wantsAllPluginBreakpoints() const
+        { return m_settings.m_pluginAllBreakpoints; }
+    bool wantsSelectedPluginBreakpoints() const
+        { return m_settings.m_pluginSelectedBreakpoints; }
+    bool wantsNoPluginBreakpoints() const
+        { return m_settings.m_pluginNoBreakpoints; }
+    QString selectedPluginBreakpointsPattern() const
+        { return m_settings.m_pluginSelectedBreakpointsPattern; }
 
     void notifyStartupFinished();
     void notifyInferiorStopped();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index aa3fca911f6ce0cc0b7ed1cfa626d56534485305..d3e61c79c29aea470ebf95656604d9912c815a9d 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -281,6 +281,8 @@ QWidget *GdbOptionPage::createPage(QWidget *parent)
         setChecked(m_settings.m_pluginSelectedBreakpoints);
     m_ui.radioButtonNoPluginBreakpoints->
         setChecked(m_settings.m_pluginNoBreakpoints);
+    m_ui.lineEditSelectedPluginBreakpointsPattern->
+        setText(m_settings.m_pluginSelectedBreakpointsPattern);
     m_ui.lineEditSelectedPluginBreakpointsPattern->
         setEnabled(m_settings.m_pluginSelectedBreakpoints);
 
@@ -335,7 +337,6 @@ void GdbOptionPage::apply()
     m_settings.m_pluginSelectedBreakpointsPattern =
         m_ui.lineEditSelectedPluginBreakpointsPattern->text();
 
-
     *m_plugin->m_manager->settings() = m_settings;
     m_plugin->writeSettings();
 }
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 97bca9381fb360de61ec15df7bb1429792d1c703..9f0a3b3ace13fa63fd6e82d76d25bec1c24723e8 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -99,10 +99,8 @@ enum GdbCommandType
     GdbQueryPwd,
     GdbQuerySources,
     GdbAsyncOutput2,
+    GdbStart,
     GdbExecRun,
-    GdbExecStart1,
-    GdbExecStart2,
-    GdbExecStart3,
     GdbExecRunToFunction,
     GdbExecStep,
     GdbExecNext,
@@ -254,7 +252,6 @@ void GdbEngine::init()
 {
     m_pendingRequests = 0;
     m_gdbVersion = 100;
-    m_shared = 0;
     m_outputCodec = QTextCodec::codecForLocale();
     m_dataDumperState = DataDumperUninitialized;
 
@@ -461,13 +458,28 @@ void GdbEngine::handleResponse()
                 break;
             }
 
-            case '~':
-            case '@':
+            case '~': {
+                QString data = GdbMi::parseCString(from, to);
+                m_pendingConsoleStreamOutput += data;
+                m_inbuffer = QByteArray(from, to - from);
+                break;
+            }
+
+            case '@': {
+                QString data = GdbMi::parseCString(from, to);
+                m_pendingTargetStreamOutput += data;
+                m_inbuffer = QByteArray(from, to - from);
+                break;
+            }
+
             case '&': {
                 QString data = GdbMi::parseCString(from, to);
-                handleStreamOutput(data, c);
-                //dump(oldfrom, from, record.toString());
+                m_pendingLogStreamOutput += data;
                 m_inbuffer = QByteArray(from, to - from);
+                // On Windows, the contents seem to depend on the debugger
+                // version and/or OS version used.
+                if (data.startsWith("warning:"))
+                    qq->showApplicationOutput(data);
                 break;
             }
 
@@ -760,14 +772,8 @@ void GdbEngine::handleResult(const GdbResultRecord & record, int type,
             handleExecRun(record);
             break;
 
-        case GdbExecStart1:
-            handleExecStart1(record);
-            break;
-        case GdbExecStart2:
-            //handleExecStart2(record);
-            break;
-        case GdbExecStart3:
-            handleExecStart3(record);
+        case GdbStart:
+            handleStart(record);
             break;
         case GdbInfoProc:
             handleInfoProc(record);
@@ -988,18 +994,6 @@ void GdbEngine::handleInfoShared(const GdbResultRecord &record)
     if (record.resultClass == GdbResultDone) {
         // let the modules handler do the parsing
         handleModulesList(record);
-        QList<Module> modules = qq->modulesHandler()->modules();
-        bool reloadNeeded = false;
-        foreach (const Module &module, modules) {
-            // FIXME: read this from some list
-            if (!module.symbolsRead && !module.moduleName.contains("Q")) {
-                reloadNeeded = true;
-                sendCommand("sharedlibrary " + dotEscape(module.moduleName));
-            }
-        }
-        if (reloadNeeded)
-            reloadModules();
-        continueInferior();
     }
 }
 
@@ -1041,84 +1035,6 @@ void GdbEngine::handleExecRunToFunction(const GdbResultRecord &record)
     q->gotoLocation(file, line, true);
 }
 
-void GdbEngine::handleStreamOutput(const QString &data, char code)
-{
-    // Linux
-    if (data.contains("[New Thread")) {
-        QRegExp re("\\[New Thread 0x([0-9a-f]*) \\(LWP ([0-9]*)\\)\\]");
-        if (re.indexIn(data) != -1)
-            maybeHandleInferiorPidChanged(re.cap(2));
-    }
-
-    // Mac
-    if (data.contains("[Switching to process ")) {
-        QRegExp re("\\[Switching to process ([0-9]*) local thread 0x([0-9a-f]*)\\]");
-        if (re.indexIn(data) != -1)
-            maybeHandleInferiorPidChanged(re.cap(1));
-    }
-
-    // present it twice: now and together with the next 'real' result
-    switch (code) {
-        case '~':
-            m_pendingConsoleStreamOutput += data;
-            break;
-        case '@':
-            m_pendingTargetStreamOutput += data;
-            break;
-        case '&':
-            m_pendingLogStreamOutput += data;
-            // On Windows, the contents seem to depend on the debugger
-            // version and/or OS version used.
-            if (data.startsWith("warning:"))
-                qq->showApplicationOutput(data);
-            break;
-    }
-
-#ifdef Q_OS_LINUX
-    if (data.startsWith("Pending break") && data.contains("\" resolved")) {
-        qDebug() << "SCHEDULING -break-list";
-        //m_breakListOnStopNeeded = true;
-    }
-#endif
-
-#if 0
-    if (m_slurpingPTypeOutput)
-        qDebug() << "SLURP: " << output.data;
-
-    //  "No symbol \"__dlopen\" in current context."
-    //  "No symbol \"dlopen\" in current context."
-    if (output.data.startsWith("No symbol ")
-            && output.data.contains("dlopen")) {
-        m_dlopened = true;
-        return;
-    }
-
-    // output of 'ptype <foo>'
-    if (output.data.startsWith("type = ")) {
-        if (output.data.endsWith("{") || output.data.endsWith("{\\n")) {
-            // multi-line output started here...
-            m_slurpingPTypeOutput = true;
-            m_slurpedPTypeOutput = output.data;
-        } else {
-            // Happens for simple types. Process it immediately
-            m_watchHandler->handleTypeContents(output.data);
-        }
-        return;
-    }
-    if (m_slurpingPTypeOutput) {
-        m_slurpedPTypeOutput += '\n';
-        m_slurpedPTypeOutput += output.data;
-        if (output.data.startsWith("}")) {
-            // this is the last line...
-            m_slurpingPTypeOutput = false;
-            m_watchHandler->handleTypeContents(m_slurpedPTypeOutput);
-            m_slurpedPTypeOutput.clear();
-        }
-        return;
-    }
-#endif
-}
-
 static bool isExitedReason(const QString &reason)
 {
     return reason == QLatin1String("exited-normally")   // inferior exited normally
@@ -1146,7 +1062,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
 {
     const QString reason = data.findChild("reason").data();
 
-    QString console = data.findChild("consolestreamoutput").data();
+    QString msg = data.findChild("consolestreamoutput").data();
     if (reason.isEmpty()) {
         GdbMi frame = data.findChild("frame");
         if (frame.findChild("func").data() == "_start") {
@@ -1162,11 +1078,27 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
             sendCommand("info pid", GdbInfoProc, QVariant(), true);
             #endif
             sendCommand("-file-list-exec-source-files", GdbQuerySources);
-            sendCommand("set auto-solib-add on");
+
             sendCommand("sharedlibrary libc"); // for malloc
             sendCommand("sharedlibrary libdl"); // for dlopen
             tryLoadCustomDumpers();
-            sendCommand("info shared", ModulesList, QVariant());
+
+            // intentionally after tryLoadCustomDumpers(),
+            // otherwise we'd interupt solib loading.
+            if (qq->wantsAllPluginBreakpoints()) {
+                sendCommand("set auto-solib-add on");
+                sendCommand("set stop-on-solib-events 0");
+                sendCommand("sharedlibrary .*");
+            } else if (qq->wantsSelectedPluginBreakpoints()) {
+                sendCommand("set auto-solib-add on");
+                sendCommand("set stop-on-solib-events 1");
+                sendCommand("sharedlibrary "+qq->selectedPluginBreakpointsPattern());
+            } else if (qq->wantsNoPluginBreakpoints()) {
+                // should be like that already
+                sendCommand("set auto-solib-add off");
+                sendCommand("set stop-on-solib-events 0");
+            }
+            reloadModules();
             // this will "continue" if done
             attemptBreakpointSynchronization();
             return;
@@ -1174,36 +1106,19 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
         // fall through
     }
 
-#if 0
-    if (console.contains("Stopped due to shared library event") || reason.isEmpty()) {
-        ++m_shared;
-        //if (m_shared == 2)
-        //    tryLoadCustomDumpers();
-        //qDebug() << "SHARED LIBRARY EVENT " << data.toString() << m_shared;
-        if (qq->useFastStart()) {
-            if (1 || m_shared <= 16) { // libpthread?
-                sendCommand("info shared", GdbInfoShared);
-                //sendCommand("sharedlibrary gdbdebugger ");
-                //continueInferior();
-            } else {
-                // auto-load from now on
-                sendCommand("info shared");
-                sendCommand("set auto-solib-add on");
-                sendCommand("-file-list-exec-source-files", GdbQuerySources);
-                sendCommand("-break-list", BreakList);
-                //sendCommand("bt");
-                //QVariant var = QVariant::fromValue<GdbMi>(data);
-                //sendCommand("p 1", GdbAsyncOutput2, var);  // dummy
-                continueInferior();
-            }
-        } else {
-            // slow start requested.
-            q->showStatusMessage(tr("Loading %1...").arg(QString(data.toString())));
+    static bool modulesDirty = false;
+    if (msg.contains("Stopped due to shared library event") || reason.isEmpty()) {
+        if (qq->wantsSelectedPluginBreakpoints()) {
+            qDebug() << "SHARED LIBRARY EVENT " << data.toString();
+            qDebug() << "PATTERN" << qq->selectedPluginBreakpointsPattern();
+            sendCommand("sharedlibrary " + qq->selectedPluginBreakpointsPattern());
             continueInferior();
+            q->showStatusMessage(tr("Loading %1...").arg(QString(data.toString())));
+            return;
         }
-        return;
+        modulesDirty = true;
+        // fall through
     }
-#endif
 
     if (isExitedReason(reason)) {
         qq->notifyInferiorExited();
@@ -1256,11 +1171,17 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
     }
 
     if (isStoppedReason(reason) || reason.isEmpty()) {
+        if (modulesDirty) {
+            sendCommand("-file-list-exec-source-files", GdbQuerySources);
+            sendCommand("-break-list", BreakList);
+            reloadModules();
+            modulesDirty = false;
+        }
         // Need another round trip
         if (reason == "breakpoint-hit") {
             q->showStatusMessage(tr("Stopped at breakpoint"));
             GdbMi frame = data.findChild("frame");
-            qDebug() << "HIT BREAKPOINT: " << frame.toString();
+            //qDebug() << "HIT BREAKPOINT: " << frame.toString();
             m_currentFrame = frame.findChild("addr").data() + '%' +
                  frame.findChild("func").data() + '%';
 
@@ -1504,7 +1425,6 @@ void GdbEngine::exitDebugger()
     m_fullToShortName.clear();
     m_varToType.clear();
     m_dataDumperState = DataDumperUninitialized;
-    m_shared = 0;
     m_outputCollector.shutdown();
     //q->settings()->m_debugDumpers = false;
 }
@@ -1572,12 +1492,7 @@ bool GdbEngine::startDebugger()
     q->showStatusMessage(tr("Gdb Running"));
 
     sendCommand("show version", GdbShowVersion);
-    if (qq->useFastStart()) {
-        sendCommand("set auto-solib-add off");
-        sendCommand("set stop-on-solib-events 1");
-    }
     //sendCommand("-enable-timings");
-    //sendCommand("set stop-on-solib-events 1");
     sendCommand("set print static-members off"); // Seemingly doesn't work.
     //sendCommand("define hook-stop\n-thread-list-ids\n-stack-list-frames\nend");
     //sendCommand("define hook-stop\nprint 4\nend");
@@ -1647,13 +1562,17 @@ bool GdbEngine::startDebugger()
     }
 
     if (q->startMode() == q->startInternal) {
+        emit gdbInputAvailable(QString(), QString());
         sendCommand("-file-exec-and-symbols " + fileName, GdbFileExecAndSymbols);
         //sendCommand("file " + fileName, GdbFileExecAndSymbols);
         #ifdef Q_OS_MAC
         sendCommand("sharedlibrary apply-load-rules all");
         #endif
-        //sendCommand("-gdb-set stop-on-solib-events 1");
-        runInferior();
+        setTokenBarrier();
+        if (!q->m_processArgs.isEmpty())
+            sendCommand("-exec-arguments " + q->m_processArgs.join(" "));
+        sendCommand("set auto-solib-add off");
+        sendCommand("x/2i _start", GdbStart);
     }
 
     if (q->startMode() == q->attachExternal) {
@@ -1692,21 +1611,7 @@ void GdbEngine::continueInferior()
     sendCommand("-exec-continue", GdbExecContinue);
 }
 
-void GdbEngine::runInferior()
-{
-    q->resetLocation();
-    // FIXME: this ignores important startup messages
-    setTokenBarrier();
-    if (!q->m_processArgs.isEmpty())
-        sendCommand("-exec-arguments " + q->m_processArgs.join(" "));
-    qq->notifyInferiorRunningRequested();
-    emit gdbInputAvailable(QString(), QString());
-
-    sendCommand("set auto-solib-add off");
-    sendCommand("x/2i _start", GdbExecStart1);
-}
-
-void GdbEngine::handleExecStart1(const GdbResultRecord &response)
+void GdbEngine::handleStart(const GdbResultRecord &response)
 {
     if (response.resultClass == GdbResultDone) {
         // stdout:&"x/2i _start\n"
@@ -1716,8 +1621,9 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
         QRegExp needle("0x([0-9a-f]+) <_start\\+.*>:");
         if (needle.indexIn(msg) != -1) {
             //qDebug() << "STREAM: " << msg << needle.cap(1);
-            sendCommand("tbreak *0x" + needle.cap(1)); // GdbExecStart3);
-            sendCommand("-exec-run"); // GdbExecStart3);
+            sendCommand("tbreak *0x" + needle.cap(1));
+            sendCommand("-exec-run");
+            qq->notifyInferiorRunningRequested();
         } else {
             qDebug() << "PARSING START ADDRESS FAILED" << msg;
         }
@@ -1726,20 +1632,6 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
     }
 }
 
-void GdbEngine::handleExecStart3(const GdbResultRecord &)
-{
-#if defined(Q_OS_WIN)
-    sendCommand("info proc", GdbInfoProc);
-#endif
-#if defined(Q_OS_LINUX)
-    sendCommand("info proc", GdbInfoProc);
-#endif
-#if defined(Q_OS_MAC)
-    sendCommand("info pid", GdbInfoProc, QVariant(), true);
-#endif
-    attemptBreakpointSynchronization();
-}
-
 void GdbEngine::stepExec()
 {
     setTokenBarrier();
@@ -2258,12 +2150,7 @@ void GdbEngine::attemptBreakpointSynchronization()
         }
     }
 
-    if (updateNeeded) {
-        //interruptAndContinue();
-        //sendListBreakpoints();
-    }
-
-    if (!updateNeeded && q->status() == DebuggerProcessStartingUp) {
+    if (!updateNeeded) {
         // we continue the execution
         continueInferior();
     }
@@ -4031,7 +3918,6 @@ void GdbEngine::assignValueInDebugger(const QString &expression, const QString &
     sendCommand("-var-assign assign " + value, WatchVarAssign);
 }
 
-
 void GdbEngine::tryLoadCustomDumpers()
 {
     if (m_dataDumperState != DataDumperUninitialized)
@@ -4044,8 +3930,6 @@ void GdbEngine::tryLoadCustomDumpers()
     QString lib = q->m_buildDir + "/qtc-gdbmacros/libgdbmacros.so";
     if (QFileInfo(lib).isExecutable()) {
         //sendCommand("p dlopen");
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 0");
         QString flag = QString::number(RTLD_NOW);
         sendSynchronizedCommand("call (void)dlopen(\"" + lib + "\", " + flag + ")",
             WatchDumpCustomSetup);
@@ -4053,8 +3937,6 @@ void GdbEngine::tryLoadCustomDumpers()
         sendSynchronizedCommand("call (void)__dlopen(\"" + lib + "\", " + flag + ")",
             WatchDumpCustomSetup);
         sendSynchronizedCommand("sharedlibrary " + dotEscape(lib));
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 1");
     } else {
         qDebug() << "DEBUG HELPER LIBRARY IS NOT USABLE: "
             << lib << QFileInfo(lib).isExecutable();
@@ -4064,14 +3946,10 @@ void GdbEngine::tryLoadCustomDumpers()
     QString lib = q->m_buildDir + "/qtc-gdbmacros/libgdbmacros.dylib";
     if (QFileInfo(lib).isExecutable()) {
         //sendCommand("p dlopen"); // FIXME: remove me
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 0");
         QString flag = QString::number(RTLD_NOW);
         sendSynchronizedCommand("call (void)dlopen(\"" + lib + "\", " + flag + ")",
             WatchDumpCustomSetup);
         sendSynchronizedCommand("sharedlibrary " + dotEscape(lib));
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 1");
     } else {
         qDebug() << "DEBUG HELPER LIBRARY IS NOT USABLE: "
             << lib << QFileInfo(lib).isExecutable();
@@ -4080,15 +3958,11 @@ void GdbEngine::tryLoadCustomDumpers()
 #if defined(Q_OS_WIN)
     QString lib = q->m_buildDir + "/qtc-gdbmacros/debug/gdbmacros.dll";
     if (QFileInfo(lib).exists()) {
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 0");
         //sendCommand("handle SIGSEGV pass stop print");
         //sendCommand("set unwindonsignal off");
         sendSynchronizedCommand("call LoadLibraryA(\"" + lib + "\")",
             WatchDumpCustomSetup);
         sendSynchronizedCommand("sharedlibrary " + dotEscape(lib));
-        //if (qq->useFastStart())
-        //    sendCommand("set stop-on-solib-events 1");
     } else {
         qDebug() << "DEBUG HELPER LIBRARY IS NOT USABLE: "
             << lib << QFileInfo(lib).isExecutable();
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index fbb56a1b4d51e7b5e4021ae2bd67c2e63bb55786..0b304e10660c401cecc3293a3715669c9e6b2bf3 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -113,7 +113,6 @@ private:
     void exitDebugger();
 
     void continueInferior();
-    void runInferior();
     void interruptInferior();
 
     void runToLineExec(const QString &fileName, int lineNumber);
@@ -179,14 +178,12 @@ private slots:
 
 private:
     int terminationIndex(const QByteArray &buffer, int &length);
-    void handleStreamOutput(const QString &output, char code);
+    void handleStart(const GdbResultRecord &response);
     void handleAsyncOutput2(const GdbMi &data);
     void handleAsyncOutput(const GdbMi &data);
     void handleResultRecord(const GdbResultRecord &response);
     void handleFileExecAndSymbols(const GdbResultRecord &response);
     void handleExecRun(const GdbResultRecord &response);
-    void handleExecStart1(const GdbResultRecord &response);
-    void handleExecStart3(const GdbResultRecord &response);
     void handleExecJumpToLine(const GdbResultRecord &response);
     void handleExecRunToFunction(const GdbResultRecord &response);
     void handleInfoShared(const GdbResultRecord &response);
@@ -217,7 +214,6 @@ private:
     int m_oldestAcceptableToken;
 
     int m_gdbVersion; // 6.8.0 is 680
-    int m_shared;
 
     // awful hack to keep track of used files
     QHash<QString, QString> m_shortToFullName;
diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui
index e6c46c9bc3aaccb452797a2ecb3616b1fe8df25f..884080c1a302628b7a72e412cdd1c1fb05ecbe68 100644
--- a/src/plugins/debugger/gdboptionpage.ui
+++ b/src/plugins/debugger/gdboptionpage.ui
@@ -19,7 +19,7 @@
      <property name="title">
       <string>Locations</string>
      </property>
-     <layout class="QGridLayout">
+     <layout class="QGridLayout" name="gridLayout_3">
       <property name="margin">
        <number>9</number>
       </property>
diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h
index 1558d140ee62ed6d4a467c15d24b0243a7e1d19e..ee1e15793f3bc564c25089cd91f120cbd3b902e9 100644
--- a/src/plugins/debugger/idebuggerengine.h
+++ b/src/plugins/debugger/idebuggerengine.h
@@ -62,7 +62,6 @@ public:
     virtual void nextIExec() = 0;
     
     virtual void continueInferior() = 0;
-    virtual void runInferior() = 0;
     virtual void interruptInferior() = 0;
 
     virtual void runToLineExec(const QString &fileName, int lineNumber) = 0;
diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index 96b16d59d31731bd465ef1f93aac14c9c6c72d16..32125bb100774bb2c57446bf1da9b5dbf9d50cc9 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -170,16 +170,24 @@ bool MinGWToolChain::equals(ToolChain *other) const
 
 void MinGWToolChain::addToEnvironment(ProjectExplorer::Environment &env)
 {
+    //qDebug()<<"MinGWToolChain::addToEnvironment";
     QString binDir = m_mingwPath + "/bin";
     if (QFileInfo(binDir).exists())
         env.prependOrSetPath(binDir);
+//    if (QFileInfo(binDir).exists())
+//        qDebug()<<"Adding "<<binDir<<" to the PATH";
 }
 
 
 MSVCToolChain::MSVCToolChain(const QString &name)
     : m_name(name), m_valuesSet(false)
 {
-
+    if (m_name.isEmpty()) { // Could be because system qt doesn't set this
+        QSettings registry("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7",
+                       QSettings::NativeFormat);
+        if (registry.allKeys().count())
+            m_name = registry.allKeys().first();
+    }
 }
 
 ToolChain::ToolChainType MSVCToolChain::type() const
@@ -211,10 +219,11 @@ QList<HeaderPath> MSVCToolChain::systemHeaderPaths()
     //TODO fix this code
     ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
     addToEnvironment(env);
-#ifdef QTCREATOR_WITH_MSVC_INCLUDES
-    return env.value("INCLUDE").split(QLatin1Char(';'));
-#endif
-    return QList<HeaderPath>();
+    QList<HeaderPath> headerPaths;
+    foreach(const QString &path, env.value("INCLUDE").split(QLatin1Char(';'))) {
+        headerPaths.append(HeaderPath(path, HeaderPath::GlobalHeaderPath));
+    }
+    return headerPaths;
 }
 
 void MSVCToolChain::addToEnvironment(ProjectExplorer::Environment &env)
@@ -222,6 +231,8 @@ void MSVCToolChain::addToEnvironment(ProjectExplorer::Environment &env)
     if (!m_valuesSet) {
         QSettings registry("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7",
                        QSettings::NativeFormat);
+        if (m_name.isEmpty())
+            return;
         QString path = registry.value(m_name).toString();
         ProjectExplorer::Environment oldEnv(env);
         QString desc;
@@ -264,11 +275,12 @@ void MSVCToolChain::addToEnvironment(ProjectExplorer::Environment &env)
         m_valuesSet = true;
     }
 
+    //qDebug()<<"MSVC Environment:";
     QList< QPair<QString, QString> >::const_iterator it, end;
     end = m_values.constEnd();
     for (it = m_values.constBegin(); it != end; ++it) {
         env.set((*it).first, (*it).second);
-        qDebug()<<"variable:"<<(*it).first<<"value:"<<(*it).second;
+        //qDebug()<<"variable:"<<(*it).first<<"value:"<<(*it).second;
     }
 
 }
@@ -325,4 +337,6 @@ void WinCEToolChain::addToEnvironment(ProjectExplorer::Environment &env)
     CeSdkHandler cesdkhandler;
     cesdkhandler.parse(path);
     cesdkhandler.find(m_platform).addToEnvironment(env);
+    //qDebug()<<"WinCE Final Environment:";
+    //qDebug()<<env.toStringList();
 }
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 569d2e82820be0683d49c888dbe4edda8f99cd27..2922987b1058dbbd4146677a77c0dc91d2a94531 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -404,6 +404,7 @@ void Qt4Project::scheduleUpdateCodeModel()
 
 ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfiguration) const
 {
+    qDebug()<<"Qt4Project::toolChain() for buildconfiguration:"<<buildConfiguration;
     Q_UNUSED(buildConfiguration);
     ToolChain *m_test;
     QtVersion *version = qtVersion(activeBuildConfiguration());
@@ -415,10 +416,13 @@ ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfigurat
         qtVersion(activeBuildConfiguration())->addToEnvironment(env);
         qmake_cxx = env.searchInPath(qmake_cxx);
         m_test = ToolChain::createMinGWToolChain(qmake_cxx, version->mingwDirectory());
+        qDebug()<<"Mingw ToolChain";
     } else if(t == ToolChain::MSVC) {
         m_test = ToolChain::createMSVCToolChain(version->msvcVersion());
+        //qDebug()<<"MSVC ToolChain ("<<version->msvcVersion()<<")";
     } else if(t == ToolChain::WINCE) {
         m_test = ToolChain::createWinCEToolChain(version->msvcVersion(), version->wincePlatform());
+        //qDebug()<<"WinCE ToolChain ("<<version->msvcVersion()<<","<<version->wincePlatform()<<")";
     } else if(t == ToolChain::GCC || t == ToolChain::LinuxICC) {
         QStringList list = rootProjectNode()->variableValue(Internal::CxxCompilerVar);
         QString qmake_cxx = list.isEmpty() ? QString::null : list.first();
@@ -426,8 +430,14 @@ ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfigurat
         qtVersion(activeBuildConfiguration())->addToEnvironment(env);
         qmake_cxx = env.searchInPath(qmake_cxx);
         m_test = ToolChain::createGccToolChain(qmake_cxx);
+        //qDebug()<<"GCC ToolChain ("<<qmake_cxx<<")";
+    } else {
+        qDebug()<<"Could not detect ToolChain for"<<version->mkspec();
+        qDebug()<<"Qt Creator doesn't know about the system includes, nor the systems defines.";
     }
 
+
+
     if (m_test == m_toolChain) {
         delete m_test;
     } else {
@@ -462,6 +472,12 @@ void Qt4Project::updateCodeModel()
     if (tc) {
         predefinedMacros = tc->predefinedMacros();
         allHeaderPaths = tc->systemHeaderPaths();
+        //qDebug()<<"Predifined Macros";
+        //qDebug()<<tc->predefinedMacros();
+        //qDebug()<<"";
+        //qDebug()<<"System Header Paths";
+        //foreach(const HeaderPath &hp, tc->systemHeaderPaths())
+        //    qDebug()<<hp.path();
     }
     foreach (HeaderPath headerPath, allHeaderPaths) {
         if (headerPath.kind() == HeaderPath::FrameworkHeaderPath)
@@ -869,14 +885,14 @@ void Qt4Project::checkForDeletedApplicationProjects()
     foreach (Qt4ProFileNode * node, applicationProFiles())
         paths.append(node->path());
 
-    qDebug()<<"Still existing paths :"<<paths;
+//    qDebug()<<"Still existing paths :"<<paths;
 
     QList<QSharedPointer<Qt4RunConfiguration> > removeList;
     foreach (QSharedPointer<RunConfiguration> rc, runConfigurations()) {
         if (QSharedPointer<Qt4RunConfiguration> qt4rc = rc.dynamicCast<Qt4RunConfiguration>()) {
             if (!paths.contains(qt4rc->proFilePath())) {
                 removeList.append(qt4rc);
-                qDebug()<<"Removing runConfiguration for "<<qt4rc->proFilePath();
+//                qDebug()<<"Removing runConfiguration for "<<qt4rc->proFilePath();
             }
         }
     }
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 58f196b3edec7cac564cf675ef4f2ffc13825448..2e7440bb57191c9381b012cef8ea19437c18d025 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -1183,15 +1183,16 @@ ProjectExplorer::ToolChain::ToolChainType QtVersion::toolchainType() const
     if (!isValid())
         return ProjectExplorer::ToolChain::INVALID;
     const QString &spec = mkspec();
+//    qDebug()<<"spec="<<spec;
     if (spec.contains("win32-msvc") || spec.contains(QLatin1String("win32-icc")))
         return ProjectExplorer::ToolChain::MSVC;
-    else if (spec == "win32-g++")
+    else if (spec.contains("win32-g++"))
         return ProjectExplorer::ToolChain::MinGW;
     else if (spec == QString::null)
         return ProjectExplorer::ToolChain::INVALID;
-    else if (spec.startsWith("wince"))
+    else if (spec.contains("wince"))
         return ProjectExplorer::ToolChain::WINCE;
-    else if (spec.startsWith("linux-icc"))
+    else if (spec.contains("linux-icc"))
         return ProjectExplorer::ToolChain::LinuxICC;
     else
         return ProjectExplorer::ToolChain::GCC;
@@ -1224,7 +1225,7 @@ QString QtVersion::msvcVersion() const
 
 QString QtVersion::wincePlatform() const
 {
-    qDebug()<<"QtVersion::wincePlatform returning"<<ProjectExplorer::CeSdkHandler::platformName(mkspecPath() + "/qmake.conf");
+//    qDebug()<<"QtVersion::wincePlatform returning"<<ProjectExplorer::CeSdkHandler::platformName(mkspecPath() + "/qmake.conf");
     return ProjectExplorer::CeSdkHandler::platformName(mkspecPath() + "/qmake.conf");
 }