diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5a6472f..8fad8dc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -466,7 +466,7 @@
     <string name="preferences_general_title">Calendar view setting</string>
     <!-- This is the title of a section in the Settings screen for settings
          related to reminders for calendar events -->
-    <string name="preferences_reminder_title">Reminder settings</string>
+    <string name="preferences_reminder_title">Notifications \u0026 reminders</string>
     <!-- Settings check box label to hide events that the user has declined to attend -->
     <string name="preferences_hide_declined_title">Hide declined events</string>
     <!-- Settings week start label to start week on specific day-->
@@ -485,8 +485,10 @@
     <string name="preferences_alerts_title">Notifications</string>
     <!-- Settings dialog label that specifies when the phone should vibrate -->
     <string name="preferences_alerts_vibrateWhen_title">Vibrate</string>
+    <!-- The old value for enabling vibration. used only for migrating -->
+    <string translatable="false" name="prefDefault_alerts_vibrate_true">always</string>
     <!-- Title of ringtone selector dialog -->
-    <string name="preferences_alerts_ringtone_title">Choose ringtone</string>
+    <string name="preferences_alerts_ringtone_title">Sound</string>
     <!-- Title of check box label to enable or disable pop-up notifications -->
     <string name="preferences_alerts_popup_title">Pop-up notification</string>
     <!-- List item label for setting the default number of reminder minutes -->
@@ -513,33 +515,6 @@
     <!-- Build version of the application -->
     <string name="preferences_build_version">Build version</string>
 
-    <!-- The vibrate notification modes -->
-    <string-array name="prefEntries_alerts_vibrateWhen">
-        <!-- Always -->
-        <item>Always</item>
-        <!-- Only when the phone is in Silent mode -->
-        <item>Only when silent</item>
-        <!-- Never -->
-        <item>Never</item>
-    </string-array>
-
-    <!-- The default vibrateWhen value, when none is set -->
-    <string translatable="false" name="prefDefault_alerts_vibrateWhen">never</string>
-    <!-- The value to use then migrating from old versions for a true vibrate setting -->
-    <string translatable="false" name="prefDefault_alerts_vibrate_true">always</string>
-    <!-- The value to use then migrating from old versions for a false vibrate setting -->
-    <string translatable="false" name="prefDefault_alerts_vibrate_false">never</string>
-
-    <!-- The vibrateWhen values -->
-    <string-array translatable="false" name="prefValues_alerts_vibrateWhen">
-        <item>always</item>
-        <item>silent</item>
-        <item>never</item>
-    </string-array>
-
-    <!-- Dialog title for the Vibrate dialog -->
-    <string name="prefDialogTitle_vibrateWhen">Vibrate</string>
-
     <!-- Widget -->
     <skip/>
     <!-- Title for calendar gadget when displayed in list of all other gadgets -->
diff --git a/res/xml/general_preferences.xml b/res/xml/general_preferences.xml
index 0a2c14c..674d044 100644
--- a/res/xml/general_preferences.xml
+++ b/res/xml/general_preferences.xml
@@ -64,14 +64,11 @@
             android:ringtoneType="notification"
             android:defaultValue="content://settings/system/notification_sound" />
 
-        <ListPreference
+        <CheckBoxPreference
             android:layout="?android:attr/preferenceLayoutChild"
-            android:key="preferences_alerts_vibrateWhen"
+            android:key="preferences_alerts_vibrate"
             android:title="@string/preferences_alerts_vibrateWhen_title"
-            android:entries="@array/prefEntries_alerts_vibrateWhen"
-            android:entryValues="@array/prefValues_alerts_vibrateWhen"
-            android:defaultValue="@string/prefDefault_alerts_vibrateWhen"
-            android:dialogTitle="@string/prefDialogTitle_vibrateWhen" />
+            android:defaultValue="false" />
 
         <CheckBoxPreference
             android:layout="?android:attr/preferenceLayoutChild"
diff --git a/src/com/android/calendar/GeneralPreferences.java b/src/com/android/calendar/GeneralPreferences.java
index abaa2b6..d98d3e6 100644
--- a/src/com/android/calendar/GeneralPreferences.java
+++ b/src/com/android/calendar/GeneralPreferences.java
@@ -22,6 +22,9 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
@@ -59,7 +62,6 @@
     public static final String KEY_ALERTS_CATEGORY = "preferences_alerts_category";
     public static final String KEY_ALERTS = "preferences_alerts";
     public static final String KEY_ALERTS_VIBRATE = "preferences_alerts_vibrate";
-    public static final String KEY_ALERTS_VIBRATE_WHEN = "preferences_alerts_vibrateWhen";
     public static final String KEY_ALERTS_RINGTONE = "preferences_alerts_ringtone";
     public static final String KEY_ALERTS_POPUP = "preferences_alerts_popup";
 
