diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index f81e01f..2dd0e73 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -43,6 +43,9 @@
     <!-- If true, the default sort order is primary (i.e. by given name) -->
     <bool name="config_default_display_order_primary">true</bool>
 
+    <!-- If true, an option is shown in Display Options UI to choose a phonetic name display preference -->
+    <bool name="config_phonetic_name_display_user_changeable">true</bool>
+
     <!-- If true, phonetic name fields are not visible when empty -->
     <bool name="config_default_hide_phonetic_name_if_empty">true</bool>
 
diff --git a/src/com/android/contacts/preference/ContactsPreferences.java b/src/com/android/contacts/preference/ContactsPreferences.java
index ab52b1b..87b13f7 100644
--- a/src/com/android/contacts/preference/ContactsPreferences.java
+++ b/src/com/android/contacts/preference/ContactsPreferences.java
@@ -177,6 +177,11 @@
         }
     }
 
+    public boolean isPhoneticNameDisplayPreferenceChangeable() {
+        return mContext.getResources().getBoolean(
+                R.bool.config_phonetic_name_display_user_changeable);
+    }
+
     public void setPhoneticNameDisplayPreference(int phoneticNameDisplayPreference) {
         mPhoneticNameDisplayPreference = phoneticNameDisplayPreference;
         final Editor editor = mPreferences.edit();
@@ -186,6 +191,9 @@
     }
 
     public int getPhoneticNameDisplayPreference() {
+        if (!isPhoneticNameDisplayPreferenceChangeable()) {
+            return getDefaultPhoneticNameDisplayPreference();
+        }
         if (mPhoneticNameDisplayPreference == PREFERENCE_UNASSIGNED) {
             mPhoneticNameDisplayPreference = mPreferences.getInt(PHONETIC_NAME_DISPLAY_KEY,
                     getDefaultPhoneticNameDisplayPreference());
@@ -281,6 +289,7 @@
         // listener was unregistered.
         mDisplayOrder = PREFERENCE_UNASSIGNED;
         mSortOrder = PREFERENCE_UNASSIGNED;
+        mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
         mDefaultAccount = null;
 
         mPreferences.registerOnSharedPreferenceChangeListener(this);
@@ -319,6 +328,9 @@
         } else if (SORT_ORDER_KEY.equals(key)) {
             mSortOrder = PREFERENCE_UNASSIGNED;
             mSortOrder = getSortOrder();
+        } else if (PHONETIC_NAME_DISPLAY_KEY.equals(key)) {
+            mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
+            mPhoneticNameDisplayPreference = getPhoneticNameDisplayPreference();
         } else if (mDefaultAccountKey.equals(key)) {
             mDefaultAccount = null;
             mDefaultAccount = getDefaultAccount();
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
index 3f68d05..22a6683 100644
--- a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -83,6 +83,7 @@
     private static final String KEY_EXPORT = "export";
     private static final String KEY_MY_INFO = "myInfo";
     private static final String KEY_SORT_ORDER = "sortOrder";
+    private static final String KEY_PHONETIC_NAME_DISPLAY = "phoneticNameDisplay";
 
     private static final int LOADER_PROFILE = 0;
     private static final int LOADER_ACCOUNTS = 1;
@@ -269,6 +270,10 @@
             getPreferenceScreen().removePreference(findPreference(KEY_SORT_ORDER));
         }
 
+        if (!resources.getBoolean(R.bool.config_phonetic_name_display_user_changeable)) {
+            getPreferenceScreen().removePreference(findPreference(KEY_PHONETIC_NAME_DISPLAY));
+        }
+
         if (HelpUtils.isHelpAndFeedbackAvailable()) {
             getPreferenceScreen().removePreference(findPreference(KEY_ABOUT));
         }
diff --git a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
index 7da9099..bea8d14 100644
--- a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
+++ b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
@@ -61,6 +61,8 @@
                 .thenReturn(true);
         Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
                 .thenReturn(true);
+        Mockito.when(mSharedPreferences.contains(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY))
+                .thenReturn(true);
 
         InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
             @Override
@@ -108,6 +110,43 @@
                 mContactsPreferences.getDisplayOrder());
     }
 
+    public void testGetPhoneticNameDisplayDefault() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                false, // R.bool.config_phonetic_name_display_user_changeable
+                true // R.bool.config_default_hide_phonetic_name_if_empty
+        );
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
+    public void testGetPhoneticNameDisplay() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_phonetic_name_display_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(
+                Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+                Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY);
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
+    public void testRefreshPhoneticNameDisplay() throws InterruptedException {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_phonetic_name_display_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(
+                Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+                Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                PhoneticNameDisplayPreference.SHOW_ALWAYS);
+
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+        mContactsPreferences.refreshValue(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY);
+
+        Assert.assertEquals(PhoneticNameDisplayPreference.SHOW_ALWAYS,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
     public void testRefreshSortOrder() throws InterruptedException {
         Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
                 true // R.bool.config_sort_order_user_changeable
