diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index e64f14d..c3db1b3 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -26,10 +26,10 @@
 
 import com.android.inputmethod.keyboard.internal.KeyStyles;
 import com.android.inputmethod.keyboard.internal.KeyStyles.KeyStyle;
-import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
-import com.android.inputmethod.keyboard.internal.KeyboardParams;
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder.ParseException;
+import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
+import com.android.inputmethod.keyboard.internal.KeyboardParams;
 import com.android.inputmethod.keyboard.internal.PopupCharactersParser;
 import com.android.inputmethod.keyboard.internal.Row;
 import com.android.inputmethod.latin.R;
@@ -184,8 +184,8 @@
         sRtlParenthesisMap.put(right, left);
     }
 
-    public static int getRtlParenthesisCode(int code) {
-        if (sRtlParenthesisMap.containsKey(code)) {
+    public static int getRtlParenthesisCode(int code, boolean isRtl) {
+        if (isRtl && sRtlParenthesisMap.containsKey(code)) {
             return sRtlParenthesisMap.get(code);
         } else {
             return code;
@@ -195,8 +195,18 @@
     /**
      * This constructor is being used only for key in popup mini keyboard.
      */
-    public Key(Resources res, KeyboardParams params, CharSequence popupCharacter,
-           CharSequence hintLabel, int x, int y, int width, int height, int edgeFlags) {
+    public Key(Resources res, KeyboardParams params, String popupSpec,
+            int x, int y, int width, int height, int edgeFlags) {
+        this(params, getRtlParenthesisCode(PopupCharactersParser.getCode(res, popupSpec),
+                params.mIsRtlKeyboard),
+                popupSpec, null, x, y, width, height, edgeFlags);
+    }
+
+    /**
+     * This constructor is being used only for key in popup suggestions pane.
+     */
+    public Key(KeyboardParams params, int code, String popupSpec, String hintLabel,
+            int x, int y, int width, int height, int edgeFlags) {
         mHeight = height - params.mVerticalGap;
         mHorizontalGap = params.mHorizontalGap;
         mVerticalGap = params.mVerticalGap;
@@ -210,12 +220,10 @@
         mRepeatable = false;
         mPopupCharacters = null;
         mMaxPopupColumn = 0;
-        final String popupSpecification = popupCharacter.toString();
-        mLabel = PopupCharactersParser.getLabel(popupSpecification);
-        mOutputText = PopupCharactersParser.getOutputText(popupSpecification);
-        final int code = PopupCharactersParser.getCode(res, popupSpecification);
-        mCode = params.mIsRtlKeyboard ? getRtlParenthesisCode(code) : code;
-        mIcon = params.mIconsSet.getIcon(PopupCharactersParser.getIconId(popupSpecification));
+        mLabel = PopupCharactersParser.getLabel(popupSpec);
+        mOutputText = PopupCharactersParser.getOutputText(popupSpec);
+        mCode = code;
+        mIcon = params.mIconsSet.getIcon(PopupCharactersParser.getIconId(popupSpec));
         // Horizontal gap is divided equally to both sides of the key.
         mX = x + mHorizontalGap / 2;
         mY = y;
@@ -344,7 +352,7 @@
                     Keyboard.CODE_UNSPECIFIED);
             if (code == Keyboard.CODE_UNSPECIFIED && !TextUtils.isEmpty(mLabel)) {
                 final int firstChar = mLabel.charAt(0);
-                mCode = params.mIsRtlKeyboard ? getRtlParenthesisCode(firstChar) : firstChar;
+                mCode = getRtlParenthesisCode(firstChar, params.mIsRtlKeyboard);
             } else if (code != Keyboard.CODE_UNSPECIFIED) {
                 mCode = code;
             } else {
diff --git a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
index 4a7655e..ff4e728 100644
--- a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
@@ -262,7 +262,7 @@
             for (int n = 0; n < mPopupCharacters.length; n++) {
                 final CharSequence label = mPopupCharacters[n];
                 final int row = n / params.mNumColumns;
-                final Key key = new Key(mResources, params, label, null, params.getX(n, row),
+                final Key key = new Key(mResources, params, label.toString(), params.getX(n, row),
                         params.getY(row), params.mDefaultKeyWidth, params.mDefaultRowHeight,
                         params.getRowFlags(row));
                 params.onAddKey(key);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 229bf0f..7559108 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1708,8 +1708,8 @@
             final int rawPrimaryCode = suggestion.charAt(0);
             // Maybe apply the "bidi mirrored" conversions for parentheses
             final LatinKeyboard keyboard = mKeyboardSwitcher.getLatinKeyboard();
-            final int primaryCode = keyboard.mIsRtlKeyboard
-                    ? Key.getRtlParenthesisCode(rawPrimaryCode) : rawPrimaryCode;
+            final int primaryCode = Key.getRtlParenthesisCode(
+                    rawPrimaryCode, keyboard.mIsRtlKeyboard);
 
             final CharSequence beforeText = ic != null ? ic.getTextBeforeCursor(1, 0) : "";
             final int toLeft = (ic == null || TextUtils.isEmpty(beforeText))
