diff --git a/java/src/com/android/inputmethod/event/Event.java b/java/src/com/android/inputmethod/event/Event.java
index 4a9163c8e2bf468d2317be062e73b704bace39a4..d257441e05701eac33e262fe8083611f3671e48e 100644
--- a/java/src/com/android/inputmethod/event/Event.java
+++ b/java/src/com/android/inputmethod/event/Event.java
@@ -225,6 +225,13 @@ public class Event {
                 null /* suggestedWordInfo */, FLAG_NONE, null);
     }
 
+    // Returns whether this is a function key like backspace, ctrl, settings... as opposed to keys
+    // that result in input like letters or space.
+    public boolean isFunctionalKeyEvent() {
+        // This logic may need to be refined in the future
+        return NOT_A_CODE_POINT == mCodePoint;
+    }
+
     // Returns whether this event is for a dead character. @see {@link #FLAG_DEAD}
     public boolean isDead() {
         return 0 != (FLAG_DEAD & mFlags);
diff --git a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
index 05ba9992315ddde06e19639d48a3389ff9615c93..c61f45efaf06272fb7d98c31941fba12e5efc22f 100644
--- a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
+++ b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
@@ -74,7 +74,7 @@ public class HardwareKeyboardEventDecoder implements HardwareEventDecoder {
             }
             // If not Enter, then this is just a regular keypress event for a normal character
             // that can be committed right away, taking into account the current state.
-            return Event.createHardwareKeypressEvent(keyCode, codePointAndFlags, null /* next */,
+            return Event.createHardwareKeypressEvent(codePointAndFlags, keyCode, null /* next */,
                     isKeyRepeat);
         }
         return Event.createNotHandledEvent();
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 4d3f5b50b4b429b60f9c5766445e2b17ba66cf7b..dd2a95ee0bd9f666374bf9827cccdd6beb911249 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -399,7 +399,7 @@ public final class InputLogic {
         }
 
         boolean didAutoCorrect = false;
-        if (Event.NOT_A_KEY_CODE != event.mKeyCode) {
+        if (event.isFunctionalKeyEvent()) {
             // A special key, like delete, shift, emoji, or the settings key.
             switch (event.mKeyCode) {
             case Constants.CODE_DELETE: