diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0a6c309..fd40524 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5060,46 +5060,52 @@
     <!-- Sounds & notifications: Settings header. [CHAR LIMIT=20] -->
     <string name="notification_settings">Sounds &amp; Notifications</string>
 
-    <!-- Sounds & notifications: Title for the option managing media volume. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option managing media volume. [CHAR LIMIT=30] -->
     <string name="media_volume_option_title">Media volume</string>
 
-    <!-- Sounds & notifications: Title for the option managing alarm volume. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option managing alarm volume. [CHAR LIMIT=30] -->
     <string name="alarm_volume_option_title">Alarm volume</string>
 
-    <!-- Sounds & notifications: Title for the option managing ringer volume. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option managing ringer volume. [CHAR LIMIT=30] -->
     <string name="ring_volume_option_title">Ring volume</string>
 
-    <!-- Sounds & notifications: Title for the Do not disturb option and associated settings page. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option managing notification volume. [CHAR LIMIT=30] -->
+    <string name="notification_volume_option_title">Notification volume</string>
+
+    <!-- Sounds & notifications: Title for the Do not disturb option and associated settings page. [CHAR LIMIT=30] -->
     <string name="zen_mode_settings_title">Do not disturb</string>
 
-    <!-- Sounds & notifications: Title for the ringer mode option. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the ringer mode option. [CHAR LIMIT=60] -->
     <string name="ringer_mode_title">When calls and notifications arrive</string>
 
-    <!-- Sounds & notifications: Value for the ringer mode option when audible. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the ringer mode option on devices without voice. [CHAR LIMIT=30] -->
+    <string name="ringer_mode_title_novoice">When notifications arrive</string>
+
+    <!-- Sounds & notifications: Value for the ringer mode option when audible. [CHAR LIMIT=30] -->
     <string name="ringer_mode_audible">Ring</string>
 
-    <!-- Sounds & notifications: Value for the ringer mode option when vibrate. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Value for the ringer mode option when vibrate. [CHAR LIMIT=30] -->
     <string name="ringer_mode_vibrate">Vibrate instead of ringing</string>
 
-    <!-- Sounds & notifications: Value for the ringer mode option when silent. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Value for the ringer mode option when silent. [CHAR LIMIT=30] -->
     <string name="ringer_mode_silent">Don\'t ring or vibrate</string>
 
-    <!-- Sounds & notifications: Title for the option defining the phone ringtone. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option defining the phone ringtone. [CHAR LIMIT=30] -->
     <string name="ringtone_title">Phone ringtone</string>
 
-    <!-- Sounds & notifications: Title for the option defining the default notification ringtone. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option defining the default notification ringtone. [CHAR LIMIT=30] -->
     <string name="notification_ringtone_title">Default notification ringtone</string>
 
-    <!-- Sounds & notifications: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=30] -->
     <string name="vibrate_when_ringing_title">Vibrate when ringing</string>
 
-    <!-- Sounds & notifications: Title for the showing notifications option and associated settings page. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the showing notifications option and associated settings page. [CHAR LIMIT=30] -->
     <string name="notification_display_settings">Showing notifications</string>
 
-    <!-- Sounds & notifications > Showing notifications: Title for the pulse notification light option. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Showing notifications: Title for the pulse notification light option. [CHAR LIMIT=30] -->
     <string name="notification_pulse_title">Pulse notification light</string>
 
-    <!-- Sounds & notifications > Showing notifications: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Showing notifications: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=30] -->
     <string name="lock_screen_notifications_title">When device is locked</string>
 
     <!-- Sounds & notifications > Showing notifications: Value for lockscreen notifications:  all information will be
@@ -5116,7 +5122,7 @@
          [CHAR LIMIT=50] -->
     <string name="lock_screen_notifications_summary_disable">Don\'t show notifications at all</string>
 
-    <!-- Sounds & notifications > Showing notifications: Title for the option managing notification display in zen mode. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Showing notifications: Title for the option managing notification display in zen mode. [CHAR LIMIT=30] -->
     <string name="zen_mode_notifications_title">When do not disturb is on</string>
 
     <!-- Sounds & notifications > Showing notifications: Value for zen mode notifications: notifications will be suppressed in zen mode [CHAR LIMIT=50] -->
