diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 36e1904..ab5ee91 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -518,7 +518,7 @@
      * entire activity.
      *
      * @param context The context.
-     * @param fragmentName The name of the fragment to display.
+     * @param fragmentClass The class name of the fragment to display.
      * @param args Optional arguments to supply to the fragment.
      * @param resultTo Option fragment that should receive the result of
      * the activity launch.
@@ -526,9 +526,9 @@
      * code in which to report the result.
      * @param title String to display for the title of this set of preferences.
      */
-    public static void startWithFragment(Context context, String fragmentName, Bundle args,
+    public static void startWithFragment(Context context, String fragmentClass, Bundle args,
             Fragment resultTo, int resultRequestCode, CharSequence title) {
-        Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, title);
+        Intent intent = onBuildStartFragmentIntent(context, fragmentClass, args, title);
         if (resultTo == null) {
             context.startActivity(intent);
         } else {
@@ -542,17 +542,17 @@
      * appropriate arguments to display the fragment.
      *
      * @param context The Context.
-     * @param fragmentName The name of the fragment to display.
+     * @param fragmentClass The class name of the fragment to display.
      * @param args Optional arguments to supply to the fragment.
      * @param title Optional title to show for this item.
      * @return Returns an Intent that can be launched to display the given
      * fragment.
      */
-    public static Intent onBuildStartFragmentIntent(Context context, String fragmentName,
+    public static Intent onBuildStartFragmentIntent(Context context, String fragmentClass,
             Bundle args, CharSequence title) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.setClass(context, SubSettings.class);
-        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
+        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentClass);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
         return intent;
diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java
index deef8fa..e7ae462 100644
--- a/src/com/android/settings/wifi/WifiPickerActivity.java
+++ b/src/com/android/settings/wifi/WifiPickerActivity.java
@@ -16,6 +16,7 @@
 package com.android.settings.wifi;
 
 import com.android.settings.ButtonBarHandler;
+import com.android.settings.SettingsActivity;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
 
 import android.app.Fragment;
@@ -24,7 +25,7 @@
 import android.preference.PreferenceActivity;
 import android.widget.Button;
 
-public class WifiPickerActivity extends PreferenceActivity implements ButtonBarHandler {
+public class WifiPickerActivity extends SettingsActivity implements ButtonBarHandler {
 
     // Same as what are in PreferenceActivity as private.
     private static final String EXTRA_PREFS_SHOW_BUTTON_BAR = "extra_prefs_show_button_bar";
@@ -39,7 +40,6 @@
         if (!modIntent.hasExtra(EXTRA_SHOW_FRAGMENT)) {
             modIntent.putExtra(EXTRA_SHOW_FRAGMENT, WifiSettings.class.getName());
         }
-        modIntent.putExtra(EXTRA_NO_HEADERS, true);
         return modIntent;
     }
 
@@ -52,18 +52,14 @@
     }
 
     /**
-     * Almost dead copy of
-     * {@link PreferenceActivity#startWithFragment(String, Bundle, Fragment, int)}, except this has
-     * additional codes for button bar handling.
+     * Add additional codes for button bar handling.
      */
-    @Override
-    public void startWithFragment(String fragmentName, Bundle args,
-            Fragment resultTo, int resultRequestCode) {
+    public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
+        CharSequence titleText, Fragment resultTo, int resultRequestCode) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.setClass(this, getClass());
-        intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentName);
+        intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentClass);
         intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
-        intent.putExtra(EXTRA_NO_HEADERS, true);
 
         final Intent orgIntent = getIntent();
         if (orgIntent.hasExtra(EXTRA_PREFS_SHOW_BUTTON_BAR)) {
@@ -87,11 +83,8 @@
                     orgIntent.getBooleanExtra(EXTRA_WIFI_SHOW_MENUS, true));
         }
 
-        if (resultTo == null) {
-            startActivity(intent);
-        } else {
-            resultTo.startActivityForResult(intent, resultRequestCode);
-        }
+        super.startPreferencePanel(fragmentClass, args, titleRes, titleText, resultTo,
+                resultRequestCode);
     }
 
     @Override
