diff --git a/java/res/xml-sw600dp/key_apostrophe.xml b/java/res/xml-sw600dp/key_apostrophe.xml
index 0c838db56723f24ba2190d7d5d89528a7ab9bb07..2aec3472908147fbad7eca46c4fdaa7a8d9b7cd5 100644
--- a/java/res/xml-sw600dp/key_apostrophe.xml
+++ b/java/res/xml-sw600dp/key_apostrophe.xml
@@ -28,6 +28,16 @@
             <Key
                 latin:keyLabel="-" />
         </case>
+        <case
+            latin:languageCode="fa"
+        >
+            <Key
+                latin:keyLabel="!text/keylabel_for_apostrophe"
+                latin:keyHintLabel="!text/keyhintlabel_for_apostrophe"
+                latin:keyLabelFlags="hasPopupHint"
+                latin:moreKeys="!text/more_keys_for_apostrophe"
+                latin:keyStyle="hasShiftedLetterHintStyle" />
+        </case>
         <default>
             <Key
                 latin:keyLabel="!text/keylabel_for_apostrophe"
diff --git a/java/res/xml-sw600dp/key_dash.xml b/java/res/xml-sw600dp/key_dash.xml
index 118b67f2726bf768cb35059a312399549b223d58..b139c29c829f28e6fa079dad6c609791756b51f5 100644
--- a/java/res/xml-sw600dp/key_dash.xml
+++ b/java/res/xml-sw600dp/key_dash.xml
@@ -34,6 +34,7 @@
             <Key
                 latin:keyLabel="."
                 latin:keyHintLabel="!text/keyhintlabel_for_arabic_diacritics"
+                latin:keyLabelFlags="hasPopupHint"
                 latin:moreKeys="!text/more_keys_for_arabic_diacritics"
                 latin:keyStyle="hasShiftedLetterHintStyle" />
         </case>
diff --git a/java/res/xml-sw600dp/rowkeys_farsi3.xml b/java/res/xml-sw600dp/rowkeys_farsi3.xml
index cb81840030d6aa0b43435bf6cc367afe7bb790fa..998ba72d64ec7443ab7df9cf9656ebe54e080d5c 100644
--- a/java/res/xml-sw600dp/rowkeys_farsi3.xml
+++ b/java/res/xml-sw600dp/rowkeys_farsi3.xml
@@ -27,11 +27,12 @@
     <!-- U+0637: "Ø·" ARABIC LETTER TAH -->
     <Key
         latin:keyLabel="&#x0637;" />
-    <!-- U+0632: "ز" ARABIC LETTER ZAIN
-         U+0698: "Ú˜" ARABIC LETTER JEH -->
+    <!-- U+0698: "Ú˜" ARABIC LETTER JEH -->
     <Key
-        latin:keyLabel="&#x0632;"
-        latin:moreKeys="&#x0698;" />
+        latin:keyLabel="&#x0698;" />
+    <!-- U+0632: "ز" ARABIC LETTER ZAIN -->
+    <Key
+        latin:keyLabel="&#x0632;" />
     <!-- U+0631: "ر" ARABIC LETTER REH -->
     <Key
         latin:keyLabel="&#x0631;" />
@@ -49,4 +50,7 @@
     <Key
         latin:keyLabel="&#x0648;"
         latin:moreKeys="&#x0624;" />
+    <!-- U+0622: "Ø¢" ARABIC LETTER ALEF WITH MADDA ABOVE -->
+    <Key
+        latin:keyLabel="&#x0622;" />
 </merge>
diff --git a/java/res/xml-sw600dp/rows_farsi.xml b/java/res/xml-sw600dp/rows_farsi.xml
index 1ce658648dc2deb9393f017bd13f23814294e90b..52c2d932901133431b89ed2838e2a07c2dd2fadf 100644
--- a/java/res/xml-sw600dp/rows_farsi.xml
+++ b/java/res/xml-sw600dp/rows_farsi.xml
@@ -44,8 +44,6 @@
         <include
             latin:keyboardLayout="@xml/rowkeys_farsi3"
             latin:keyXPos="4.091%p" />
-        <include
-            latin:keyboardLayout="@xml/keys_comma_period" />
         <Key
             latin:keyStyle="enterKeyStyle"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml-sw768dp/rows_farsi.xml b/java/res/xml-sw768dp/rows_farsi.xml
index 28031bb82d5a9f43cd7e4aaa82ef22483f944ce2..4b4c970fd9986b190e352492ff9ab4999cc26d50 100644
--- a/java/res/xml-sw768dp/rows_farsi.xml
+++ b/java/res/xml-sw768dp/rows_farsi.xml
@@ -52,8 +52,6 @@
         <include
             latin:keyboardLayout="@xml/rowkeys_farsi3"
             latin:keyXPos="13.829%p" />
-        <include
-            latin:keyboardLayout="@xml/keys_comma_period" />
         <Key
             latin:keyStyle="enterKeyStyle"
             latin:keyWidth="fillRight" />
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 1e3a0a5baef996ee2ae8bea3905c97f2f2e16fea..8c218c6d3cdb4c86ff195fe642a1246c9bff0f96 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -1101,14 +1101,16 @@ public final class KeyboardTextsSet {
         // U+060C: "،" ARABIC COMMA
         // U+061B: "Ø›" ARABIC SEMICOLON
         // U+061F: "ØŸ" ARABIC QUESTION MARK
+        // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+        // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         /* 98 */ "\u060C",
         /* 99 */ "!",
         /* 100 */ "!,\\,",
         /* 101 */ "\u061F",
         /* 102 */ "\u061F,?",
-        /* 103 */ null,
-        /* 104 */ null,
-        /* 105 */ "\u061F,\u061B,!,:,-,/,\',\"",
+        /* 103 */ "\u060C",
+        /* 104 */ "\u061F",
+        /* 105 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
     };
 
     /* Language fi: Finnish */
diff --git a/tools/maketext/res/values-fa/donottranslate-more-keys.xml b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
index e64af95c4745f28eb29f3fdd9725ef945d8ac6ae..3519eea39eadd6664d064ab22985c5fd919d1550 100644
--- a/tools/maketext/res/values-fa/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
@@ -63,13 +63,17 @@
     <string name="more_keys_for_symbols_percent">\\%,&#x2030;</string>
     <!-- U+060C: "،" ARABIC COMMA
          U+061B: "Ø›" ARABIC SEMICOLON
-         U+061F: "ØŸ" ARABIC QUESTION MARK -->
+         U+061F: "ØŸ" ARABIC QUESTION MARK
+         U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+         U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
     <string name="keylabel_for_tablet_comma">"&#x060C;"</string>
     <string name="keyhintlabel_for_tablet_comma">"!"</string>
     <string name="more_keys_for_tablet_comma">"!,\\,"</string>
     <string name="keyhintlabel_for_tablet_period">"&#x061F;"</string>
     <string name="more_keys_for_tablet_period">"&#x061F;,\?"</string>
-    <string name="more_keys_for_apostrophe">"&#x061F;,&#x061B;,!,:,-,/,\',\""</string>
+    <string name="keylabel_for_apostrophe">&#x060C;</string>
+    <string name="keyhintlabel_for_apostrophe">&#x061F;</string>
+    <string name="more_keys_for_apostrophe">"!fixedColumnOrder!4,:,!,&#x061F;,&#x061B;,-,/,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;"</string>
     <!-- U+061F: "ØŸ" ARABIC QUESTION MARK
          U+060C: "،" ARABIC COMMA
          U+061B: "Ø›" ARABIC SEMICOLON -->