diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 41ff87f..3c771f5 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -64,49 +64,11 @@
     private Button mNextButton;
 
     @Override
-    public void onResume() {
-        super.onResume();
-
-        final Fragment f = getTargetFragment();
-        final int requestCode = getTargetRequestCode();
-
-        // TargetFragment becomes invalid when this object is resumed. Notify it to
-        // FragmentManager. Without this code, FragmentManager wrongly take the TargetFragment
-        // as live, and throws IllegalStateException.
-        setTargetFragment(null, -1);
-
-        if (f != null && (f instanceof SettingsPreferenceFragment)) {
-            final SettingsPreferenceFragment spf = (SettingsPreferenceFragment)f;
-            final int resultCode = spf.getResultCode();
-            final Intent resultData = spf.getResultData();
-            onActivityResult(requestCode, resultCode, resultData);
-        }
-    }
-
-    @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         setupButtonBar();
     }
 
-    public final void setResult(int resultCode) {
-        mResultCode = resultCode;
-        mResultData = null;
-    }
-
-    public final void setResult(int resultCode, Intent data) {
-        mResultCode = resultCode;
-        mResultData = data;
-    }
-
-    public final int getResultCode() {
-        return mResultCode;
-    }
-
-    public final Intent getResultData() {
-        return mResultData;
-    }
-
     /*
      * The name is intentionally made different from Activity#finish(), so that
      * users won't misunderstand its meaning.
@@ -196,9 +158,8 @@
             Fragment caller, String fragmentClass, int requestCode, Bundle extras) {
         if (getActivity() instanceof PreferenceActivity) {
             PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity();
-            Fragment f = Fragment.instantiate(getActivity(), fragmentClass, extras);
-            caller.setTargetFragment(f, requestCode);
-            preferenceActivity.switchToHeader(fragmentClass, extras);
+            preferenceActivity.startPreferencePanel(fragmentClass, extras, 0, null, caller,
+                    requestCode);
             return true;
         } else {
             Log.w(TAG, "Parent isn't PreferenceActivity, thus there's no way to launch the "
diff --git a/src/com/android/settings/vpn/VpnEditor.java b/src/com/android/settings/vpn/VpnEditor.java
index 3ab0b90..1b3bdb5 100644
--- a/src/com/android/settings/vpn/VpnEditor.java
+++ b/src/com/android/settings/vpn/VpnEditor.java
@@ -32,8 +32,8 @@
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.preference.PreferenceActivity;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -109,7 +109,11 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case MENU_SAVE:
-                if (validateAndSetResult()) finishFragment();
+                Intent resultIntent = validateAndGetResult();
+                if (resultIntent != null) {
+                    ((PreferenceActivity) getActivity()).finishPreferencePanel(
+                            this, Activity.RESULT_OK, resultIntent);
+                }
                 return true;
 
             case MENU_CANCEL:
@@ -152,22 +156,24 @@
      * Checks the validity of the inputs and set the profile as result if valid.
      * @return true if the result is successfully set
      */
