diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 03c216474059bee63d4c162ab89d9703d8db0ab2..cb120a33e4da22cf23341f239678a5bf6886577a 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -52,7 +52,7 @@ import java.util.Locale;
 /**
  * Class for describing the position and characteristics of a single key in the keyboard.
  */
-public class Key {
+public class Key implements Comparable<Key> {
     private static final String TAG = Key.class.getSimpleName();
 
     /**
@@ -410,7 +410,7 @@ public class Key {
         });
     }
 
-    private boolean equals(final Key o) {
+    private boolean equalsInternal(final Key o) {
         if (this == o) return true;
         return o.mX == mX
                 && o.mY == mY
@@ -427,6 +427,13 @@ public class Key {
                 && o.mLabelFlags == mLabelFlags;
     }
 
+    @Override
+    public int compareTo(Key o) {
+        if (equalsInternal(o)) return 0;
+        if (mHashCode > o.mHashCode) return 1;
+        return -1;
+    }
+
     @Override
     public int hashCode() {
         return mHashCode;
@@ -434,7 +441,7 @@ public class Key {
 
     @Override
     public boolean equals(final Object o) {
-        return o instanceof Key && equals((Key)o);
+        return o instanceof Key && equalsInternal((Key)o);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
index ab5d31d42e305936522861bc7e2dd866a431828c..e6fe50e02fe12f7355d954145bb824919c742124 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
@@ -24,7 +24,7 @@ import com.android.inputmethod.keyboard.KeyboardId;
 import com.android.inputmethod.latin.CollectionUtils;
 
 import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.TreeSet;
 
 public class KeyboardParams {
     public KeyboardId mId;
@@ -58,7 +58,7 @@ public class KeyboardParams {
     public int GRID_WIDTH;
     public int GRID_HEIGHT;
 
-    public final HashSet<Key> mKeys = CollectionUtils.newHashSet();
+    public final TreeSet<Key> mKeys = CollectionUtils.newTreeSet(); // ordered set
     public final ArrayList<Key> mShiftKeys = CollectionUtils.newArrayList();
     public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList();
     public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();