diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1b80ce8..7f04228 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -118,6 +118,10 @@
                 android:value="com.android.settings.wifi.WifiSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/wireless_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/wireless_networks_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$WirelessSettingsActivity" />
         </activity>
 
         <activity android:name=".wifi.WifiSettingsForSetupWizardXL"
@@ -210,6 +214,10 @@
                 android:value="com.android.settings.bluetooth.BluetoothSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/wireless_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/wireless_networks_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$WirelessSettingsActivity" />
         </activity>
 
         <activity android:name=".bluetooth.DevicePickerActivity"
@@ -234,6 +242,10 @@
                 android:value="com.android.settings.TetherSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/wireless_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/wireless_networks_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$WirelessSettingsActivity" />
         </activity>
 
         <activity android:name="Settings$VpnSettingsActivity"
@@ -252,6 +264,10 @@
                 android:value="com.android.settings.vpn.VpnSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/wireless_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/wireless_networks_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$WirelessSettingsActivity" />
         </activity>
 
         <activity android:name="Settings$DateTimeSettingsActivity"
@@ -327,6 +343,10 @@
                 android:value="com.android.settings.inputmethod.InputMethodAndSubtypeEnabler" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/language_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/language_keyboard_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$InputMethodAndLanguageSettingsActivity" />
         </activity>
 
         <activity android:name="PhysicalKeyboardSettings"
@@ -354,6 +374,10 @@
                 android:value="com.android.settings.UserDictionarySettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/language_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/language_keyboard_settings_title" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$InputMethodAndLanguageSettingsActivity" />
         </activity>
 
         <activity android:name="Settings$SoundSettingsActivity"
@@ -475,6 +499,10 @@
                 android:value="com.android.settings.applications.ManageApplications" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/application_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/applications_settings_header" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$ApplicationSettingsActivity" />
         </activity>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -518,6 +546,10 @@
                 android:value="com.android.settings.applications.ManageApplications" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/application_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/applications_settings_header" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$ApplicationSettingsActivity" />
         </activity>
 
         <!-- Provide direct entry into manage apps showing running services. -->
@@ -535,6 +567,10 @@
                 android:value="com.android.settings.applications.ManageApplications" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/application_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/applications_settings_header" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$ApplicationSettingsActivity" />
         </activity>
 
         <activity android:name="Settings$SecuritySettingsActivity"
@@ -752,6 +788,10 @@
                 android:value="com.android.settings.DevelopmentSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/application_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/applications_settings_header" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$ApplicationSettingsActivity" />
         </activity>
 
 
@@ -927,6 +967,10 @@
                 android:value="com.android.settings.fuelgauge.PowerUsageSummary" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/application_settings" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
+                android:resource="@string/applications_settings_header" />
+            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
+                android:value="com.android.settings.Settings$ApplicationSettingsActivity" />
         </activity>
 
         <activity
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e18fdc3..fb6cb06 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -487,7 +487,7 @@
     <!-- Main Settings screen settings title for things like Wi-Fi, bluetooth, airplane mode.  This will take you to another screen with those settings. -->
     <string name="radio_controls_title">Wireless &amp; networks</string>
     <!-- Wireless Settings screen title for things like Wi-Fi, bluetooth, airplane mode. -->
-    <string name="wireless_networks_settings_title">Wireless &amp; network settings</string>
+    <string name="wireless_networks_settings_title">Wireless &amp; networks</string>
     <!-- Main Settings screen settings summary text for the "Wireless controls" setting -->
     <string name="radio_controls_summary">Manage Wi-Fi, Bluetooth, airplane mode, mobile networks, &amp; VPNs</string>
 
@@ -2180,7 +2180,7 @@
     <!-- Title of setting on main settings screen.  This item will take the user to the screen to tweak settings realted to locale and text -->
     <string name="language_settings">Language &amp; input</string>
     <!-- Title of Language and keyboard settings screen -->
-    <string name="language_keyboard_settings_title">Language &amp; keyboard settings</string>
+    <string name="language_keyboard_settings_title">Language &amp; input</string>
     <!-- On Language & keyboard settings screen, heading. Inside the "Language & keyboard settings" screen, this is the header for settings that relate to language (select the system language, user dictionary for the language). -->
     <string name="language_settings_category">Language settings</string>
     <!-- On Language & keyboard settings screen, heading. Inside the "Language & keyboard settings" screen, this is the header for settings that relate to keyboard (enable/disable each keyboard, settings for each keyboard). -->
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 00706ad..b91c7ee 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -16,12 +16,17 @@
 
 package com.android.settings;
 
+import android.content.ComponentName;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceActivity.Header;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
 
 import java.util.HashMap;
 import java.util.List;
@@ -35,10 +40,20 @@
             "com.android.settings.TOP_LEVEL_HEADER_ID";
     private static final String META_DATA_KEY_FRAGMENT_CLASS =
             "com.android.settings.FRAGMENT_CLASS";
+    private static final String META_DATA_KEY_PARENT_TITLE =
+        "com.android.settings.PARENT_FRAGMENT_TITLE";
+    private static final String META_DATA_KEY_PARENT_FRAGMENT_CLASS =
+        "com.android.settings.PARENT_FRAGMENT_CLASS";
+
+    private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER";
+    private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER";
 
     private String mFragmentClass;
     private int mTopLevelHeaderId;
     private Header mFirstHeader;
+    private Header mCurrentHeader;
+    private Header mParentHeader;
+    private boolean mInLocalHeaderSwitch;
 
     // TODO: Update Call Settings based on airplane mode state.
 
@@ -47,7 +62,9 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         getMetaData();
+        mInLocalHeaderSwitch = true;
         super.onCreate(savedInstanceState);