@@ -5125,25 +5131,25 @@
     <!-- Sounds & notifications > Showing notifications: Value for zen mode notifications: notifications will be displayed in zen mode [CHAR LIMIT=50] -->
     <string name="zen_mode_notifications_summary_show">Show all notifications in the list</string>
 
-    <!-- Sounds & notifications > Showing notifications: Title for the option managing notifications per application. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Showing notifications: Title for the option managing notifications per application. [CHAR LIMIT=30] -->
     <string name="app_notifications_title">App notifications</string>
 
-    <!-- Sounds & notifications: Title for the touch sounds option and associated settings page. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for the touch sounds option and associated settings page. [CHAR LIMIT=30] -->
     <string name="touch_sound_settings">Touch sounds</string>
 
-    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=30] -->
     <string name="dial_pad_tones_title">Dial pad tones</string>
 
-    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for screen locking and unlocking. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for screen locking and unlocking. [CHAR LIMIT=30] -->
     <string name="screen_locking_sounds_title">Screen locking &amp; unlocking</string>
 
-    <!-- Sounds & notifications > Touch sounds: Title for the option enabling other touch sounds. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling other touch sounds. [CHAR LIMIT=30] -->
     <string name="other_touch_sounds_title">Other touch sounds</string>
 
-    <!-- Sounds & notifications > Touch sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=30] -->
     <string name="vibrate_on_touch_title">Vibrate on touch</string>
 
-    <!-- Sounds & notifications: Title for managing notification listeners option. [CHAR LIMIT=NONE] -->
+    <!-- Sounds & notifications: Title for managing notification listeners option. [CHAR LIMIT=30] -->
     <string name="manage_notification_access_title">Notification access</string>
 
     <!-- Summary of preference to manage notification listeners, when none are enabled -->
diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml
index 633c133..865138f 100644
--- a/res/xml/notification_settings.xml
+++ b/res/xml/notification_settings.xml
@@ -37,6 +37,12 @@
             android:icon="@*android:drawable/ic_audio_ring_notif"
             android:title="@string/ring_volume_option_title" />
 
+    <!-- Notification volume -->
+    <com.android.settings.notification.VolumeSeekBarPreference
+            android:key="notification_volume"
+            android:icon="@*android:drawable/ic_audio_ring_notif"
+            android:title="@string/notification_volume_option_title" />
+
     <!-- Do not disturb -->
     <PreferenceScreen
             android:key="zen_mode"
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index b67032a..e32419d 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -36,18 +36,28 @@
 import android.preference.PreferenceScreen;
 import android.preference.SeekBarVolumizer;
 import android.preference.TwoStatePreference;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.SoundSettings;
+import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.Indexable.SearchIndexProvider;
 
-public class NotificationSettings extends SettingsPreferenceFragment {
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class NotificationSettings extends SettingsPreferenceFragment implements Indexable {
     private static final String TAG = "NotificationSettings";
 
     private static final String KEY_MEDIA_VOLUME = "media_volume";
     private static final String KEY_ALARM_VOLUME = "alarm_volume";
     private static final String KEY_RING_VOLUME = "ring_volume";
+    private static final String KEY_NOTIFICATION_VOLUME = "notification_volume";
     private static final String KEY_RINGER_MODE = "ringer_mode";
     private static final String KEY_PHONE_RINGTONE = "ringtone";
     private static final String KEY_NOTIFICATION_RINGTONE = "notification_ringtone";
@@ -62,6 +72,7 @@
 
     private Context mContext;
     private PackageManager mPM;
+    private boolean mVoiceCapable;
 
     private DropDownPreference mRingerMode;
     private Preference mPhoneRingtonePreference;
@@ -74,13 +85,19 @@
         super.onCreate(savedInstanceState);
         mContext = getActivity();
         mPM = mContext.getPackageManager();
-
+        mVoiceCapable = Utils.isVoiceCapable(mContext);
         addPreferencesFromResource(R.xml.notification_settings);
 
         final PreferenceScreen root = getPreferenceScreen();
         initVolumePreference(KEY_MEDIA_VOLUME, AudioManager.STREAM_MUSIC);
         initVolumePreference(KEY_ALARM_VOLUME, AudioManager.STREAM_ALARM);
-        initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING);
+        if (mVoiceCapable) {
+            initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING);
+            removePreference(KEY_NOTIFICATION_VOLUME);
+        } else {
+            initVolumePreference(KEY_NOTIFICATION_VOLUME, AudioManager.STREAM_NOTIFICATION);
+            removePreference(KEY_RING_VOLUME);
+        }
         initRingerMode(root);
         initRingtones(root);
         initVibrateWhenRinging(root);
