diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
index d81dad6..760cf80 100644
--- a/res/layout/radio_info.xml
+++ b/res/layout/radio_info.xml
@@ -234,6 +234,14 @@
                 android:layout_height="wrap_content"
                 />
 
+        <!-- Dial over PS (i.e. MO VoLTE) -->
+        <Button android:id="@+id/mo_over_volte"
+            android:textSize="14sp"
+            android:layout_marginTop="8dip"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            />
+
         <!-- LTE ram dump -->
         <Button android:id="@+id/lte_ram_dump"
                 android:textSize="14sp"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 29ab3cb..75024e9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -67,6 +67,11 @@
     <!-- Phone SMS over IMS off. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="sms_over_ims_off">Turn off SMS over IMS</string>
 
+    <!-- MO over PS/VoLTE. Only shown in diagnostic screen, so precise translation is not needed. -->
+    <string name="mo_over_volte_on">Enable MO over PS/VoLTE</string>
+    <!-- MO over PS/VoLTE. Only shown in diagnostic screen, so precise translation is not needed. -->
+    <string name="mo_over_volte_off">Disable MO over PS/VoLTE</string>
+
     <!-- Phone SMS over IMS IMS registration required on. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="ims_reg_required_on">Turn on IMS registration required</string>
     <!-- Phone IMS registration required off. Only shown in diagnostic screen, so precise translation is not needed. -->
@@ -575,9 +580,9 @@
     <string name="sdcard_settings_read_only_status" product="nosdcard">USB storage mounted read-only.</string>
     <!-- Message when the SD card is mounted as read only -->
     <string name="sdcard_settings_read_only_status" product="default">SD card mounted read-only.</string>
-    <!-- SetupWizard strings used by DateTimeSettingsSetupWizard.  The button label for going to the next screen without storing the setting. [CHAR LIMIT=5] -->
+    <!-- Used in setup wizard Wi-Fi screen.  The button label for going to the next screen without submitting. [CHAR LIMIT=20] -->
     <string name="skip_label">Skip</string>
-    <!-- SetupWizard strings used by DateTimeSettingsSetupWizard.  The button label for going to the next screen. -->
+    <!-- Used in setup wizard Wi-Fi screen. The button label for going to the next screen and submitting. [CHAR LIMIT=20] -->
     <string name="next_label">Next</string>
 
     <!-- LocalePicker -->
@@ -2062,6 +2067,10 @@
     <string name="automatic_brightness">Automatic brightness</string>
     <!-- [CHAR LIMIT=40] Display settings screen, setting option name to change whether the device wakes up when a lift gesture is detected. -->
     <string name="lift_to_wake_title">Lift to wake</string>
+    <!-- [CHAR LIMIT=30] Display settings screen, setting option name to change whether the ambient display feature is enabled. -->
+    <string name="doze_title">Ambient display</string>
+    <!-- [CHAR LIMIT=NONE] Display settings screen, setting description for the ambient display feature. -->
+    <string name="doze_summary">Wake screen when device picked up or notifications arrive</string>
     <!-- [CHAR LIMIT=30] Sound & display settings screen, setting option name to change font size -->
     <string name="title_font_size">Font size</string>
     <!-- Sound & display settings screen, setting option summary displaying the currently selected font size -->
@@ -4453,10 +4462,10 @@
          Used in Wifi Setup For Setup Wizard with XL screen. -->
     <string name="wifi_setup_refresh_list">Refresh list</string>
     <!-- Button message shown on the button enabling users skip Wifi Setup.
-         Used in Wifi Setup For Setup Wizard with XL screen. -->
+         Used in Wifi Setup For Setup Wizard with XL screen. [CHAR LIMIT=10] -->
     <string name="wifi_setup_skip">Skip</string>
     <!-- Button message shown on the button enabling users go the next step.
-         Used in Wifi Setup For Setup Wizard with XL screen. -->
+         Used in Wifi Setup For Setup Wizard with XL screen. [CHAR LIMIT=10] -->
     <string name="wifi_setup_next">Next</string>
     <!-- Button label to go back to previous screen. Used in SetupWizard for
       XLarge screen [CHAR LIMIT=10] -->
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index e86fbb8..cb6bab0 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -57,6 +57,12 @@
                 android:title="@string/lift_to_wake_title"
                 android:persistent="false" />
 
+        <SwitchPreference
+                android:key="doze"
+                android:title="@string/doze_title"
+                android:summary="@string/doze_summary"
+                android:persistent="false" />
+
         <com.android.settings.WarnedListPreference
                 android:key="font_size"
                 android:title="@string/title_font_size"
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index e963c00..f85b74e 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -19,6 +19,7 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 
+import static android.provider.Settings.Secure.DOZE_ENABLED;
 import static android.provider.Settings.Secure.WAKE_GESTURE_ENABLED;
 import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
 import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
@@ -34,8 +35,10 @@
 import android.content.res.Resources;
 import android.hardware.Sensor;
 import android.hardware.SensorManager;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.os.SystemProperties;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
