diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 28ff883..ec4ebc7 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -615,7 +615,7 @@
                 mInitialTitle = (initialTitleResId > 0) ? getText(initialTitleResId) : getTitle();
                 setTitle(mInitialTitle);
                 switchToHeaderInner(initialFragment, initialArguments, true, false, mInitialTitle);
-                setSelectedHeaderByTopLevelId(mTopLevelHeaderId);
+                setSelectedHeaderById(mTopLevelHeaderId);
                 mInitialHeader = mCurrentHeader;
             } else {
                 // If there are headers, then at this point we need to show
@@ -720,6 +720,7 @@
         final int count = getFragmentManager().getBackStackEntryCount();
         if (count == 0) {
             setTitle(mInitialTitle);
+            setSelectedHeaderById(mInitialHeader.id);
             return;
         }
         FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(count - 1);
@@ -819,17 +820,20 @@
         return title;
     }
 
-    private void setSelectedHeaderByTopLevelId(int topLevelId) {
+    private void setSelectedHeaderById(long headerId) {
         final int count = mHeaders.size();
         for (int n = 0; n < count; n++) {
             Header h = mHeaders.get(n);
-            if (h.id == topLevelId) {
+            if (h.id == headerId) {
                 setSelectedHeader(h);
                 return;
             }
         }
     }
 
+    /**
+     * As the Headers can be rebuilt, their references can change, so use this method with caution!
+     */
     private void setSelectedHeader(Header header) {
         if (header == null) {
             mCurrentHeader = null;
@@ -849,6 +853,18 @@
         }
     }
 
+    private void highlightHeader(int id) {
+        if (id != 0) {
+            Integer index = mHeaderIndexMap.get(id);
+            if (index != null) {
+                mDrawer.setItemChecked(index, true);
+                if (mDrawer.getVisibility() == View.VISIBLE) {
+                    mDrawer.smoothScrollToPosition(index);
+                }
+            }
+        }
+    }
+
     /**
      * When in two-pane mode, switch to the fragment pane to show the given
      * preference fragment.
@@ -950,18 +966,6 @@
         return getIntent().getBooleanExtra(EXTRA_NO_HEADERS, false);
     }
 
-    private void highlightHeader(int id) {
-        if (id != 0) {
-            Integer index = mHeaderIndexMap.get(id);
-            if (index != null && mDrawer != null) {
-                mDrawer.setItemChecked(index, true);
-                if (mDrawer.getVisibility() == View.VISIBLE) {
-                    mDrawer.smoothScrollToPosition(index);
-                }
-            }
-        }
-    }
-
     @Override
     public Intent getIntent() {
         Intent superIntent = super.getIntent();
