diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 11e7ef6c82d1512f05751c13b64baab04f2ebfdd..a01a3ddc57e0d81e136e2945c7bdc8ed5e520ad7 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -352,6 +352,15 @@ void DebuggerManager::init()
     m_useFastStartAction->setCheckable(true);
     m_useFastStartAction->setChecked(true);
 
+    m_useToolTipsAction = new QAction(this);
+    m_useToolTipsAction->setText(tr("Use Tooltips While Debugging"));
+    m_useToolTipsAction->setToolTip(tr("Checking this will make enable "
+        "tooltips for variable values during debugging. Since this can slow "
+        "down debugging and does not provide reliable information as it does "
+        "not use scope information, it is switched off by default."));
+    m_useToolTipsAction->setCheckable(true);
+    m_useToolTipsAction->setChecked(false);
+
     // FIXME
     m_useFastStartAction->setChecked(false);
     m_useFastStartAction->setEnabled(false);
@@ -943,6 +952,8 @@ void DebuggerManager::loadSessionData()
     QVariant value;
     querySessionValue(QLatin1String("UseFastStart"), &value);
     m_useFastStartAction->setChecked(value.toBool());
+    querySessionValue(QLatin1String("UseToolTips"), &value);
+    m_useToolTipsAction->setChecked(value.toBool());
     querySessionValue(QLatin1String("UseCustomDumpers"), &value);
     m_useCustomDumpersAction->setChecked(!value.isValid() || value.toBool());
     querySessionValue(QLatin1String("SkipKnownFrames"), &value);
@@ -956,6 +967,8 @@ void DebuggerManager::saveSessionData()
 
     setSessionValue(QLatin1String("UseFastStart"),
         m_useFastStartAction->isChecked());
+    setSessionValue(QLatin1String("UseToolTips"),
+        m_useToolTipsAction->isChecked());
     setSessionValue(QLatin1String("UseCustomDumpers"),
         m_useCustomDumpersAction->isChecked());
     setSessionValue(QLatin1String("SkipKnownFrames"),
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 63c225411fcc2e2063c589e1b287d11655253e5c..64dee6957f732c73400e83072b9f75e4023218db 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -308,6 +308,7 @@ private:
     ThreadsHandler *threadsHandler() { return m_threadsHandler; }
     WatchHandler *watchHandler() { return m_watchHandler; }
     QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; }
+    QAction *useToolTipsAction() const { return m_useToolTipsAction; }
     QAction *debugDumpersAction() const { return m_debugDumpersAction; }
     bool skipKnownFrames() const;
     bool debugDumpers() const;
@@ -431,6 +432,7 @@ private:
     QAction *m_debugDumpersAction;
     QAction *m_useCustomDumpersAction;
     QAction *m_useFastStartAction;
+    QAction *m_useToolTipsAction;
     QAction *m_dumpLogAction;
 
     QWidget *m_breakWindow;
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index feb63fa0c306da890538993d03b4871526d425e2..db787482d10a3e357f37cebf445f83084aeddac7 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -91,6 +91,7 @@ const char * const DEBUG_DUMPERS        = "Debugger.DebugDumpers";
 const char * const ADD_TO_WATCH         = "Debugger.AddToWatch";
 const char * const USE_CUSTOM_DUMPERS   = "Debugger.UseCustomDumpers";
 const char * const USE_FAST_START       = "Debugger.UseFastStart";
+const char * const USE_TOOL_TIPS        = "Debugger.UseToolTips";
 const char * const SKIP_KNOWN_FRAMES    = "Debugger.SkipKnownFrames";
 const char * const DUMP_LOG             = "Debugger.DumpLog";
 
@@ -374,13 +375,17 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
         Constants::USE_FAST_START, globalcontext);
     mdebug->addAction(cmd);
 
+    cmd = actionManager->registerAction(m_manager->m_useToolTipsAction,
+        Constants::USE_TOOL_TIPS, globalcontext);
+    mdebug->addAction(cmd);
+
+#ifdef QT_DEBUG
     cmd = actionManager->registerAction(m_manager->m_dumpLogAction,
         Constants::DUMP_LOG, globalcontext);
     //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L")));
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11")));
     mdebug->addAction(cmd);
 
