diff --git a/res/xml/configure_notification_settings.xml b/res/xml/configure_notification_settings.xml
index 612f5e7..291d9a8 100644
--- a/res/xml/configure_notification_settings.xml
+++ b/res/xml/configure_notification_settings.xml
@@ -28,7 +28,8 @@
     <!-- Notification badging -->
     <SwitchPreference
         android:key="notification_badging"
-        android:title="@string/notification_badging_title"/>
+        android:title="@string/notification_badging_title"
+        settings:controller="com.android.settings.notification.BadgingNotificationPreferenceController"/>
 
     <!-- Pulse notification light -->
     <SwitchPreference
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatSlow.java b/src/com/android/settings/deviceinfo/StorageWizardFormatSlow.java
index 37df2170..f1ac1c2 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatSlow.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatSlow.java
@@ -23,7 +23,9 @@
 import android.text.TextUtils;
 import android.view.View;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 
 public class StorageWizardFormatSlow extends StorageWizardBase {
     private boolean mFormatPrivate;
@@ -55,6 +57,9 @@
 
     @Override
     public void onNavigateBack(View view) {
+        FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                MetricsEvent.ACTION_STORAGE_BENCHMARK_SLOW_ABORT);
+
         final Intent intent = new Intent(this, StorageWizardInit.class);
         startActivity(intent);
         finishAffinity();
@@ -62,6 +67,16 @@
 
     @Override
     public void onNavigateNext(View view) {
+        if (view != null) {
+            // User made an explicit choice to continue when slow
+            FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                    MetricsEvent.ACTION_STORAGE_BENCHMARK_SLOW_CONTINUE);
+        } else {
+            // User made an implicit choice to continue when fast
+            FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                    MetricsEvent.ACTION_STORAGE_BENCHMARK_FAST_CONTINUE);
+        }
+
         final String forgetUuid = getIntent().getStringExtra(EXTRA_FORMAT_FORGET_UUID);
         if (!TextUtils.isEmpty(forgetUuid)) {
             mStorage.forgetVolume(forgetUuid);
diff --git a/src/com/android/settings/deviceinfo/StorageWizardInit.java b/src/com/android/settings/deviceinfo/StorageWizardInit.java
index b271d02..076e606 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardInit.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardInit.java
@@ -25,7 +25,9 @@
 import android.view.View;
 import android.widget.Button;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 
 public class StorageWizardInit extends StorageWizardBase {
     private Button mExternal;
@@ -68,6 +70,12 @@
     }
 
     public void onNavigateExternal(View view) {
+        if (view != null) {
+            // User made an explicit choice for external
+            FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                    MetricsEvent.ACTION_STORAGE_INIT_EXTERNAL);
+        }
+
         if (mVolume != null && mVolume.getType() == VolumeInfo.TYPE_PUBLIC
                 && mVolume.getState() != VolumeInfo.STATE_UNMOUNTABLE) {
             // Remember that user made decision
@@ -85,6 +93,12 @@
     }
 
     public void onNavigateInternal(View view) {
+        if (view != null) {
+            // User made an explicit choice for internal
+            FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                    MetricsEvent.ACTION_STORAGE_INIT_INTERNAL);
+        }
+
         StorageWizardFormatConfirm.showPrivate(this, mDisk.getId());
     }
 }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
index 969a50a..b17defd 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
@@ -31,7 +31,9 @@
 import android.view.View;
 import android.widget.Toast;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockSettingsHelper;
 
 import java.util.Objects;
@@ -80,6 +82,9 @@
 
     @Override
     public void onNavigateBack(View view) {
+        FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                MetricsEvent.ACTION_STORAGE_MIGRATE_LATER);
+
         final Intent intent = new Intent(this, StorageWizardReady.class);
         intent.putExtra(EXTRA_MIGRATE_SKIP, true);
         startActivity(intent);
@@ -127,6 +132,9 @@
             return;
         }
 
+        FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
+                MetricsEvent.ACTION_STORAGE_MIGRATE_NOW);
+
         final Intent intent = new Intent(this, StorageWizardMigrateProgress.class);
         intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
         intent.putExtra(PackageManager.EXTRA_MOVE_ID, moveId);
