diff --git a/api/current.xml b/api/current.xml
index ef3289d..5ed07cf 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -145399,23 +145399,6 @@
 <parameter name="header" type="android.preference.PreferenceActivity.Header">
 </parameter>
 </method>
-<method name="switchToHeaderInner"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fragmentName" type="java.lang.String">
-</parameter>
-<parameter name="args" type="android.os.Bundle">
-</parameter>
-<parameter name="next" type="boolean">
-</parameter>
-</method>
 <field name="EXTRA_NO_HEADERS"
  type="java.lang.String"
  transient="false"
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index a59b2f8..0c6a237 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -893,13 +893,13 @@
         }
     }
 
-    public void switchToHeaderInner(String fragmentName, Bundle args, boolean next) {
+    private void switchToHeaderInner(String fragmentName, Bundle args, int direction) {
         getFragmentManager().popBackStack(BACK_STACK_PREFS, POP_BACK_STACK_INCLUSIVE);
         Fragment f = Fragment.instantiate(this, fragmentName, args);
         FragmentTransaction transaction = getFragmentManager().openTransaction();
-        transaction.setTransition(next ?
-                FragmentTransaction.TRANSIT_FRAGMENT_NEXT :
-                FragmentTransaction.TRANSIT_FRAGMENT_PREV);
+        transaction.setTransition(direction == 0 ? FragmentTransaction.TRANSIT_NONE
+                : direction > 0 ? FragmentTransaction.TRANSIT_FRAGMENT_NEXT
+                        : FragmentTransaction.TRANSIT_FRAGMENT_PREV);
         transaction.replace(com.android.internal.R.id.prefs, f);
         transaction.commit();
     }
@@ -913,7 +913,7 @@
      */
     public void switchToHeader(String fragmentName, Bundle args) {
         setSelectedHeader(null);
-        switchToHeaderInner(fragmentName, args, true);
+        switchToHeaderInner(fragmentName, args, 0);
     }
 
     /**
@@ -923,8 +923,8 @@
      * @param header The new header to display.
      */
     public void switchToHeader(Header header) {
-        switchToHeaderInner(header.fragment, header.fragmentArguments,
-                mHeaders.indexOf(header) > mHeaders.indexOf(mCurHeader));
+        int direction = mHeaders.indexOf(header) - mHeaders.indexOf(mCurHeader);
+        switchToHeaderInner(header.fragment, header.fragmentArguments, direction);
         setSelectedHeader(header);
     }
 