@@ -43,6 +46,7 @@
 import android.preference.SwitchPreference;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -59,6 +63,7 @@
     private static final String KEY_FONT_SIZE = "font_size";
     private static final String KEY_SCREEN_SAVER = "screensaver";
     private static final String KEY_LIFT_TO_WAKE = "lift_to_wake";
+    private static final String KEY_DOZE = "doze";
     private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
 
     private static final int DLG_GLOBAL_CHANGE_WARNING = 1;
@@ -70,6 +75,7 @@
     private ListPreference mScreenTimeoutPreference;
     private Preference mScreenSaverPreference;
     private SwitchPreference mLiftToWakePreference;
+    private SwitchPreference mDozePreference;
     private SwitchPreference mAutoBrightnessPreference;
 
     @Override
@@ -111,6 +117,13 @@
         } else {
             removePreference(KEY_LIFT_TO_WAKE);
         }
+
+        if (isDozeAvailable(getActivity())) {
+            mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
+            mDozePreference.setOnPreferenceChangeListener(this);
+        } else {
+            removePreference(KEY_DOZE);
+        }
     }
 
     private static boolean isLiftToWakeAvailable(Context context) {
@@ -118,6 +131,15 @@
         return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
     }
 
+    private static boolean isDozeAvailable(Context context) {
+        String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null;
+        if (TextUtils.isEmpty(name)) {
+            name = context.getResources().getString(
+                    com.android.internal.R.string.config_dozeComponent);
+        }
+        return !TextUtils.isEmpty(name);
+    }
+
     private static boolean isAutomaticBrightnessAvailable(Resources res) {
         return res.getBoolean(com.android.internal.R.bool.config_automatic_brightness_available);
     }
@@ -256,6 +278,12 @@
             int value = Settings.Secure.getInt(getContentResolver(), WAKE_GESTURE_ENABLED, 0);
             mLiftToWakePreference.setChecked(value != 0);
         }
+
+        // Update doze if it is available.
+        if (mDozePreference != null) {
+            int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
+            mDozePreference.setChecked(value != 0);
+        }
     }
 
     private void updateScreenSaverSummary() {
@@ -303,6 +331,10 @@
             boolean value = (Boolean) objValue;
             Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
         }
+        if (preference == mDozePreference) {
+            boolean value = (Boolean) objValue;
+            Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
+        }
         return true;
     }
 
@@ -347,6 +379,9 @@
                     if (!isLiftToWakeAvailable(context)) {
                         result.add(KEY_LIFT_TO_WAKE);
                     }
+                    if (!isDozeAvailable(context)) {
+                        result.add(KEY_DOZE);
+                    }
                     return result;
                 }
             };
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index b0a4a53..75de222 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -303,6 +303,9 @@
         imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
         imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
 
+        moOverVolteButton = (Button) findViewById(R.id.mo_over_volte);
+        moOverVolteButton.setOnClickListener(mMoOverVolteHandler);
+
         smsOverImsButton = (Button) findViewById(R.id.sms_over_ims);
         smsOverImsButton.setOnClickListener(mSmsOverImsHandler);
 
@@ -360,6 +363,7 @@
         updatePowerState();
         updateCellInfoListRate();
         updateImsRegRequiredState();
+        updateMoOverImsState();
         updateSmsOverImsState();
         updateLteRamDumpState();
         updateProperties();
@@ -985,6 +989,35 @@
         imsRegRequiredButton.setText(buttonText);
     }
 
+    private Button moOverVolteButton;
+    OnClickListener mMoOverVolteHandler = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            boolean moOverVolteEnabled = isMoOverVolteEnabled();
+            log(String.format("toggle %s: currently %s",
+                    TelephonyProperties.PROPERTY_DBG_IMS_VOLTE_ENABLE,
+                    (moOverVolteEnabled ? "on" : "off")));
+            boolean newValue = !moOverVolteEnabled;
+            SystemProperties.set(TelephonyProperties.PROPERTY_DBG_IMS_VOLTE_ENABLE,
+                    newValue ? "1" : "0");
+            updateMoOverImsState();
+        }
+    };
+
+    private boolean isMoOverVolteEnabled() {
+        return SystemProperties.getInt(TelephonyProperties.PROPERTY_DBG_IMS_VOLTE_ENABLE,
+                TelephonyProperties.PROPERTY_DBG_IMS_VOLTE_ENABLE_DEAFULT) == 1;
+    }
+
+    private void updateMoOverImsState() {
+        boolean moOverVolteEnabled = isMoOverVolteEnabled();
+        log("updateMoOverImsState isMoOverVolteEnabled()=" + moOverVolteEnabled);
+        String buttonText = moOverVolteEnabled ?
+                getString(R.string.mo_over_volte_off) :
+                getString(R.string.mo_over_volte_on);
+        moOverVolteButton.setText(buttonText);
+    }
+
     private Button smsOverImsButton;
     static final String PROPERTY_SMS_OVER_IMS = "persist.radio.imsallowmtsms";
     OnClickListener mSmsOverImsHandler = new OnClickListener() {