-    private boolean validateAndSetResult() {
+    private Intent validateAndGetResult() {
         String errorMsg = mProfileEditor.validate();
 
         if (errorMsg != null) {
             Util.showErrorMessage(getActivity(), errorMsg);
-            return false;
+            return null;
         }
 
-        if (profileChanged()) setResult(getProfile());
-        return true;
+        if (profileChanged()) {
+            return getResult(getProfile());
+        }
+        return null;
     }
 
-    private void setResult(VpnProfile p) {
+    private Intent getResult(VpnProfile p) {
         Intent intent = new Intent(getActivity(), VpnSettings.class);
         intent.putExtra(VpnSettings.KEY_VPN_PROFILE, (Parcelable) p);
-        setResult(Activity.RESULT_OK, intent);
+        return intent;
     }
 
     private VpnProfileEditor getEditor(VpnProfile p) {
diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java
index e9a4c3d..0b77930 100644
--- a/src/com/android/settings/vpn/VpnSettings.java
+++ b/src/com/android/settings/vpn/VpnSettings.java
@@ -22,7 +22,6 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.Fragment;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -39,19 +38,21 @@
 import android.net.vpn.VpnType;
 import android.os.Bundle;
 import android.os.ConditionVariable;
+import android.os.Handler;
 import android.os.IBinder;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceScreen;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.security.Credentials;
 import android.security.KeyStore;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ContextMenu.ContextMenuInfo;
 import android.widget.AdapterView.AdapterContextMenuInfo;
 
 import java.io.File;
@@ -72,6 +73,9 @@
  */
 public class VpnSettings extends SettingsPreferenceFragment
         implements DialogInterface.OnClickListener {
+
+    private static final boolean DEBUG = false;
+
     // Key to the field exchanged for profile editing.
     static final String KEY_VPN_PROFILE = "vpn_profile";
 
@@ -87,7 +91,7 @@
     private static final String PROFILE_OBJ_FILE = ".pobj";
 
     private static final int REQUEST_ADD_OR_EDIT_PROFILE = 1;
-    private static final int REQUEST_SELECT_VPN_TYPE = 2;
+    static final int REQUEST_SELECT_VPN_TYPE = 2;
 
     private static final int CONTEXT_MENU_CONNECT_ID = ContextMenu.FIRST + 0;
     private static final int CONTEXT_MENU_DISCONNECT_ID = ContextMenu.FIRST + 1;
@@ -134,6 +138,8 @@
 
     private StatusChecker mStatusChecker = new StatusChecker();
 
+    private Handler mHandler = new Handler();
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -171,7 +177,8 @@
     @Override
     public void onResume() {
         super.onResume();
-
+        if (DEBUG)
+            Log.d(TAG, "onResume");
         if ((mUnlockAction != null) && isKeyStoreUnlocked()) {
             Runnable action = mUnlockAction;
             mUnlockAction = null;
@@ -282,7 +289,7 @@
                 .setPositiveButton(R.string.vpn_yes_button,
                         new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int w) {
-                                startVpnEditor(mActiveProfile);
+                                startVpnEditor(mActiveProfile, false);
                             }
                         })
                 .create();
@@ -295,7 +302,7 @@
                             public void onClick(DialogInterface dialog, int w) {
                                 VpnProfile p = mActiveProfile;
                                 onIdle();
-                                startVpnEditor(p);
+                                startVpnEditor(p, false);
                             }
                         });
     }
@@ -362,7 +369,7 @@
             return true;
 
         case CONTEXT_MENU_EDIT_ID:
-            startVpnEditor(p);
+                startVpnEditor(p, false);
             return true;
 
         case CONTEXT_MENU_DELETE_ID:
@@ -376,14 +383,21 @@
     @Override
     public void onActivityResult(final int requestCode, final int resultCode,
             final Intent data) {
+
+        if (DEBUG) Log.d(TAG, "onActivityResult , result = " + resultCode + ", data = " + data);
         if ((resultCode == Activity.RESULT_CANCELED) || (data == null)) {
             Log.d(TAG, "no result returned by editor");
             return;
         }
 
         if (requestCode == REQUEST_SELECT_VPN_TYPE) {
-            String typeName = data.getStringExtra(KEY_VPN_TYPE);
-            startVpnEditor(createVpnProfile(typeName));
+            final String typeName = data.getStringExtra(KEY_VPN_TYPE);
+            mHandler.post(new Runnable() {
+
+                public void run() {
+                    startVpnEditor(createVpnProfile(typeName), true);
+                }
+            });
         } else if (requestCode == REQUEST_ADD_OR_EDIT_PROFILE) {
             VpnProfile p = data.getParcelableExtra(KEY_VPN_PROFILE);
             if (p == null) {
@@ -400,7 +414,7 @@
                         p.getName()),
                         new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int w) {
-                                startVpnEditor(profile);
+                                startVpnEditor(profile, false);
                             }
                         });
                 return;
@@ -431,7 +445,7 @@
                 Util.showErrorMessage(activity, e + ": " + e.getMessage(),
                         new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int w) {
-                                startVpnEditor(profile);
+                                startVpnEditor(profile, false);
                             }
                         });
             }
@@ -615,8 +629,9 @@
     }
 
     private void startVpnTypeSelection() {
-        startFragment(this, VpnTypeSelection.class.getCanonicalName(),
-                REQUEST_SELECT_VPN_TYPE, null);
+        ((PreferenceActivity)getActivity()).startPreferencePanel(
+                VpnTypeSelection.class.getCanonicalName(), null, R.string.vpn_type_title, null,
+                this, REQUEST_SELECT_VPN_TYPE);
     }
 
     private boolean isKeyStoreUnlocked() {
@@ -666,11 +681,14 @@
         return false;
     }
 
-    private void startVpnEditor(final VpnProfile profile) {
+    private void startVpnEditor(final VpnProfile profile, boolean add) {
         Bundle args = new Bundle();
         args.putParcelable(KEY_VPN_PROFILE, profile);
-        startFragment(this, VpnEditor.class.getCanonicalName(),
-                REQUEST_ADD_OR_EDIT_PROFILE, args);
+        // TODO: Show different titles for add and edit.
+        ((PreferenceActivity)getActivity()).startPreferencePanel(
+                VpnEditor.class.getCanonicalName(), args,
+                add ? R.string.vpn_details_title : R.string.vpn_details_title, null,
+                this, REQUEST_ADD_OR_EDIT_PROFILE);
     }
 
     private synchronized void connect(final VpnProfile p) {
diff --git a/src/com/android/settings/vpn/VpnTypeSelection.java b/src/com/android/settings/vpn/VpnTypeSelection.java
index 5990ac0..45e33b9 100644
--- a/src/com/android/settings/vpn/VpnTypeSelection.java
+++ b/src/com/android/settings/vpn/VpnTypeSelection.java
@@ -25,6 +25,7 @@
 import android.net.vpn.VpnType;
 import android.os.Bundle;
 import android.preference.Preference;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 
 import java.util.HashMap;
@@ -46,8 +47,9 @@
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen ps, Preference pref) {
-        setResult(mTypeMap.get(pref.getTitle().toString()));
-        finishFragment();
+        ((PreferenceActivity)getActivity())
+                .finishPreferencePanel(this, Activity.RESULT_OK,
+                        getResultIntent(mTypeMap.get(pref.getTitle().toString())));
         return true;
     }
 
@@ -67,9 +69,9 @@
         }
     }
 
-    private void setResult(VpnType type) {
+    private Intent getResultIntent(VpnType type) {
         Intent intent = new Intent(getActivity(), VpnSettings.class);
         intent.putExtra(VpnSettings.KEY_VPN_TYPE, type.toString());
-        setResult(Activity.RESULT_OK, intent);
+        return intent;
     }
 }