@@ -102,7 +104,7 @@
     public static final boolean DEFAULT_SHOW_WEEK_NUM = false;
 
     CheckBoxPreference mAlert;
-    ListPreference mVibrateWhen;
+    CheckBoxPreference mVibrate;
     RingtonePreference mRingtone;
     CheckBoxPreference mPopup;
     CheckBoxPreference mUseHomeTZ;
@@ -141,17 +143,21 @@
 
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
         mAlert = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS);
-        mVibrateWhen = (ListPreference) preferenceScreen.findPreference(KEY_ALERTS_VIBRATE_WHEN);
+        mVibrate = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_VIBRATE);
         Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
         if (vibrator == null || !vibrator.hasVibrator()) {
             PreferenceCategory mAlertGroup = (PreferenceCategory) preferenceScreen
                     .findPreference(KEY_ALERTS_CATEGORY);
-            mAlertGroup.removePreference(mVibrateWhen);
-        } else {
-            mVibrateWhen.setSummary(mVibrateWhen.getEntry());
+            mAlertGroup.removePreference(mVibrate);
         }
 
         mRingtone = (RingtonePreference) preferenceScreen.findPreference(KEY_ALERTS_RINGTONE);
+        String ringToneUri = Utils.getSharedPreference(activity, KEY_ALERTS_RINGTONE, "");
+        if (!TextUtils.isEmpty(ringToneUri)) {
+            String ringtone = getRingtoneTitleFromUri(getActivity(), ringToneUri);
+            mRingtone.setSummary(ringtone == null ? "" : ringtone);
+        }
+
         mPopup = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_POPUP);
         mUseHomeTZ = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HOME_TZ_ENABLED);
         mHideDeclined = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HIDE_DECLINED);
@@ -181,8 +187,8 @@
     }
 
     @Override
-    public void onResume() {
-        super.onResume();
+    public void onStart() {
+        super.onStart();
         getPreferenceScreen().getSharedPreferences()
                 .registerOnSharedPreferenceChangeListener(this);
         setPreferenceListeners(this);
@@ -199,16 +205,15 @@
         mDefaultReminder.setOnPreferenceChangeListener(listener);
         mRingtone.setOnPreferenceChangeListener(listener);
         mHideDeclined.setOnPreferenceChangeListener(listener);
-        mVibrateWhen.setOnPreferenceChangeListener(listener);
-
+        mVibrate.setOnPreferenceChangeListener(listener);
     }
 
     @Override
-    public void onPause() {
-        super.onPause();
+    public void onStop() {
         getPreferenceScreen().getSharedPreferences()
                 .unregisterOnSharedPreferenceChangeListener(this);
         setPreferenceListeners(null);
+        super.onStop();
     }
 
     @Override
@@ -266,17 +271,32 @@
             mDefaultReminder.setValue((String) newValue);
             mDefaultReminder.setSummary(mDefaultReminder.getEntry());
         } else if (preference == mRingtone) {
-            // TODO update this after b/3417832 is fixed
+            if (newValue instanceof String) {
+                String ringtone = getRingtoneTitleFromUri(getActivity(), (String) newValue);
+                mRingtone.setSummary(ringtone == null ? "" : ringtone);
+            }
             return true;
-        } else if (preference == mVibrateWhen) {
-            mVibrateWhen.setValue((String)newValue);
-            mVibrateWhen.setSummary(mVibrateWhen.getEntry());
+        } else if (preference == mVibrate) {
+            mVibrate.setChecked((Boolean) newValue);
+            return true;
         } else {
             return true;
         }
         return false;
     }
 
