diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 1e6f18e..05f18ed 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -17,6 +17,7 @@
 
 import com.android.contacts.R;
 
+import android.app.LoaderManager.LoaderCallbacks;
 import android.content.CursorLoader;
 import android.content.Loader;
 import android.database.Cursor;
@@ -40,6 +41,29 @@
 
     private OnContactBrowserActionListener mListener;
 
+    private LoaderCallbacks<Cursor> mIdLoaderCallbacks = new LoaderCallbacks<Cursor>() {
+
+        @Override
+        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+            return new CursorLoader(getContext(),
+                    mSelectedContactUri,
+                    new String[] { Contacts._ID },
+                    null,
+                    null,
+                    null);
+        }
+
+        @Override
+        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+            long selectedId = ListView.INVALID_ROW_ID;
+            if (data.moveToFirst()) {
+                selectedId = data.getLong(0);
+            }
+            getAdapter().setSelectedContactId(selectedId);
+            return;
+        }
+    };
+
     @Override
     public void restoreSavedState(Bundle savedState) {
         super.restoreSavedState(savedState);
@@ -61,39 +85,11 @@
     public void onStart() {
         super.onStart();
         if (mSelectedContactUri != null && isSelectionVisible()) {
-            startLoading(SELECTED_ID_LOADER, null);
+            getLoaderManager().initLoader(SELECTED_ID_LOADER, null, mIdLoaderCallbacks);
         }
    }
 
     @Override
-    protected Loader<Cursor> onCreateLoader(int id, Bundle args) {
-        if (id == SELECTED_ID_LOADER) {
-            return new CursorLoader(getContext(),
-                    mSelectedContactUri,
-                    new String[] { Contacts._ID },
-                    null,
-                    null,
-                    null);
-        }
-
-        return super.onCreateLoader(id, args);
-    }
-
-    @Override
-    protected void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-        if (loader.getId() == SELECTED_ID_LOADER) {
-            long selectedId = ListView.INVALID_ROW_ID;
-            if (data.moveToFirst()) {
-                selectedId = data.getLong(0);
-            }
-            getAdapter().setSelectedContactId(selectedId);
-            return;
-        }
-
-        super.onLoadFinished(loader, data);
-    }
-
-    @Override
     protected void prepareEmptyView() {
         if (isSearchMode()) {
             return;
@@ -121,13 +117,7 @@
                 || (mSelectedContactUri != null && !mSelectedContactUri.equals(uri))) {
             this.mSelectedContactUri = uri;
             if (mSelectedContactUri != null) {
-                CursorLoader loader = (CursorLoader)getLoader(SELECTED_ID_LOADER);
-                if (loader == null) {
-                    startLoading(SELECTED_ID_LOADER, null);
-                } else {
-                    loader.setUri(mSelectedContactUri);
-                    loader.forceLoad();
-                }
+                getLoaderManager().restartLoader(SELECTED_ID_LOADER, null, mIdLoaderCallbacks);
             }
         }
     }
