diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 493e1db..f809474 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -154,6 +154,7 @@
         super.onCreate(icicle);
         setPreferenceScreen(null);
         addPreferencesFromResource(R.xml.account_sync_settings);
+        getPreferenceScreen().setOrderingAsAdded(false);
         setAccessibilityTitle();
 
         setHasOptionsMenu(true);
@@ -234,8 +235,13 @@
     }
 
     private void addSyncStateSwitch(Account account, String authority) {
-        SyncStateSwitchPreference item =
-                new SyncStateSwitchPreference(getPrefContext(), account, authority);
+        SyncStateSwitchPreference item = (SyncStateSwitchPreference) getCachedPreference(authority);
+        if (item == null) {
+            item = new SyncStateSwitchPreference(getPrefContext(), account, authority);
+            getPreferenceScreen().addPreference(item);
+        } else {
+            item.setup(account, authority);
+        }
         item.setPersistent(false);
         final ProviderInfo providerInfo = getPackageManager().resolveContentProviderAsUser(
                 authority, 0, mUserHandle.getIdentifier());
@@ -250,7 +256,6 @@
         String title = getString(R.string.sync_item_title, providerLabel);
         item.setTitle(title);
         item.setKey(authority);
-        mSwitches.add(item);
     }
 
     @Override
@@ -529,14 +534,10 @@
             }
         }
 
-        for (int i = 0, n = mSwitches.size(); i < n; i++) {
-            getPreferenceScreen().removePreference(mSwitches.get(i));
-        }
-        mSwitches.clear();
-
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.d(TAG, "looking for sync adapters that match account " + mAccount);
         }
+        cacheRemoveAllPrefs(getPreferenceScreen());
         for (int j = 0, m = authorities.size(); j < m; j++) {
             final String authority = authorities.get(j);
             // We could check services here....
@@ -549,11 +550,7 @@
                 addSyncStateSwitch(mAccount, authority);
             }
         }
-
-        Collections.sort(mSwitches);
-        for (int i = 0, n = mSwitches.size(); i < n; i++) {
-            getPreferenceScreen().addPreference(mSwitches.get(i));
-        }
+        removeCachedPrefs(getPreferenceScreen());
     }
 
     /**
@@ -562,7 +559,6 @@
     @Override
     protected void onAuthDescriptionsUpdated() {
         super.onAuthDescriptionsUpdated();
-        getPreferenceScreen().removeAll();
         if (mAccount != null) {
             mProviderIcon.setImageDrawable(getDrawableForType(mAccount.type));
             mProviderId.setText(getLabelForType(mAccount.type));
diff --git a/src/com/android/settings/accounts/SyncStateSwitchPreference.java b/src/com/android/settings/accounts/SyncStateSwitchPreference.java
index 34663e6..c6632d0 100644
--- a/src/com/android/settings/accounts/SyncStateSwitchPreference.java
+++ b/src/com/android/settings/accounts/SyncStateSwitchPreference.java
@@ -51,8 +51,13 @@
 
     public SyncStateSwitchPreference(Context context, Account account, String authority) {
         super(context, null, 0, R.style.SyncSwitchPreference);
+        setup(account, authority);
+    }
+
+    public void setup(Account account, String authority) {
         mAccount = account;
         mAuthority = authority;
+        notifyChanged();
     }
 
     @Override