+        mInLocalHeaderSwitch = false;
 
         if (!onIsHidingHeaders() && onIsMultiPane()) {
             highlightHeader();
@@ -55,6 +72,84 @@
             // a specific settings screen.
             setTitle(R.string.settings_label);
         }
+
+        // Retrieve any saved state
+        if (savedInstanceState != null) {
+            mCurrentHeader = savedInstanceState.getParcelable(SAVE_KEY_CURRENT_HEADER);
+            mParentHeader = savedInstanceState.getParcelable(SAVE_KEY_PARENT_HEADER);
+        }
+
+        // If the current header was saved, switch to it
+        if (savedInstanceState != null && mCurrentHeader != null) {
+            //switchToHeaderLocal(mCurrentHeader);
+            showBreadCrumbs(mCurrentHeader.title, null);
+        }
+
+        if (mParentHeader != null) {
+            setParentTitle(mParentHeader.title, null, new OnClickListener() {
+                public void onClick(View v) {
+                    switchToParent(mParentHeader.fragment);
+                }
+            });
+        }
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        // Save the current fragment, if it is the same as originally launched
+        if (mCurrentHeader != null) {
+            outState.putParcelable(SAVE_KEY_CURRENT_HEADER, mCurrentHeader);
+        }
+        if (mParentHeader != null) {
+            outState.putParcelable(SAVE_KEY_PARENT_HEADER, mParentHeader);
+        }
+    }
+
+    private void switchToHeaderLocal(Header header) {
+        mInLocalHeaderSwitch = true;
+        switchToHeader(header);
+        mInLocalHeaderSwitch = false;
+    }
+
+    @Override
+    public void switchToHeader(Header header) {
+        if (!mInLocalHeaderSwitch) {
+            mCurrentHeader = null;
+            mParentHeader = null;
+        }
+        super.switchToHeader(header);
+    }
+
+    /**
+     * Switch to parent fragment and store the grand parent's info
+     * @param class name of the activity wrapper for the parent fragment.
+     */
+    private void switchToParent(String className) {
+        final ComponentName cn = new ComponentName(this, className);
+        try {
+            final PackageManager pm = getPackageManager();
+            final ActivityInfo parentInfo = pm.getActivityInfo(cn, PackageManager.GET_META_DATA);
+
+            if (parentInfo != null && parentInfo.metaData != null) {
+                String fragmentClass = parentInfo.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
+                CharSequence fragmentTitle = parentInfo.loadLabel(pm);
+                Header parentHeader = new Header();
+                parentHeader.fragment = fragmentClass;
+                parentHeader.title = fragmentTitle;
+                mCurrentHeader = parentHeader;
+
+                switchToHeaderLocal(parentHeader);
+
+                mParentHeader = new Header();
+                mParentHeader.fragment
+                        = parentInfo.metaData.getString(META_DATA_KEY_PARENT_FRAGMENT_CLASS);
+                mParentHeader.title = parentInfo.metaData.getString(META_DATA_KEY_PARENT_TITLE);
+            }
+        } catch (NameNotFoundException nnfe) {
+            Log.w("Settings", "Could not find parent activity : " + className);
+        }
     }
 
     @Override
@@ -64,7 +159,7 @@
         // If it is not launched from history, then reset to top-level
         if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0
                 && mFirstHeader != null) {
-            switchToHeader(mFirstHeader);
+            switchToHeaderLocal(mFirstHeader);
         }
     }
 
@@ -126,7 +221,9 @@
         if (fragmentClass != null) {
             Header header = new Header();
             header.fragment = fragmentClass;
+            header.title = getTitle();
             header.fragmentArguments = getIntent().getExtras();
+            mCurrentHeader = header;
             return header;
         }
         return super.onGetInitialHeader();
@@ -178,6 +275,17 @@
             if (ai == null || ai.metaData == null) return;
             mTopLevelHeaderId = ai.metaData.getInt(META_DATA_KEY_HEADER_ID);
             mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
+            
+            // Check if it has a parent specified and create a Header object
+            final int parentHeaderTitleRes = ai.metaData.getInt(META_DATA_KEY_PARENT_TITLE);
+            String parentFragmentClass = ai.metaData.getString(META_DATA_KEY_PARENT_FRAGMENT_CLASS);
+            if (parentFragmentClass != null) {
+                mParentHeader = new Header();
+                mParentHeader.fragment = parentFragmentClass;
+                if (parentHeaderTitleRes != 0) {
+                    mParentHeader.title = getResources().getString(parentHeaderTitleRes);
+                }
+            }
         } catch (NameNotFoundException nnfe) {
         }
     }
diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java
index ea16f9d..c11b2fd 100644
--- a/src/com/android/settings/vpn/VpnSettings.java
+++ b/src/com/android/settings/vpn/VpnSettings.java
@@ -197,6 +197,17 @@
     }
 
     @Override
+    public void onDestroy() {
+        super.onDestroy();
+        // Remove any onClick listeners
+        if (mVpnListContainer != null) {
+            for (int i = 0; i < mVpnListContainer.getPreferenceCount(); i++) {
+                mVpnListContainer.getPreference(i).setOnPreferenceClickListener(null);
+            }
+        }
+    }
+
+    @Override
     public Dialog onCreateDialog (int id) {
         switch (id) {
             case DIALOG_CONNECT:
@@ -1050,6 +1061,7 @@
                             changeState(p, VpnState.IDLE);
                         }
                     }
+                    if (getActivity() == null) return;
                     getActivity().unbindService(this);
                     showPreferences();
                 }
@@ -1058,6 +1070,7 @@
                     cv.open();
 
                     setDefaultState(list);
+                    if (getActivity() == null) return;
                     getActivity().unbindService(this);
                     showPreferences();
                 }
