diff --git a/src/plugins/memcheck/memcheckerrorview.cpp b/src/plugins/memcheck/memcheckerrorview.cpp
index 37542b916288424d42bedf7632e0269b59c45188..754a1159ba99f6e9696e94f33eee1fd81de1d04d 100644
--- a/src/plugins/memcheck/memcheckerrorview.cpp
+++ b/src/plugins/memcheck/memcheckerrorview.cpp
@@ -429,6 +429,14 @@ MemcheckErrorView::MemcheckErrorView(QWidget *parent)
     m_copyAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
     connect(m_copyAction, SIGNAL(triggered()), itemDelegate(), SLOT(copy()));
     addAction(m_copyAction);
+
+    m_suppressAction = new QAction(this);
+    m_suppressAction->setText(tr("Suppress Error"));
+    m_suppressAction->setIcon(QIcon(QLatin1String(":/qmldesigner/images/eye_crossed.png")));
+    m_suppressAction->setShortcut(QKeySequence(Qt::Key_Delete));
+    m_suppressAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
+    connect(m_suppressAction, SIGNAL(triggered()), this, SLOT(suppressError()));
+    addAction(m_suppressAction);
 }
 
 MemcheckErrorView::~MemcheckErrorView()
@@ -474,9 +482,9 @@ void MemcheckErrorView::settingsChanged(AnalyzerSettings *settings)
 void MemcheckErrorView::contextMenuEvent(QContextMenuEvent *e)
 {
     const QModelIndexList indizes = selectionModel()->selectedRows();
-    if (indizes.isEmpty()) {
+    if (indizes.isEmpty())
         return;
-    }
+
 
     QList<Error> errors;
     foreach(const QModelIndex &index, indizes) {
@@ -488,16 +496,19 @@ void MemcheckErrorView::contextMenuEvent(QContextMenuEvent *e)
     QMenu menu;
     menu.addAction(m_copyAction);
     menu.addSeparator();
-    QAction *suppress = menu.addAction(tr("Suppress Error(s)", "", errors.size()));
-    suppress->setIcon(QIcon(QLatin1String(":/qmldesigner/images/eye_crossed.png")));
-    suppress->setEnabled(!errors.isEmpty());
-
-    if (QAction *executed = menu.exec(e->globalPos())) {
-        if (executed == suppress) {
-            SuppressionDialog *dialog = new SuppressionDialog(this);
-            dialog->setModal(true);
-            dialog->show();
-            dialog->setAttribute(Qt::WA_DeleteOnClose, true);
-        }
+    menu.addAction(m_suppressAction);
+    m_suppressAction->setEnabled(!errors.isEmpty());
+    menu.exec(e->globalPos());
+}
+
+void MemcheckErrorView::suppressError()
+{
+    SuppressionDialog *dialog = new SuppressionDialog(this);
+    if (dialog->shouldShow()) {
+        dialog->setModal(true);
+        dialog->show();
+        dialog->setAttribute(Qt::WA_DeleteOnClose, true);
+    } else {
+        delete dialog;
     }
 }
diff --git a/src/plugins/memcheck/memcheckerrorview.h b/src/plugins/memcheck/memcheckerrorview.h
index cf04447de7f2138aa432689aaf9209da4f4b343d..b303164cc8c124cb634753d1601460e45249c5d8 100644
--- a/src/plugins/memcheck/memcheckerrorview.h
+++ b/src/plugins/memcheck/memcheckerrorview.h
@@ -111,12 +111,16 @@ signals:
 public slots:
     void settingsChanged(AnalyzerSettings *settings);
 
+private slots:
+    void suppressError();
+
 protected:
     void resizeEvent(QResizeEvent *e);
     void contextMenuEvent(QContextMenuEvent *e);
 
 private:
     QAction *m_copyAction;
+    QAction *m_suppressAction;
     QString m_defaultSuppFile;
     AnalyzerSettings *m_settings;
 };
diff --git a/src/plugins/memcheck/suppressiondialog.cpp b/src/plugins/memcheck/suppressiondialog.cpp
index 07024ae058096c7fe55e15496b42997fd81ead54..2ffb57b30b03f9a8783f95e2d27ab16b33b69cd4 100644
--- a/src/plugins/memcheck/suppressiondialog.cpp
+++ b/src/plugins/memcheck/suppressiondialog.cpp
@@ -156,7 +156,12 @@ SuppressionDialog::SuppressionDialog(MemcheckErrorView *view, QWidget *parent, Q
             SLOT(validate()));
 
     QString suppressions;
-    foreach(const QModelIndex &index, m_view->selectionModel()->selectedRows()) {
+    QModelIndexList indizes = m_view->selectionModel()->selectedRows();
+    if (indizes.isEmpty() && m_view->selectionModel()->currentIndex().isValid()) {
+        // can happen when using arrow keys to navigate and shortcut to trigger suppression
+        indizes << m_view->selectionModel()->currentIndex();
+    }
+    foreach(const QModelIndex &index, indizes) {
         Error error = m_view->model()->data(index, ErrorListModel::ErrorRole).value<Error>();
         if (!error.suppression().isNull())
             m_errors << error;
@@ -170,6 +175,11 @@ SuppressionDialog::SuppressionDialog(MemcheckErrorView *view, QWidget *parent, Q
     setWindowTitle(tr("Save Suppression"));
 }
 
+bool SuppressionDialog::shouldShow() const
+{
+    return !m_errors.isEmpty();
+}
+
 void SuppressionDialog::accept()
 {
     const QString path = m_ui->fileChooser->path();
diff --git a/src/plugins/memcheck/suppressiondialog.h b/src/plugins/memcheck/suppressiondialog.h
index 89c504c56a456ddd11716386e6841a714a919b7d..7223ef2b3fb34d4017574c702382c70c34790d65 100644
--- a/src/plugins/memcheck/suppressiondialog.h
+++ b/src/plugins/memcheck/suppressiondialog.h
@@ -65,6 +65,8 @@ public:
     virtual void accept();
     virtual void reject();
 
+    bool shouldShow() const;
+
 private slots:
     void validate();