diff --git a/src/com/android/phone/CLIRListPreference.java b/src/com/android/phone/CLIRListPreference.java
old mode 100644
new mode 100755
index b3ff171..5c6132b
--- a/src/com/android/phone/CLIRListPreference.java
+++ b/src/com/android/phone/CLIRListPreference.java
@@ -7,6 +7,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.preference.ListPreference;
+import android.telephony.CarrierConfigManager;
 import android.util.AttributeSet;
 import android.util.Log;
 
@@ -26,6 +27,12 @@
     private Phone mPhone;
     private TimeConsumingPreferenceListener mTcpListener;
 
+    private final String[] mEntries = getContext().getResources()
+            .getStringArray(R.array.clir_display_values);
+    private final String[] mValues = getContext().getResources()
+            .getStringArray(R.array.clir_values);
+    private boolean mConfigSupportNetworkDefault;
+
     int clirArray[];
 
     public CLIRListPreference(Context context, AttributeSet attrs) {
@@ -40,7 +47,7 @@
     protected void onDialogClosed(boolean positiveResult) {
         super.onDialogClosed(positiveResult);
 
-        mPhone.setOutgoingCallerIdDisplay(findIndexOfValue(getValue()),
+        mPhone.setOutgoingCallerIdDisplay(convertValueToCLIRMode(getValue()),
                 mHandler.obtainMessage(MyHandler.MESSAGE_SET_CLIR));
         if (mTcpListener != null) {
             mTcpListener.onStarted(this, false);
@@ -51,6 +58,19 @@
             TimeConsumingPreferenceListener listener, boolean skipReading, Phone phone) {
         mPhone = phone;
         mTcpListener = listener;
+        mConfigSupportNetworkDefault = PhoneGlobals.getInstance()
+                .getCarrierConfigForSubId(mPhone.getSubId())
+                .getBoolean(CarrierConfigManager.KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL);
+        // When "Network default" is not supported, create entries with remaining two values.
+        if (!mConfigSupportNetworkDefault) {
+            String[] noNetworkDefaultEntries = {mEntries[CommandsInterface.CLIR_INVOCATION],
+                    mEntries[CommandsInterface.CLIR_SUPPRESSION]};
+            String[] noNetworkDefaultValues = {mValues[CommandsInterface.CLIR_INVOCATION],
+                    mValues[CommandsInterface.CLIR_SUPPRESSION]};
+            setEntries(noNetworkDefaultEntries);
+            setEntryValues(noNetworkDefaultValues);
+        }
+
         if (!skipReading) {
             Log.i(LOG_TAG, "init: requesting CLIR");
             mPhone.getOutgoingCallerIdDisplay(mHandler.obtainMessage(MyHandler.MESSAGE_GET_CLIR,
@@ -92,7 +112,10 @@
                 value = CommandsInterface.CLIR_DEFAULT;
                 break;
         }
-        setValueIndex(value);
+        value = (!mConfigSupportNetworkDefault && value == CommandsInterface.CLIR_DEFAULT)
+                ? CommandsInterface.CLIR_SUPPRESSION : value;
+
+        setValue(mValues[value]);
 
         // set the string summary to reflect the value
         int summary = R.string.sum_default_caller_id;
@@ -110,6 +133,25 @@
         setSummary(summary);
     }
 
+    /**
+     * When "Network default" is hidden, UI list index(0-1) doesn't match CLIR Mode(0-2 for Modem).
+     * In order to send request to Modem, it is necessary to convert value to CLIR Mode.
+     * ("Hide" = CommandsInterface.CLIR_INVOCATION, "Show" = CommandsInterface.CLIR_SUPPRESSION)
+     *
+     * @param String of entry value.
+     * @return "CommandInterface.CLIR_*" for Modem.
+     */
+    private int convertValueToCLIRMode(String value) {
+        if (mValues[CommandsInterface.CLIR_INVOCATION].equals(value)) {
+            return CommandsInterface.CLIR_INVOCATION;
+        } else if (mValues[CommandsInterface.CLIR_SUPPRESSION].equals(value)) {
+            return CommandsInterface.CLIR_SUPPRESSION;
+        } else {
+            return mConfigSupportNetworkDefault ? CommandsInterface.CLIR_DEFAULT :
+                    CommandsInterface.CLIR_SUPPRESSION;
+        }
+    }
+
     private class MyHandler extends Handler {
         static final int MESSAGE_GET_CLIR = 0;
         static final int MESSAGE_SET_CLIR = 1;