-#ifdef QT_DEBUG
     cmd = actionManager->registerAction(m_manager->m_debugDumpersAction,
         Constants::DEBUG_DUMPERS, debuggercontext);
     mdebug->addAction(cmd);
@@ -549,6 +554,9 @@ void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber
 void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor,
     const QPoint &point, int pos)
 {
+    if (!m_manager->useToolTipsAction()->isChecked())
+        return;
+
     QPlainTextEdit *plaintext = qobject_cast<QPlainTextEdit*>(editor->widget());
     if (!plaintext)
         return;
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index aea9635048f9711418da8d97a98f6b2c5a6fa6f4..adf49443654b5ded435b6e79f7a59d41f6b6b860 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -278,25 +278,8 @@ void GdbEngine::init()
     connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), q,
         SLOT(exitDebugger()));
 
-    // Custom dumpers
-    //m_dumperServerConnection = 0;
-    //m_dumperServer = new DumperServer(this);
-    //QString name = "gdb-" +
-    //    QDateTime::currentDateTime().toString("yyyy_MM_dd-hh_mm_ss_zzz");
-    //m_dumperServer->listen(name);
-    //connect(m_dumperServer, SIGNAL(newConnection()),
-    //   this, SLOT(acceptConnection()));
-
-    //if (!m_dumperServer->isListening()) {
-    //    QMessageBox::critical(q->mainWindow(), tr("Dumper Server Setup Failed"),
-    //      tr("Unable to create server listening for data: %1.\n"
-    //         "Server name: %2").arg(m_dumperServer->errorString(), name),
-    //      QMessageBox::Retry | QMessageBox::Cancel);
-   // }
-
     connect(qq->debugDumpersAction(), SIGNAL(toggled(bool)),
         this, SLOT(setDebugDumpers(bool)));
-
     connect(qq->useCustomDumpersAction(), SIGNAL(toggled(bool)),
         this, SLOT(setCustomDumpersWanted(bool)));
 
@@ -442,8 +425,7 @@ void GdbEngine::handleResponse()
             break;
         }
 
-        if (token == -1 && *from != '&' && *from != '~' && *from != '*'
-            && *from != '=') {
+        if (token == -1 && *from != '&' && *from != '~' && *from != '*') {
             // FIXME: On Linux the application's std::out is merged in here.
             // High risk of falsely interpreting this as MI output.
             // We assume that we _always_ use tokens, so not finding a token
@@ -452,7 +434,7 @@ void GdbEngine::handleResponse()
             while (from != to && *from != '\n')
                 s += *from++;
             //qDebug() << "UNREQUESTED DATA " << s << " TAKEN AS APPLICATION OUTPUT";
-            s += '\n';
+            //s += '\n';
 
             m_inbuffer = QByteArray(from, to - from);
             emit applicationOutputAvailable("app-stdout: ", s);
@@ -3660,10 +3642,20 @@ void GdbEngine::setLocals(const QList<GdbMi> &locals)
     QHash<QString, int> seen;
 
     foreach (const GdbMi &item, locals) {
+        // Local variables of inlined code are reported as 
+        // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this",
+        // numchild="1",type="const QtSharedPointer::Basic<CPlusPlus::..."
+        // We do not want these at all. Current hypotheses is that those
+        // "spurious" locals have _two_ "exp" field. Try to filter them:
         #ifdef Q_OS_MAC
-            QString name = item.findChild("exp").data();
+        int numExps = 0;
+        foreach (const GdbMi &child, item.children())
+            numExps += int(child.name() == "exp");
+        if (numExps > 1)
+            continue;
+        QString name = item.findChild("exp").data();
         #else
-            QString name = item.findChild("name").data();
+        QString name = item.findChild("name").data();
         #endif
         int n = seen.value(name);
         if (n) {