+    public String getRingtoneTitleFromUri(Context context, String uri) {
+        if (TextUtils.isEmpty(uri)) {
+            return null;
+        }
+
+        Ringtone ring = RingtoneManager.getRingtone(getActivity(), Uri.parse(uri));
+        if (ring != null) {
+            return ring.getTitle(context);
+        }
+        return null;
+    }
+
     /**
      * If necessary, upgrades previous versions of preferences to the current
      * set of keys and values.
@@ -284,13 +304,9 @@
      */
     private void migrateOldPreferences(SharedPreferences prefs) {
         // If needed, migrate vibration setting from a previous version
-        if (!prefs.contains(KEY_ALERTS_VIBRATE_WHEN) &&
-                prefs.contains(KEY_ALERTS_VIBRATE)) {
-            int stringId = prefs.getBoolean(KEY_ALERTS_VIBRATE, false) ?
-                    R.string.prefDefault_alerts_vibrate_true :
-                    R.string.prefDefault_alerts_vibrate_false;
-            mVibrateWhen.setValue(getActivity().getString(stringId));
-        }
+
+        mVibrate.setChecked(Utils.getDefaultVibrate(getActivity(), prefs));
+
         // If needed, migrate the old alerts type settin
         if (!prefs.contains(KEY_ALERTS) && prefs.contains(KEY_ALERTS_TYPE)) {
             String type = prefs.getString(KEY_ALERTS_TYPE, ALERT_TYPE_STATUS_BAR);
@@ -319,13 +335,11 @@
      */
     private void updateChildPreferences() {
         if (mAlert.isChecked()) {
-            mVibrateWhen.setEnabled(true);
+            mVibrate.setEnabled(true);
             mRingtone.setEnabled(true);
             mPopup.setEnabled(true);
         } else {
-            mVibrateWhen.setValue(
-                    getActivity().getString(R.string.prefDefault_alerts_vibrate_false));
-            mVibrateWhen.setEnabled(false);
+            mVibrate.setEnabled(false);
             mRingtone.setEnabled(false);
             mPopup.setEnabled(false);
         }
diff --git a/src/com/android/calendar/Utils.java b/src/com/android/calendar/Utils.java
index 3afcfd4..e21a8f3 100644
--- a/src/com/android/calendar/Utils.java
+++ b/src/com/android/calendar/Utils.java
@@ -116,6 +116,8 @@
 
     public static final String KEY_QUICK_RESPONSES = "preferences_quick_responses";
 
+    public static final String KEY_ALERTS_VIBRATE_WHEN = "preferences_alerts_vibrateWhen";
+
     public static final String APPWIDGET_DATA_TYPE = "vnd.android.data/update";
 
     static final String MACHINE_GENERATED_ADDRESS = "calendar.google.com";
@@ -224,6 +226,26 @@
         return mTZUtils.formatDateRange(context, startMillis, endMillis, flags);
     }
 
+    public static boolean getDefaultVibrate(Context context, SharedPreferences prefs) {
+        boolean vibrate;
+        if (prefs.contains(KEY_ALERTS_VIBRATE_WHEN)) {
+            // Migrate setting to new 4.2 behavior
+            //
+            // silent and never -> off
+            // always -> on
+            String vibrateWhen = prefs.getString(KEY_ALERTS_VIBRATE_WHEN, null);
+            vibrate = vibrateWhen != null && vibrateWhen.equals(context
+                    .getString(R.string.prefDefault_alerts_vibrate_true));
+            prefs.edit().remove(KEY_ALERTS_VIBRATE_WHEN).commit();
+            Log.d(TAG, "Migrating KEY_ALERTS_VIBRATE_WHEN(" + vibrateWhen
+                    + ") to KEY_ALERTS_VIBRATE = " + vibrate);
+        } else {
+            vibrate = prefs.getBoolean(GeneralPreferences.KEY_ALERTS_VIBRATE,
+                    false);
+        }
+        return vibrate;
+    }
+
     public static String[] getSharedPreference(Context context, String key, String[] defaultValue) {
         SharedPreferences prefs = GeneralPreferences.getSharedPreferences(context);
         Set<String> ss = prefs.getStringSet(key, null);
diff --git a/src/com/android/calendar/alerts/AlertService.java b/src/com/android/calendar/alerts/AlertService.java
index 9811dab..94ffd9a 100644
--- a/src/com/android/calendar/alerts/AlertService.java
+++ b/src/com/android/calendar/alerts/AlertService.java
@@ -26,7 +26,6 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.database.Cursor;
-import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -44,7 +43,6 @@
 import android.util.Log;
 
 import com.android.calendar.GeneralPreferences;
-import com.android.calendar.R;
 import com.android.calendar.Utils;
 
 import java.util.ArrayList;
@@ -506,7 +504,6 @@
                 // Use app local storage to keep track of fired alerts to fix problem of multiple
                 // installed calendar apps potentially causing missed alarms.
                 boolean newAlertOverride = false;
-                String alertIdStr = Long.toString(alertId);
                 if (AlertUtils.BYPASS_DB && ((currentTime - alarmTime) / MINUTE_MS < 1)) {
                     // To avoid re-firing alerts, only fire if alarmTime is very recent.  Otherwise
                     // we can get refires for non-dismissed alerts after app installation, or if the
@@ -588,18 +585,6 @@
                 }
 
                 // TODO: Prefer accepted events in case of ties.
-                int newStatus;
-                switch (status) {
-                    case Attendees.ATTENDEE_STATUS_ACCEPTED:
-                        newStatus = 2;
-                        break;
-                    case Attendees.ATTENDEE_STATUS_TENTATIVE:
-                        newStatus = 1;
-                        break;
-                    default:
-                        newStatus = 0;
-                }
-
                 NotificationInfo newInfo = new NotificationInfo(eventName, location,
                         description, beginTime, endTime, eventId, allDay, newAlert);
 
@@ -831,40 +816,7 @@
 
         private boolean getDefaultVibrate() {
             if (defaultVibrate < 0) {
-                // Find out the circumstances under which to vibrate.
-                // Migrate from pre-Froyo boolean setting if necessary.
-                String vibrateWhen; // "always" or "silent" or "never"
-                if(prefs.contains(GeneralPreferences.KEY_ALERTS_VIBRATE_WHEN))
-                {
-                    // Look up Froyo setting
-                    vibrateWhen =
-                        prefs.getString(GeneralPreferences.KEY_ALERTS_VIBRATE_WHEN, null);
-                } else if(prefs.contains(GeneralPreferences.KEY_ALERTS_VIBRATE)) {
-                    // No Froyo setting. Migrate pre-Froyo setting to new Froyo-defined value.
-                    boolean vibrate =
-                        prefs.getBoolean(GeneralPreferences.KEY_ALERTS_VIBRATE, false);
-                    vibrateWhen = vibrate ?
-                        context.getString(R.string.prefDefault_alerts_vibrate_true) :
-                        context.getString(R.string.prefDefault_alerts_vibrate_false);
-                } else {
-                    // No setting. Use Froyo-defined default.
-                    vibrateWhen = context.getString(R.string.prefDefault_alerts_vibrateWhen);
-                }
-
-                if (vibrateWhen.equals("always")) {
-                    defaultVibrate = 1;
-                } else if (!vibrateWhen.equals("silent")) {
-                    defaultVibrate = 0;
-                } else {
-                    // Settings are to vibrate when silent.  Return true if it is now silent.
-                    AudioManager audioManager =
-                        (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
-                    if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE) {
-                        defaultVibrate = 1;
-                    } else {
-                        defaultVibrate = 0;
-                    }
-                }
+                defaultVibrate = Utils.getDefaultVibrate(context, prefs) ? 1 : 0;
             }
             return defaultVibrate == 1;
         }
diff --git a/tests/src/com/android/calendar/alerts/AlertServiceTest.java b/tests/src/com/android/calendar/alerts/AlertServiceTest.java
index ef47286..75a14b7 100644
--- a/tests/src/com/android/calendar/alerts/AlertServiceTest.java
+++ b/tests/src/com/android/calendar/alerts/AlertServiceTest.java
@@ -47,8 +47,7 @@
 
     class MockSharedPreferences implements SharedPreferences {
 
-        /* "always", "silent", depends on ringer mode */
-        private String mVibrateWhen;
+        private Boolean mVibrate;
         private String mRingtone;
         private Boolean mPopup;
 
@@ -66,14 +65,14 @@
         }
 
         void init() {
-            mVibrateWhen = "always";
+            mVibrate = true;
             mRingtone = "/some/cool/ringtone";
             mPopup = true;
         }
 
         @Override
         public boolean contains(String key) {
-            if (GeneralPreferences.KEY_ALERTS_VIBRATE_WHEN.equals(key)) {
+            if (GeneralPreferences.KEY_ALERTS_VIBRATE.equals(key)) {
                 return true;
             }
             return false;
@@ -81,6 +80,17 @@
 
         @Override
         public boolean getBoolean(String key, boolean defValue) {
+            if (GeneralPreferences.KEY_ALERTS_VIBRATE.equals(key)) {
+                if (mVibrate == null) {
+                    Assert.fail(GeneralPreferences.KEY_ALERTS_VIBRATE
+                            + " fetched more than once.");
+                }
+                boolean val = mVibrate;
+                if (mStrict) {
+                    mVibrate = null;
+                }
+                return val;
+            }
             if (GeneralPreferences.KEY_ALERTS_POPUP.equals(key)) {
                 if (mPopup == null) {
                     Assert.fail(GeneralPreferences.KEY_ALERTS_POPUP + " fetched more than once.");
@@ -96,17 +106,6 @@
 
         @Override
         public String getString(String key, String defValue) {
-            if (GeneralPreferences.KEY_ALERTS_VIBRATE_WHEN.equals(key)) {
-                if (mVibrateWhen == null) {
-                    Assert.fail(GeneralPreferences.KEY_ALERTS_VIBRATE_WHEN
-                            + " fetched more than once.");
-                }
-                String val = mVibrateWhen;
-                if (mStrict) {
-                    mVibrateWhen = null;
-                }
-                return val;
-            }
             if (GeneralPreferences.KEY_ALERTS_RINGTONE.equals(key)) {
                 if (mRingtone == null) {
                     Assert.fail(GeneralPreferences.KEY_ALERTS_RINGTONE
@@ -377,6 +376,7 @@
             assertNull("Unexpected cancel for id " + id, mExpectedNotifications[id]);
         }
 
+        @Override
         public void notify(int id, NotificationWrapper nw) {
             assertTrue("id out of bound: " + id, 0 <= id);
             assertTrue("id out of bound: " + id, id < mExpectedNotifications.length);
