diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 58e050b..4f9b33b 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -192,8 +192,8 @@
         for (int userIndex = 0; userIndex < userCount; ++userIndex) {
             final UserInfo userInfo = allUsers.get(userIndex);
             if (isProfileOf(mCurrentUser, userInfo)) {
-                PreferenceCategory details = addCategory(screen,
-                        showHeaders ? userInfo.name : null);
+                final PreferenceGroup details = showHeaders ?
+                        addCategory(screen, userInfo.name) : screen;
                 addDetailItems(details, showShared, userInfo.id);
                 ++addedUserCount;
             }
@@ -201,7 +201,7 @@
 
         // Add rest of users
         if (userCount - addedUserCount > 0) {
-            PreferenceCategory otherUsers = addCategory(screen,
+            PreferenceGroup otherUsers = addCategory(screen,
                     getText(R.string.storage_other_users));
             for (int userIndex = 0; userIndex < userCount; ++userIndex) {
                 final UserInfo userInfo = allUsers.get(userIndex);
@@ -253,7 +253,7 @@
         return category;
     }
 
-    private void addDetailItems(PreferenceCategory category, boolean showShared, int userId) {
+    private void addDetailItems(PreferenceGroup category, boolean showShared, int userId) {
         final int[] itemsToAdd = (showShared ? ITEMS_SHOW_SHARED : ITEMS_NO_SHOW_SHARED);
         for (int i = 0; i < itemsToAdd.length; ++i) {
             addItem(category, itemsToAdd[i], null, userId);
@@ -719,7 +719,12 @@
         public void onRemoveCompleted(final String packageName, final boolean succeeded) {
             synchronized (this) {
                 if (--mRemaining == 0) {
-                    mTarget.update();
+                    mTarget.getActivity().runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            mTarget.update();
+                        }
+                    });
                 }
             }
         }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardBase.java b/src/com/android/settings/deviceinfo/StorageWizardBase.java
index e508cd1..a32109c 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardBase.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardBase.java
@@ -176,6 +176,10 @@
         }
     }
 
+    protected void setKeepScreenOn(boolean keepScreenOn) {
+        getSetupWizardLayout().setKeepScreenOn(keepScreenOn);
+    }
+
     public void onNavigateNext() {
         throw new UnsupportedOperationException();
     }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index a18bca3..1a5a70c 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -27,7 +27,6 @@
 import android.content.pm.IPackageMoveObserver;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.RemoteException;
 import android.os.storage.DiskInfo;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
@@ -55,6 +54,7 @@
             return;
         }
         setContentView(R.layout.storage_wizard_progress);
+        setKeepScreenOn(true);
 
         mFormatPrivate = getIntent().getBooleanExtra(
                 StorageWizardFormatConfirm.EXTRA_FORMAT_PRIVATE, false);
@@ -144,13 +144,19 @@
                 return;
             }
 
-            final float pct = (float) mInternalBench / (float) mPrivateBench;
-            Log.d(TAG, "New volume is " + pct + "x the speed of internal");
+            if (activity.mFormatPrivate) {
+                final float pct = (float) mInternalBench / (float) mPrivateBench;
+                Log.d(TAG, "New volume is " + pct + "x the speed of internal");
 
-            // TODO: refine this warning threshold
-            if (mPrivateBench > 2000000000) {
-                final SlowWarningFragment dialog = new SlowWarningFragment();
-                dialog.show(activity.getFragmentManager(), TAG_SLOW_WARNING);
+                // To help set user expectations around device performance, we
+                // warn if the adopted media is 0.25x the speed of internal
+                // storage or slower.
+                if (Float.isNaN(pct) || pct < 0.25) {
+                    final SlowWarningFragment dialog = new SlowWarningFragment();
+                    dialog.show(activity.getFragmentManager(), TAG_SLOW_WARNING);
+                } else {
+                    activity.onFormatFinished();
+                }
             } else {
                 activity.onFormatFinished();
             }
