diff --git a/src/gui/qt/PhoneLineManagerImpl.cpp b/src/gui/qt/PhoneLineManagerImpl.cpp
index c51f227a27ef3662eab8251ded70eb56f18a1c49..bc14254a285f70b7fb137cae55a7d5a64a517f85 100644
--- a/src/gui/qt/PhoneLineManagerImpl.cpp
+++ b/src/gui/qt/PhoneLineManagerImpl.cpp
@@ -511,6 +511,11 @@ PhoneLineManagerImpl::sendKey(Qt::Key c)
   case Qt::Key_F6:
     selectLine(c - Qt::Key_F1);
     break;
+
+  case Qt::Key_Escape:
+    if (selectedLine) {
+      selectedLine->hangup(true);
+    }
     
   default:
     if (!selectedLine) {
diff --git a/src/gui/qt/SFLPhoneWindow.cpp b/src/gui/qt/SFLPhoneWindow.cpp
index e6e17fa8f5328a280e7b9d446299ed23018c0147..0903e7846b186b677b2172d62c2bc259d2c008a4 100644
--- a/src/gui/qt/SFLPhoneWindow.cpp
+++ b/src/gui/qt/SFLPhoneWindow.cpp
@@ -167,11 +167,16 @@ void SFLPhoneWindow::initWindowButtons()
 
 void
 SFLPhoneWindow::keyPressEvent(QKeyEvent *e) {
-  // Misc. key	  
-  if (e->state() & Qt::ControlButton || e->key() == Qt::Key_Control) {
+  // Misc. key
+  int key = e->key();
+  if (e->state() & Qt::ControlButton || key == Qt::Key_Control) {
     emit shortcutPressed(e);
-  } else if (e->key() != Qt::Key_Shift) {
-    emit keyPressed(Qt::Key(e->key()));
+  } else if (key != Qt::Key_Shift && 
+      key != Qt::Key_Meta && 
+      key != Qt::Key_Alt &&
+      key != Qt::Key_Mode_switch
+    ) {
+    emit keyPressed(Qt::Key(key));
   }
 }