diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index c287f69dea3b0c9325556bd048a0daae82d04de8..a86f1b2e8271211f9022d335402812fae2a5cf5a 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -62,24 +62,24 @@ BreakWindow::BreakWindow(QWidget *parent)
         this, SLOT(rowActivated(QModelIndex)));
 }
 
-void BreakWindow::keyPressEvent(QKeyEvent *event)
+void BreakWindow::keyPressEvent(QKeyEvent *ev)
 {
-    if (event->key() == Qt::Key_Delete)
+    if (ev->key() == Qt::Key_Delete)
         deleteBreakpoint(currentIndex());
-    QTreeView::keyPressEvent(event);
+    QTreeView::keyPressEvent(ev);
 }
 
-void BreakWindow::resizeEvent(QResizeEvent *event)
+void BreakWindow::resizeEvent(QResizeEvent *ev)
 {
     QHeaderView *hv = header();
-    int totalSize = event->size().width() - 180;
+    int totalSize = ev->size().width() - 180;
     hv->resizeSection(0, 60);
     hv->resizeSection(1, (totalSize * 30) / 100);
     hv->resizeSection(2, (totalSize * 30) / 100);
     hv->resizeSection(3, (totalSize * 30) / 100);
     hv->resizeSection(4, 70);
     hv->resizeSection(5, 50);
-    QTreeView::resizeEvent(event);
+    QTreeView::resizeEvent(ev);
 }
 
 void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 62820b3fd1b03627da623d0bf0f8c3722a509bf7..119868ab09c54ed10be2ecc4778aa5286022c04f 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -731,9 +731,9 @@ void DebuggerManager::collapseChildren(const QModelIndex &idx)
     watchHandler()->collapseChildren(idx);
 }
 
-void DebuggerManager::removeWatchExpression(const QString &iname)
+void DebuggerManager::removeWatchExpression(const QString &exp)
 {
-    watchHandler()->removeWatchExpression(iname);
+    watchHandler()->removeWatchExpression(exp);
 }
 
 QVariant DebuggerManager::sessionValue(const QString &name)
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 152011c26ea04a2bde505d77900eb7578e1adfc0..a370802b813c074444dbcf46222516f9f9b03b4d 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -50,7 +50,7 @@
 #include <ctype.h>
 
 // creates debug output regarding pending watch data results
-//#define DEBUG_PENDING 1
+#define DEBUG_PENDING 1
 // creates debug output for accesses to the itemmodel
 //#define DEBUG_MODEL 1
 
@@ -964,12 +964,19 @@ void WatchHandler::showEditValue(const WatchData &data)
         w->show();
 }
 
-void WatchHandler::removeWatchExpression(const QString &iname)
+void WatchHandler::removeWatchExpression(const QString &exp)
 {
     MODEL_DEBUG("REMOVE WATCH: " << iname);
-    WatchData data = takeData(iname);
-    m_watchers.removeOne(data.iname);
+    m_watchers.removeOne(exp);
+    for (int i = m_completeSet.size(); --i >= 0;) {
+        const WatchData & data = m_completeSet.at(i);
+        if (data.iname.startsWith("watch.") && data.exp == exp) {
+            m_completeSet.takeAt(i);
+            break;
+        }
+    }
     saveWatchers();
+    rebuildModel();
     emit watchModelUpdateRequested();
 }
 
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index fae7353bc408fba5b70a1182822cd549db6f3622..dfcc98250de05ef1e4a5c9e3b8bac67ed0a2af55 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -87,6 +87,17 @@ void WatchWindow::collapseNode(const QModelIndex &idx)
     emit requestCollapseChildren(idx);
 }
 
+void WatchWindow::keyPressEvent(QKeyEvent *ev)
+{
+    if (ev->key() == Qt::Key_Delete) {
+        QModelIndex idx = currentIndex();
+        QModelIndex idx1 = idx.sibling(idx.row(), 0);
+        QString exp = model()->data(idx1).toString();
+        emit requestRemoveWatchExpression(exp); 
+    }
+    QTreeView::keyPressEvent(ev);
+}
+
 void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
 {
     QMenu menu;
@@ -103,7 +114,6 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     QModelIndex idx = indexAt(ev->pos());
     QModelIndex mi0 = idx.sibling(idx.row(), 0);
     QString exp = model()->data(mi0).toString();
-    QString iname = model()->data(mi0, INameRole).toString();
     QModelIndex mi1 = idx.sibling(idx.row(), 0);
     QString value = model()->data(mi1).toString();
     bool visual = false;
@@ -134,7 +144,7 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
         if (m_type == LocalsType)
             emit requestWatchExpression(exp);
         else
-            emit requestRemoveWatchExpression(iname);
+            emit requestRemoveWatchExpression(exp);
     else if (act == act4)
         model()->setData(mi0, !visual, VisualRole);
 }
diff --git a/src/plugins/debugger/watchwindow.h b/src/plugins/debugger/watchwindow.h
index 4b38b5eb4a7e68c30713430bcd37c2307b4e5bb4..4a13ac65955d98c9bca39032c6c19904ebd8dc95 100644
--- a/src/plugins/debugger/watchwindow.h
+++ b/src/plugins/debugger/watchwindow.h
@@ -63,7 +63,7 @@ public slots:
 
 signals:
     void requestWatchExpression(const QString &exp);
-    void requestRemoveWatchExpression(const QString &iname);
+    void requestRemoveWatchExpression(const QString &exp);
     void requestAssignValue(const QString &exp, const QString &value);
     void requestExpandChildren(const QModelIndex &idx);
     void requestCollapseChildren(const QModelIndex &idx);
@@ -74,6 +74,7 @@ private slots:
     void collapseNode(const QModelIndex &index);
 
 private:
+    void keyPressEvent(QKeyEvent *ev);
     void contextMenuEvent(QContextMenuEvent *ev);
     void editItem(const QModelIndex &idx);
     void reset(); /* reimpl */