@@ -142,6 +159,9 @@
     private void initRingerMode(PreferenceScreen root) {
         mRingerMode = (DropDownPreference) root.findPreference(KEY_RINGER_MODE);
         if (mRingerMode == null) return;
+        if (!mVoiceCapable) {
+            mRingerMode.setTitle(R.string.ringer_mode_title_novoice);
+        }
         final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
         mRingerMode.addItem(R.string.ringer_mode_audible, AudioManager.RINGER_MODE_NORMAL);
         mRingerMode.addItem(R.string.ringer_mode_vibrate, AudioManager.RINGER_MODE_VIBRATE);
@@ -166,6 +186,10 @@
 
     private void initRingtones(PreferenceScreen root) {
         mPhoneRingtonePreference = root.findPreference(KEY_PHONE_RINGTONE);
+        if (mPhoneRingtonePreference != null && !mVoiceCapable) {
+            root.removePreference(mPhoneRingtonePreference);
+            mPhoneRingtonePreference = null;
+        }
         mNotificationRingtonePreference = root.findPreference(KEY_NOTIFICATION_RINGTONE);
     }
 
@@ -196,8 +220,13 @@
     // === Vibrate when ringing ===
 
     private void initVibrateWhenRinging(PreferenceScreen root) {
-        mVibrateWhenRinging = (TwoStatePreference) findPreference(KEY_VIBRATE_WHEN_RINGING);
+        mVibrateWhenRinging = (TwoStatePreference) root.findPreference(KEY_VIBRATE_WHEN_RINGING);
         if (mVibrateWhenRinging == null) return;
+        if (!mVoiceCapable) {
+            root.removePreference(mVibrateWhenRinging);
+            mVibrateWhenRinging = null;
+            return;
+        }
         mVibrateWhenRinging.setPersistent(false);
         updateVibrateWhenRinging();
         mVibrateWhenRinging.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@@ -299,4 +328,29 @@
             }
         }
     }
+
+    // === Indexing ===
+
+    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+
+        public List<SearchIndexableResource> getXmlResourcesToIndex(
+                Context context, boolean enabled) {
+            final SearchIndexableResource sir = new SearchIndexableResource(context);
+            sir.xmlResId = R.xml.notification_settings;
+            return Arrays.asList(sir);
+        }
+
+        public List<String> getNonIndexableKeys(Context context) {
+            final ArrayList<String> rt = new ArrayList<String>();
+            if (Utils.isVoiceCapable(context)) {
+                rt.add(KEY_NOTIFICATION_VOLUME);
+            } else {
+                rt.add(KEY_RING_VOLUME);
+                rt.add(KEY_PHONE_RINGTONE);
+                rt.add(KEY_VIBRATE_WHEN_RINGING);
+            }
+            return rt;
+        }
+    };
 }
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index b5651f4..8a66d1b 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -55,6 +55,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
@@ -83,12 +84,12 @@
     private static final String KEY_ENTRY = "entry";
     private static final String KEY_CONDITION_PROVIDERS = "manage_condition_providers";
 
