diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandLauncher.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandLauncher.java
deleted file mode 100644
index 633567f..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandLauncher.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import java.util.logging.*;
-
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.keys.*;
-import org.eclipse.ui.internal.keys.WorkbenchKeyboard.KeyDownFilter;
-import org.eclipse.ui.keys.IBindingService;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-@SuppressWarnings("restriction")
-class CommandLauncher extends KeyAdapter {
-  private static Logger logger = Logger.getLogger(CommandLauncher.class.getCanonicalName());
-
-  @Override public void keyPressed(KeyEvent e) {
-    if (!e.doit) {
-      return;
-    }
-    IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
-    // Necessary to handle copy/paste/"select all" keyboard accelerators.
-    if (bindingService instanceof BindingService) {
-      KeyDownFilter filter = ((BindingService) bindingService).getKeyboard().getKeyDownFilter();
-      Control focusControl = e.display.getFocusControl();
-      boolean enabled = filter.isEnabled();
-      try {
-        filter.setEnabled(true);
-        filter.handleEvent(copyOf(e));
-      } catch (Throwable t) {
-        logger.log(Level.SEVERE, "Unable to handle event: " + e, t);
-      } finally {
-        if (focusControl == e.display.getFocusControl() && !enabled) {
-          filter.setEnabled(enabled);
-        }
-      }
-    }
-  }
-
-  private Event copyOf(KeyEvent e) {
-    Event event = new Event();
-    event.character = e.character;
-    event.data = e.data;
-    event.display = e.display;
-    event.doit = e.doit;
-    event.keyCode = e.keyCode;
-    event.keyLocation = e.keyLocation;
-    event.stateMask = e.stateMask;
-    event.time = e.time;
-    event.widget = e.widget;
-    return event;
-  }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandListener.java
deleted file mode 100644
index 6f81d0c..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/CommandListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-interface CommandListener {
-  void commandIssued(String command);
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
index 2777b88..9b3e61a 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
@@ -62,13 +62,11 @@
         editActions.onMenuHidden();
       }
     });
-    Control terminalTextControl = terminalTextControl();
-    terminalTextControl.addFocusListener(new FocusAdapter() {
+    terminalTextControl().addFocusListener(new FocusAdapter() {
       @Override public void focusGained(FocusEvent e) {
         editActions.update();
       }
     });
-    terminalTextControl.addKeyListener(new CommandLauncher());
   }
 
   private Menu createContextMenu(MenuManager menuManager) {
diff --git a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
index e9617be..9d7c83c 100644
--- a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
+++ b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
@@ -60,6 +60,8 @@
 import org.eclipse.tm.terminal.model.*;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.contexts.*;
+import org.eclipse.ui.internal.keys.*;
+import org.eclipse.ui.internal.keys.WorkbenchKeyboard.KeyDownFilter;
 import org.eclipse.ui.keys.IBindingService;
 
 /**
@@ -783,6 +785,7 @@
 			int accelerator = convertEventToUnmodifiedAccelerator(event);
 			for (int editActionAccelerator : EDIT_ACTION_ACCELERATORS) {
 			  if (editActionAccelerator == accelerator) {
+          forceCommandExecution(event);
           return;
         }
 			}
@@ -1006,6 +1009,40 @@
 			writeToTerminal(charBuffer.toString());
 		}
 
+    private void forceCommandExecution(KeyEvent e) {
+      if (!e.doit) {
+        return;
+      }
+      IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+      // Necessary to handle copy/paste/"select all" keyboard accelerators.
+      if (bindingService instanceof BindingService) {
+        KeyDownFilter filter = ((BindingService) bindingService).getKeyboard().getKeyDownFilter();
+        Control focusControl = e.display.getFocusControl();
+        boolean enabled = filter.isEnabled();
+        try {
+          filter.setEnabled(true);
+          filter.handleEvent(copyOf(e));
+        } finally {
+          if (focusControl == e.display.getFocusControl() && !enabled) {
+            filter.setEnabled(enabled);
+          }
+        }
+      }
+    }
+
+    private Event copyOf(KeyEvent e) {
+      Event event = new Event();
+      event.character = e.character;
+      event.data = e.data;
+      event.display = e.display;
+      event.doit = e.doit;
+      event.keyCode = e.keyCode;
+      event.keyLocation = e.keyLocation;
+      event.stateMask = e.stateMask;
+      event.time = e.time;
+      event.widget = e.widget;
+      return event;
+    }
 	}
 
 	@Override public void setTerminalTitle(String title) {
