diff --git a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
index 2c700e55ba0d74cc6904b7df8521f3b7dd6e03d7..85b14d8490f75c82414248011bfc44cf2d6eb316 100644
--- a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
+++ b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
@@ -49,13 +49,13 @@ public final class AdditionalSubtype {
                 && SubtypeLocale.isExceptionalLocale(localeString)) {
             final String layoutDisplayName = SubtypeLocale.getKeyboardLayoutSetDisplayName(
                     keyboardLayoutSetName);
-            layoutDisplayNameExtraValue = StringUtils.appendToCommaConcatenatedTextIfNotExists(
+            layoutDisplayNameExtraValue = StringUtils.appendToCommaSplittableTextIfNotExists(
                     UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME + "=" + layoutDisplayName, extraValue);
         } else {
             layoutDisplayNameExtraValue = extraValue;
         }
         final String additionalSubtypeExtraValue =
-                StringUtils.appendToCommaConcatenatedTextIfNotExists(
+                StringUtils.appendToCommaSplittableTextIfNotExists(
                         IS_ADDITIONAL_SUBTYPE, layoutDisplayNameExtraValue);
         final int nameId = SubtypeLocale.getSubtypeNameId(localeString, keyboardLayoutSetName);
         return new InputMethodSubtype(nameId, R.drawable.ic_subtype_keyboard,
@@ -67,8 +67,8 @@ public final class AdditionalSubtype {
         final String localeString = subtype.getLocale();
         final String keyboardLayoutSetName = SubtypeLocale.getKeyboardLayoutSetName(subtype);
         final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName;
-        final String extraValue = StringUtils.removeFromCommaConcatenatedTextIfExists(
-                layoutExtraValue, StringUtils.removeFromCommaConcatenatedTextIfExists(
+        final String extraValue = StringUtils.removeFromCommaSplittableTextIfExists(
+                layoutExtraValue, StringUtils.removeFromCommaSplittableTextIfExists(
                         IS_ADDITIONAL_SUBTYPE, subtype.getExtraValue()));
         final String basePrefSubtype = localeString + LOCALE_AND_LAYOUT_SEPARATOR
                 + keyboardLayoutSetName;
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index 8f98e3a42360436723589f04e90d2c567ddaedd7..1f673e9b007cee7493addd9ee64a8b5b78c7ead4 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -199,7 +199,6 @@ public final class InputAttributes {
         if (editorInfo == null) return false;
         final String findingKey = (packageName != null) ? packageName + "." + key
                 : key;
-        return StringUtils.containsInCommaConcatenatedText(
-                findingKey, editorInfo.privateImeOptions);
+        return StringUtils.containsInCommaSplittableText(findingKey, editorInfo.privateImeOptions);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index fa90ba2527b1edac324cd5fa47d71f6add48197e..988b7f60ec097c4e41d73c08d953c0dbc71ca253 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -42,33 +42,38 @@ public final class StringUtils {
         return false;
     }
 
-    private static final String SEPARATOR_FOR_COMMA_CONCATENATED_TEXT = ",";
+    /**
+     * Comma-Splittable Text is similar to Comma-Separated Values (CSV) but has much simpler syntax.
+     * Unlike CSV, Comma-Splittable Text has no escaping mechanism, so that the text can't contain
+     * a comma character in it.
+     */
+    private static final String SEPARATOR_FOR_COMMA_SPLITTABLE_TEXT = ",";
 
-    public static boolean containsInCommaConcatenatedText(final String text,
+    public static boolean containsInCommaSplittableText(final String text,
             final String extraValues) {
         if (TextUtils.isEmpty(extraValues)) {
             return false;
         }
-        return containsInArray(text, extraValues.split(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT));
+        return containsInArray(text, extraValues.split(SEPARATOR_FOR_COMMA_SPLITTABLE_TEXT));
     }
 
-    public static String appendToCommaConcatenatedTextIfNotExists(final String text,
+    public static String appendToCommaSplittableTextIfNotExists(final String text,
             final String extraValues) {
         if (TextUtils.isEmpty(extraValues)) {
             return text;
         }
-        if (containsInCommaConcatenatedText(text, extraValues)) {
+        if (containsInCommaSplittableText(text, extraValues)) {
             return extraValues;
         }
-        return extraValues + SEPARATOR_FOR_COMMA_CONCATENATED_TEXT + text;
+        return extraValues + SEPARATOR_FOR_COMMA_SPLITTABLE_TEXT + text;
     }
 
-    public static String removeFromCommaConcatenatedTextIfExists(final String text,
+    public static String removeFromCommaSplittableTextIfExists(final String text,
             final String extraValues) {
         if (TextUtils.isEmpty(extraValues)) {
             return "";
         }
-        final String[] elements = extraValues.split(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT);
+        final String[] elements = extraValues.split(SEPARATOR_FOR_COMMA_SPLITTABLE_TEXT);
         if (!containsInArray(text, elements)) {
             return extraValues;
         }
@@ -78,7 +83,7 @@ public final class StringUtils {
                 result.add(element);
             }
         }
-        return TextUtils.join(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT, result);
+        return TextUtils.join(SEPARATOR_FOR_COMMA_SPLITTABLE_TEXT, result);
     }
 
     /**
diff --git a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
index e9806832aa131afa98b33ee978f1ba13ca4dfbab..4f260987b660b05624fd3db8c0139f30516718d6 100644
--- a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
@@ -41,60 +41,60 @@ public class StringUtilsTests extends AndroidTestCase {
     }
 
     public void testContainsInExtraValues() {
-        assertFalse("null", StringUtils.containsInCommaConcatenatedText("key", null));
-        assertFalse("empty", StringUtils.containsInCommaConcatenatedText("key", ""));
+        assertFalse("null", StringUtils.containsInCommaSplittableText("key", null));
+        assertFalse("empty", StringUtils.containsInCommaSplittableText("key", ""));
         assertFalse("not in 1 element",
-                StringUtils.containsInCommaConcatenatedText("key", "key1"));
+                StringUtils.containsInCommaSplittableText("key", "key1"));
         assertFalse("not in 2 elements",
-                StringUtils.containsInCommaConcatenatedText("key", "key1,key2"));
+                StringUtils.containsInCommaSplittableText("key", "key1,key2"));
 
-        assertTrue("in 1 element", StringUtils.containsInCommaConcatenatedText("key", "key"));
-        assertTrue("in 2 elements", StringUtils.containsInCommaConcatenatedText("key", "key1,key"));
+        assertTrue("in 1 element", StringUtils.containsInCommaSplittableText("key", "key"));
+        assertTrue("in 2 elements", StringUtils.containsInCommaSplittableText("key", "key1,key"));
     }
 
     public void testAppendToExtraValuesIfNotExists() {
         assertEquals("null", "key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", null));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", null));
         assertEquals("empty", "key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", ""));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", ""));
 
         assertEquals("not in 1 element", "key1,key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1"));
         assertEquals("not in 2 elements", "key1,key2,key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key2"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key2"));
 
         assertEquals("in 1 element", "key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key"));
         assertEquals("in 2 elements at position 1", "key,key2",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key,key2"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key,key2"));
         assertEquals("in 2 elements at position 2", "key1,key",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key"));
         assertEquals("in 3 elements at position 2", "key1,key,key3",
-                StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key,key3"));
+                StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key,key3"));
     }
 
     public void testRemoveFromExtraValuesIfExists() {
-        assertEquals("null", "", StringUtils.removeFromCommaConcatenatedTextIfExists("key", null));
-        assertEquals("empty", "", StringUtils.removeFromCommaConcatenatedTextIfExists("key", ""));
+        assertEquals("null", "", StringUtils.removeFromCommaSplittableTextIfExists("key", null));
+        assertEquals("empty", "", StringUtils.removeFromCommaSplittableTextIfExists("key", ""));
 
         assertEquals("not in 1 element", "key1",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key1"));
         assertEquals("not in 2 elements", "key1,key2",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key2"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key2"));
 
         assertEquals("in 1 element", "",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key"));
         assertEquals("in 2 elements at position 1", "key2",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key,key2"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key,key2"));
         assertEquals("in 2 elements at position 2", "key1",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key"));
         assertEquals("in 3 elements at position 2", "key1,key3",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key,key3"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key,key3"));
 
         assertEquals("in 3 elements at position 1,2,3", "",
-                StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key,key,key"));
+                StringUtils.removeFromCommaSplittableTextIfExists("key", "key,key,key"));
         assertEquals("in 5 elements at position 2,4", "key1,key3,key5",
-                StringUtils.removeFromCommaConcatenatedTextIfExists(
+                StringUtils.removeFromCommaSplittableTextIfExists(
                         "key", "key1,key,key3,key,key5"));
     }