diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 67b478b60654f3899b83e280e278e70f4ec034ca..56d900ed021b59dc8fabec30b414628634844a2a 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -114,9 +114,9 @@ static const char winPythonVersionC[] = "python2.5";
 
 #define CB(callback) &GdbEngine::callback, STRINGIFY(callback)
 
-QByteArray GdbEngine::tooltipIName()
+QByteArray GdbEngine::tooltipIName(const QString &exp)
 {
-    return "tooltip.x";
+    return "tooltip." + exp.toLatin1().toHex();
 }
 
 static bool stateAcceptsGdbCommands(DebuggerState state)
@@ -3222,7 +3222,7 @@ QPoint GdbEngine::m_toolTipPos;
 
 bool GdbEngine::showToolTip()
 {
-    QByteArray iname = tooltipIName();
+    QByteArray iname = tooltipIName(m_toolTipExpression);
 
     if (!theDebuggerBoolSetting(UseToolTipsInMainEditor)) {
         watchHandler()->removeData(iname);
@@ -3257,8 +3257,10 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos,
     m_toolTipPos = mousePos;
     int line, column;
     QString exp = cppExpressionAt(editor, cursorPos, &line, &column);
-    if (exp == m_toolTipExpression)
+    if (!exp.isEmpty() && exp == m_toolTipExpression) {
+        showToolTip();
         return;
+    }
 
     m_toolTipExpression = exp;
 
@@ -3326,7 +3328,7 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos,
     WatchData toolTip;
     toolTip.exp = exp.toLatin1();
     toolTip.name = exp;
-    toolTip.iname = tooltipIName();
+    toolTip.iname = tooltipIName(exp);
     watchHandler()->removeData(toolTip.iname);
     watchHandler()->insertData(toolTip);
 }
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 9d22e979406e4a320a3065f80c78122692312170..2c899d85745bc9dce7289008d5b6674c160aa234 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -525,7 +525,7 @@ private: ////////// View & Data Stuff //////////
 
     static QString m_toolTipExpression;
     static QPoint m_toolTipPos;
-    static QByteArray tooltipIName();
+    static QByteArray tooltipIName(const QString &exp);
 
     // HACK:
     StackFrame m_targetFrame;
diff --git a/src/plugins/debugger/gdb/pythongdbengine.cpp b/src/plugins/debugger/gdb/pythongdbengine.cpp
index b4bf14664e08e5a5c296808710f716340456fc96..8126c95ba572f14b641995512489107cfae89361 100644
--- a/src/plugins/debugger/gdb/pythongdbengine.cpp
+++ b/src/plugins/debugger/gdb/pythongdbengine.cpp
@@ -60,8 +60,11 @@ void GdbEngine::updateLocalsPython(const QByteArray &varList)
     expanded += "formats:" + handler->individualFormatRequests();
 
     QByteArray watchers;
-    if (!m_toolTipExpression.isEmpty())
-        watchers += m_toolTipExpression.toLatin1() + '#' + tooltipIName();
+    if (!m_toolTipExpression.isEmpty()) {
+        watchers += m_toolTipExpression.toLatin1();
+        watchers += '#';
+        watchers += tooltipIName(m_toolTipExpression);
+    }
 
     QHash<QByteArray, int> watcherNames = handler->watcherNames();
     QHashIterator<QByteArray, int> it(watcherNames);