diff --git a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
index 18efd43..37e3db0 100644
--- a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
@@ -23,11 +23,13 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.TwoStatePreference;
 
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settings.R;
 import com.android.settings.search.DatabaseIndexingUtils;
@@ -39,19 +41,20 @@
 
 import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
 
-public class BadgingNotificationPreferenceController extends AbstractPreferenceController
+public class BadgingNotificationPreferenceController extends TogglePreferenceController
         implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
         LifecycleObserver, OnResume, OnPause {
 
     private static final String TAG = "BadgeNotifPrefContr";
-    private static final String KEY_NOTIFICATION_BADGING = "notification_badging";
-    private static final int ON = 1;
-    private static final int OFF = 0;
+    @VisibleForTesting
+    static final int ON = 1;
+    @VisibleForTesting
+    static final int OFF = 0;
 
     private SettingObserver mSettingObserver;
 
-    public BadgingNotificationPreferenceController(Context context) {
-        super(context);
+    public BadgingNotificationPreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
     }
 
     @Override
@@ -78,28 +81,22 @@
     }
 
     @Override
-    public String getPreferenceKey() {
-        return KEY_NOTIFICATION_BADGING;
-    }
-
-    @Override
-    public boolean isAvailable() {
+    public int getAvailabilityStatus() {
         return mContext.getResources()
-                .getBoolean(com.android.internal.R.bool.config_notificationBadging);
+                .getBoolean(com.android.internal.R.bool.config_notificationBadging)
+                ? AVAILABLE : DISABLED_UNSUPPORTED;
     }
 
     @Override
-    public void updateState(Preference preference) {
-        final boolean checked = Settings.Secure.getInt(mContext.getContentResolver(),
+    public boolean isChecked() {
+        return Settings.Secure.getInt(mContext.getContentResolver(),
                 NOTIFICATION_BADGING, ON) == ON;
-        ((TwoStatePreference) preference).setChecked(checked);
     }
 
     @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        final boolean val = (Boolean) newValue;
+    public boolean setChecked(boolean isChecked) {
         return Settings.Secure.putInt(mContext.getContentResolver(),
-                NOTIFICATION_BADGING, val ? ON : OFF);
+                NOTIFICATION_BADGING, isChecked ? ON : OFF);
     }
 
     class SettingObserver extends ContentObserver {
@@ -134,7 +131,7 @@
     @Override
     public ResultPayload getResultPayload() {
         final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
-                ConfigureNotificationSettings.class.getName(), KEY_NOTIFICATION_BADGING,
+                ConfigureNotificationSettings.class.getName(), getPreferenceKey(),
                 mContext.getString(R.string.configure_notification_settings));
 
         return new InlineSwitchPayload(Settings.Secure.NOTIFICATION_BADGING,
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index 1ca4a4d..4bf5b70 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -93,8 +93,6 @@
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle, Application app, Fragment host) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
-        final BadgingNotificationPreferenceController badgeController =
-                new BadgingNotificationPreferenceController(context);
         final PulseNotificationPreferenceController pulseController =
                 new PulseNotificationPreferenceController(context);
         final LockScreenNotificationPreferenceController lockScreenNotificationController =
@@ -108,7 +106,6 @@
         }
         controllers.add(new RecentNotifyingAppsPreferenceController(
                 context, new NotificationBackend(), app, host));
-        controllers.add(badgeController);
         controllers.add(pulseController);
         controllers.add(lockScreenNotificationController);
         controllers.add(new NotificationRingtonePreferenceController(context) {
diff --git a/src/com/android/settings/notification/ZenCustomRadioButtonPreference.java b/src/com/android/settings/notification/ZenCustomRadioButtonPreference.java
index 6035b49..91472f9 100644
--- a/src/com/android/settings/notification/ZenCustomRadioButtonPreference.java
+++ b/src/com/android/settings/notification/ZenCustomRadioButtonPreference.java
@@ -86,10 +86,13 @@
         }
 
         final View gear = holder.findViewById(android.R.id.widget_frame);
+        final View divider = holder.findViewById(R.id.two_target_divider);
         if (mOnGearClickListener != null) {
+            divider.setVisibility(View.VISIBLE);
             gear.setVisibility(View.VISIBLE);
             gear.setOnClickListener(this);
         } else {
+            divider.setVisibility(View.GONE);
             gear.setVisibility(View.GONE);
             gear.setOnClickListener(null);
         }
diff --git a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
index d852aaa..f999194 100644
--- a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
@@ -17,6 +17,12 @@
 package com.android.settings.notification;
 
 import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.DISABLED_UNSUPPORTED;
+import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
+import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
+
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -54,10 +60,13 @@
     private BadgingNotificationPreferenceController mController;
     private Preference mPreference;
 
+    private static final String KEY_NOTIFICATION_BADGING = "notification_badging";
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mController = new BadgingNotificationPreferenceController(mContext);
+        mController = new BadgingNotificationPreferenceController(mContext,
+                KEY_NOTIFICATION_BADGING);
         mPreference = new Preference(RuntimeEnvironment.application);
         mPreference.setKey(mController.getPreferenceKey());
         when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
@@ -88,9 +97,10 @@
     public void updateState_preferenceSetCheckedWhenSettingIsOn() {
         final TwoStatePreference preference = mock(TwoStatePreference.class);
         final Context context = RuntimeEnvironment.application;
-        Settings.Secure.putInt(context.getContentResolver(), NOTIFICATION_BADGING, 1);
+        Settings.Secure.putInt(context.getContentResolver(), NOTIFICATION_BADGING, ON);
 
-        mController = new BadgingNotificationPreferenceController(context);
+        mController = new BadgingNotificationPreferenceController(context,
+                KEY_NOTIFICATION_BADGING);
         mController.updateState(preference);
 
         verify(preference).setChecked(true);
@@ -100,9 +110,10 @@
     public void updateState_preferenceSetUncheckedWhenSettingIsOff() {
         final TwoStatePreference preference = mock(TwoStatePreference.class);
         final Context context = RuntimeEnvironment.application;
-        Settings.Secure.putInt(context.getContentResolver(), NOTIFICATION_BADGING, 0);
+        Settings.Secure.putInt(context.getContentResolver(), NOTIFICATION_BADGING, OFF);
 
-        mController = new BadgingNotificationPreferenceController(context);
+        mController = new BadgingNotificationPreferenceController(context,
+                KEY_NOTIFICATION_BADGING);
         mController.updateState(preference);
 
         verify(preference).setChecked(false);
@@ -118,11 +129,11 @@
     public void testSetValue_updatesCorrectly() {
         final int newValue = 0;
         ContentResolver resolver = mContext.getContentResolver();
-        Settings.Secure.putInt(resolver, Settings.Secure.NOTIFICATION_BADGING, 1);
+        Settings.Secure.putInt(resolver, Settings.Secure.NOTIFICATION_BADGING, ON);
 
         ((InlinePayload) mController.getResultPayload()).setValue(mContext, newValue);
         final int updatedValue =
-            Settings.Secure.getInt(resolver, Settings.Secure.NOTIFICATION_BADGING, 1);
+            Settings.Secure.getInt(resolver, Settings.Secure.NOTIFICATION_BADGING, ON);
 
         assertThat(updatedValue).isEqualTo(newValue);
     }
@@ -138,4 +149,40 @@
 
         assertThat(newValue).isEqualTo(currentValue);
     }
+
+    @Test
+    public void isChecked_settingIsOff_shouldReturnFalse() {
+        Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BADGING, OFF);
+
+        assertThat(mController.isChecked()).isFalse();
+    }
+
+    @Test
+    public void isChecked_settingIsOn_shouldReturnTrue() {
+        Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BADGING, ON);
+
+        assertThat(mController.isChecked()).isTrue();
+    }
+
+    @Test
+    public void setChecked_setFalse_disablesSetting() {
+        Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BADGING, ON);
+
+        mController.setChecked(false);
+        int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
+                NOTIFICATION_BADGING, -1);
+
+        assertThat(updatedValue).isEqualTo(OFF);
+    }
+
+    @Test
+    public void setChecked_setTrue_enablesSetting() {
+        Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BADGING, OFF);
+
+        mController.setChecked(true);
+        int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
+                NOTIFICATION_BADGING, -1);
+
+        assertThat(updatedValue).isEqualTo(ON);
+    }
 }