-    private static final SparseArray<String> ALL_KEY_TITLES = allKeyTitles();
-
-    private static SparseArray<String> allKeyTitles() {
+    private static SparseArray<String> allKeyTitles(Context context) {
         final SparseArray<String> rt = new SparseArray<String>();
         rt.put(R.string.zen_mode_general_category, KEY_GENERAL);
-        rt.put(R.string.zen_mode_phone_calls, KEY_CALLS);
+        if (Utils.isVoiceCapable(context)) {
+            rt.put(R.string.zen_mode_phone_calls, KEY_CALLS);
+        }
         rt.put(R.string.zen_mode_messages, KEY_MESSAGES);
         rt.put(R.string.zen_mode_automatic_category, KEY_AUTOMATIC);
         rt.put(R.string.zen_mode_when, KEY_WHEN);
@@ -159,21 +160,26 @@
 
         final PreferenceCategory general = (PreferenceCategory) root.findPreference(KEY_GENERAL);
 
-        mCalls = (SwitchPreference) root.findPreference(KEY_CALLS);
-        mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                if (mDisableListeners) return true;
-                final boolean val = (Boolean) newValue;
-                if (val == mConfig.allowCalls) return true;
-                if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + val);
-                final ZenModeConfig newConfig = mConfig.copy();
-                newConfig.allowCalls = val;
-                return setZenModeConfig(newConfig);
-            }
-        });
+        mCalls = (SwitchPreference) general.findPreference(KEY_CALLS);
+        if (Utils.isVoiceCapable(mContext)) {
+            mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    if (mDisableListeners) return true;
+                    final boolean val = (Boolean) newValue;
+                    if (val == mConfig.allowCalls) return true;
+                    if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + val);
+                    final ZenModeConfig newConfig = mConfig.copy();
+                    newConfig.allowCalls = val;
+                    return setZenModeConfig(newConfig);
+                }
+            });
+        } else {
+            general.removePreference(mCalls);
+            mCalls = null;
+        }
 
-        mMessages = (SwitchPreference) root.findPreference(KEY_MESSAGES);
+        mMessages = (SwitchPreference) general.findPreference(KEY_MESSAGES);
         mMessages.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
             @Override
             public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -307,7 +313,9 @@
 
     private void updateControls() {
         mDisableListeners = true;
-        mCalls.setChecked(mConfig.allowCalls);
+        if (mCalls != null) {
+            mCalls.setChecked(mConfig.allowCalls);
+        }
         mMessages.setChecked(mConfig.allowMessages);
         mStarred.setSelectedItem(0);
         mWhen.setSelectedValue(mConfig.sleepMode);
@@ -470,18 +478,27 @@
         new BaseSearchIndexProvider() {
             @Override
             public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
-                final int N = ALL_KEY_TITLES.size();
+                final SparseArray<String> keyTitles = allKeyTitles(context);
+                final int N = keyTitles.size();
                 final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(N);
                 final Resources res = context.getResources();
                 for (int i = 0; i < N; i++) {
                     final SearchIndexableRaw data = new SearchIndexableRaw(context);
-                    data.key = ALL_KEY_TITLES.valueAt(i);
-                    data.title = res.getString(ALL_KEY_TITLES.keyAt(i));
+                    data.key = keyTitles.valueAt(i);
+                    data.title = res.getString(keyTitles.keyAt(i));
                     data.screenTitle = res.getString(R.string.zen_mode_settings_title);
                     result.add(data);
                 }
                 return result;
             }
+
+            public List<String> getNonIndexableKeys(Context context) {
+                final ArrayList<String> rt = new ArrayList<String>();
+                if (!Utils.isVoiceCapable(context)) {
+                    rt.add(KEY_CALLS);
+                }
+                return rt;
+            }
         };
 
     private final class SettingsObserver extends ContentObserver {
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 7b87be2..0c8616d 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -135,7 +135,7 @@
 
         sResMap.put(NotificationSettings.class.getName(),
                 new SearchIndexableResource(RANK_NOTIFICATIONS,
-                        R.xml.notification_settings,
+                        NO_DATA_RES_ID,
                         NotificationSettings.class.getName(),
                         R.drawable.ic_settings_notifications));
 
