diff --git a/java/res/values-hi/donottranslate-config-spacing-and-punctuations.xml b/java/res/values-hi/donottranslate-config-spacing-and-punctuations.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ef36c09ed6d62ae2067897fb8f93e710a73a8c4
--- /dev/null
+++ b/java/res/values-hi/donottranslate-config-spacing-and-punctuations.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- The sentence separator code point, for double-space-to-period -->
+    <!-- U+007C: "|" VERTICAL LINE ; 7Ch = 124d -->
+    <integer name="sentence_separator">124</integer>
+</resources>
diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java
index 02d5eddaa25c34c8ca854b82f909cf622393ef47..fc7f95c7bcf4052d6152ab1dcde50e288ecd4d5d 100644
--- a/java/src/com/android/inputmethod/latin/Constants.java
+++ b/java/src/com/android/inputmethod/latin/Constants.java
@@ -230,7 +230,6 @@ public final class Constants {
 
     public static final String REGEXP_PERIOD = "\\.";
     public static final String STRING_SPACE = " ";
-    public static final String STRING_PERIOD_AND_SPACE = ". ";
 
     /**
      * Special keys code. Must be negative.
diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java
index 6b6384c4864874e387c5743b22cd113a212cfd41..0e85d13b64b44a48ad9b8b0e19f4eb1175d209a9 100644
--- a/java/src/com/android/inputmethod/latin/RichInputConnection.java
+++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java
@@ -729,17 +729,19 @@ public final class RichInputConnection {
         return TextUtils.equals(text, beforeText);
     }
 
-    public boolean revertDoubleSpacePeriod() {
+    public boolean revertDoubleSpacePeriod(final SpacingAndPunctuations spacingAndPunctuations) {
         if (DEBUG_BATCH_NESTING) checkBatchEdit();
         // Here we test whether we indeed have a period and a space before us. This should not
         // be needed, but it's there just in case something went wrong.
         final CharSequence textBeforeCursor = getTextBeforeCursor(2, 0);
-        if (!TextUtils.equals(Constants.STRING_PERIOD_AND_SPACE, textBeforeCursor)) {
+        if (!TextUtils.equals(spacingAndPunctuations.mSentenceSeparatorAndSpace,
+                textBeforeCursor)) {
             // Theoretically we should not be coming here if there isn't ". " before the
             // cursor, but the application may be changing the text while we are typing, so
             // anything goes. We should not crash.
-            Log.d(TAG, "Tried to revert double-space combo but we didn't find "
-                    + "\"" + Constants.STRING_PERIOD_AND_SPACE + "\" just before the cursor.");
+            Log.d(TAG, "Tried to revert double-space combo but we didn't find \""
+                    + spacingAndPunctuations.mSentenceSeparatorAndSpace
+                    + "\" just before the cursor.");
             return false;
         }
         // Double-space results in ". ". A backspace to cancel this should result in a single
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 2d5bd85dd75966e0b0ec799baa67d0ee121d54f4..74b7c81f3349d9fe7073aa75080a9cc7c9270293 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -1115,7 +1115,8 @@ public final class InputLogic {
             }
             if (SpaceState.DOUBLE == inputTransaction.mSpaceState) {
                 cancelDoubleSpacePeriodCountdown();
-                if (mConnection.revertDoubleSpacePeriod()) {
+                if (mConnection.revertDoubleSpacePeriod(
+                        inputTransaction.mSettingsValues.mSpacingAndPunctuations)) {
                     // No need to reset mSpaceState, it has already be done (that's why we
                     // receive it as a parameter)
                     inputTransaction.setRequiresUpdateSuggestions();
@@ -1298,7 +1299,9 @@ public final class InputLogic {
         if (null == lastTwo) return false;
         final int length = lastTwo.length();
         if (length < 2) return false;
-        if (lastTwo.charAt(length - 1) != Constants.CODE_SPACE) return false;
+        if (lastTwo.charAt(length - 1) != Constants.CODE_SPACE) {
+            return false;
+        }
         // We know there is a space in pos -1, and we have at least two chars. If we have only two
         // chars, isSurrogatePairs can't return true as charAt(1) is a space, so this is fine.
         final int firstCodePoint =
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
index 866f8894c018e55a1a93d23304d6ad6fadc44cff..715d449a06603e28e4771420d3005343ca24dd57 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
@@ -18,6 +18,8 @@ package com.android.inputmethod.latin;
 
 import android.test.suitebuilder.annotation.LargeTest;
 
+import com.android.inputmethod.latin.settings.Settings;
+
 @LargeTest
 public class InputLogicTestsNonEnglish extends InputTestsBase {
     final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
@@ -121,4 +123,32 @@ public class InputLogicTestsNonEnglish extends InputTestsBase {
         assertEquals("auto-correct with umlaut for German", EXPECTED_RESULT,
                 mEditText.getText().toString());
     }
+
+    // Corresponds to InputLogicTests#testDoubleSpace
+    public void testDoubleSpaceHindi() {
+        changeLanguage("hi");
+        // Set default pref just in case
+        setBooleanPreference(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true, true);
+        // U+1F607 is an emoji
+        final String[] STRINGS_TO_TYPE =
+                new String[] { "this   ", "a+  ", "\u1F607  ", "||  ", ")  ", "(  ", "%  " };
+        final String[] EXPECTED_RESULTS =
+                new String[] { "this|  ", "a+| ", "\u1F607| ", "||  ", ")| ", "(  ", "%| " };
+        for (int i = 0; i < STRINGS_TO_TYPE.length; ++i) {
+            mEditText.setText("");
+            type(STRINGS_TO_TYPE[i]);
+            assertEquals("double space processing", EXPECTED_RESULTS[i],
+                    mEditText.getText().toString());
+        }
+    }
+
+    // Corresponds to InputLogicTests#testCancelDoubleSpace
+    public void testCancelDoubleSpaceHindi() {
+        changeLanguage("hi");
+        final String STRING_TO_TYPE = "this  ";
+        final String EXPECTED_RESULT = "this ";
+        type(STRING_TO_TYPE);
+        type(Constants.CODE_DELETE);
+        assertEquals("double space make a period", EXPECTED_RESULT, mEditText.getText().toString());
+    }
 }