diff --git a/src/com/android/contacts/ContactsApplicationController.java b/src/com/android/contacts/ContactsApplicationController.java
index ac7fd3f..41daf26 100644
--- a/src/com/android/contacts/ContactsApplicationController.java
+++ b/src/com/android/contacts/ContactsApplicationController.java
@@ -17,8 +17,10 @@
 
 /**
  * An interface that captures various top-level actions that can be performed in
- * the Contacts app.
+ * the Contacts app.  This is a temporary class to be replaced by individual
+ * listeners for various actions.
  */
+@Deprecated
 public interface ContactsApplicationController {
 
     /**
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 3187e41..beb693a 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -17,9 +17,11 @@
 package com.android.contacts;
 
 import com.android.contacts.list.ContactEntryListAdapter;
-import com.android.contacts.list.ContactEntryListConfiguration;
+import com.android.contacts.list.ContactEntryListFragment;
 import com.android.contacts.list.ContactItemListAdapter;
 import com.android.contacts.list.ContactsIntentResolver;
+import com.android.contacts.list.DefaultContactListFragment;
+import com.android.contacts.list.MultiplePhonePickerFragment;
 import com.android.contacts.model.ContactsSource;
 import com.android.contacts.model.Sources;
 import com.android.contacts.ui.ContactsPreferences;
@@ -33,6 +35,7 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.FragmentTransaction;
 import android.app.SearchManager;
 import android.content.AsyncQueryHandler;
 import android.content.ContentResolver;
@@ -454,7 +457,7 @@
     };
 
     private ContactsIntentResolver mIntentResolver;
-    protected ContactEntryListConfiguration mConfig;
+    protected ContactEntryListFragment mListFragment;
 
     private ListView mListView;
 
@@ -484,24 +487,29 @@
         // Resolve the intent
         final Intent intent = getIntent();
 
-        mConfig = resolveIntent(intent);
-        initContentView();
+        if (!resolveIntent(intent)) {
+            return;
+        }
+
+        FragmentTransaction transaction = openFragmentTransaction();
+        transaction.add(mListFragment, android.R.id.content);
+        transaction.commit();
     }
 
-    protected ContactEntryListConfiguration resolveIntent(final Intent intent) {
+    protected boolean resolveIntent(final Intent intent) {
         mIntentResolver.setIntent(intent);
 
         if (!mIntentResolver.isValid()) {           // Invalid intent
             setResult(RESULT_CANCELED);
             finish();
-            return null;
+            return false;
         }
 
         Intent redirect = mIntentResolver.getRedirectIntent();
         if (redirect != null) {             // Need to start a different activity
             startActivity(redirect);
             finish();
-            return null;
+            return false;
         }
 
         setTitle(mIntentResolver.getActivityTitle());
@@ -521,22 +529,46 @@
         mShowNumberOfContacts = mIntentResolver.mShowNumberOfContacts;
         mGroupName = mIntentResolver.mGroupName;
 
-        return mIntentResolver.getConfiguration();
-    }
-
-    public void initContentView() {
-        setContentView(mConfig.createView());
-
-        mListView = (ListView) findViewById(android.R.id.list);
-
-        if (mSearchMode) {
-            setupSearchView();
+        switch (mMode) {
+            case MODE_DEFAULT: {
+                mListFragment = new DefaultContactListFragment();
+                if (!mSearchMode) {
+                    mListFragment.setSectionHeaderDisplayEnabled(true);
+                }
+                break;
+            }
+            case MODE_LEGACY_PICK_POSTAL:
+            case MODE_PICK_POSTAL:
+            case MODE_LEGACY_PICK_PHONE:
+            case MODE_PICK_PHONE:
+            case MODE_STREQUENT:
+            case MODE_FREQUENT: {
+                mListFragment = new DefaultContactListFragment();
+                break;
+            }
+            case MODE_PICK_MULTIPLE_PHONES: {
+                mListFragment = new MultiplePhonePickerFragment();
+                break;
+            }
+            default: {
+                mListFragment = new DefaultContactListFragment();
+                if (!mSearchMode) {
+                    mListFragment.setSectionHeaderDisplayEnabled(true);
+                }
+            }
         }
 
-        View emptyView = mListView.getEmptyView();
-        if (emptyView instanceof ContactListEmptyView) {
-            mEmptyView = (ContactListEmptyView)emptyView;
+        mListFragment.setSearchMode(mSearchMode);
+        mListFragment.setSearchResultsMode(mSearchResultsMode);
+        mListFragment.setQueryString(mInitialFilter);
+
+        if ((mMode & MODE_MASK_SHOW_PHOTOS) == MODE_MASK_SHOW_PHOTOS) {
+            mListFragment.setPhotoLoaderEnabled(true);
         }
+
+        mListFragment.setContactsApplicationController(this);
+
+        return true;
     }
 
     // TODO move this to the configuration object(s)
@@ -583,7 +615,7 @@
     public void onScrollStateChanged(AbsListView view, int scrollState) {
         if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
             mPhotoLoader.pause();
-        } else if (mConfig.isPhotoLoaderEnabled()) {
+        } else if (mListFragment.isPhotoLoaderEnabled()) {
             mPhotoLoader.resume();
         }
     }
@@ -649,6 +681,18 @@
     protected void onResume() {
         super.onResume();
 
+        // TODO move this to onAttach of the corresponding fragment
+        mListView = (ListView) findViewById(android.R.id.list);
+
+        if (mSearchMode) {
+            setupSearchView();
+        }
+
+        View emptyView = mListView.getEmptyView();
+        if (emptyView instanceof ContactListEmptyView) {
+            mEmptyView = (ContactListEmptyView)emptyView;
+        }
+
         registerProviderStatusObserver();
         mPhotoLoader.resume();
 
@@ -1933,7 +1977,7 @@
             baseUri = Contacts.CONTENT_URI;
         }
 
-        if (mConfig.isSectionHeaderDisplayEnabled()) {
+        if (mListFragment.isSectionHeaderDisplayEnabled()) {
             return buildSectionIndexerUri(baseUri);
         } else {
             return baseUri;
diff --git a/src/com/android/contacts/JoinContactActivity.java b/src/com/android/contacts/JoinContactActivity.java
index e555523..bacd0af 100644
--- a/src/com/android/contacts/JoinContactActivity.java
+++ b/src/com/android/contacts/JoinContactActivity.java
@@ -17,9 +17,8 @@
 package com.android.contacts;
 
 
-import com.android.contacts.list.ContactEntryListConfiguration;
 import com.android.contacts.list.JoinContactListAdapter;
-import com.android.contacts.list.JoinContactListConfiguration;
+import com.android.contacts.list.JoinContactListFragment;
 
 import android.content.ContentUris;
 import android.content.Intent;
@@ -72,7 +71,7 @@
     private JoinContactListAdapter mAdapter;
 
     @Override
-    protected ContactEntryListConfiguration resolveIntent(Intent intent) {
+    protected boolean resolveIntent(Intent intent) {
         mMode = MODE_PICK_CONTACT;
         mTargetContactId = intent.getLongExtra(EXTRA_TARGET_CONTACT_ID, -1);
         if (mTargetContactId == -1) {
@@ -80,15 +79,19 @@
                     + EXTRA_TARGET_CONTACT_ID);
             setResult(RESULT_CANCELED);
             finish();
-            return null;
+            return false;
         }
-        return new JoinContactListConfiguration(this, this);
+
+        mListFragment = new JoinContactListFragment();
+
+        return true;
     }
 
     @Override
-    public void initContentView() {
-        setContentView(mConfig.createView());
+    protected void onResume() {
+        super.onResume();
 
+        // TODO move this to onAttach of the corresponding fragment
         TextView blurbView = (TextView)findViewById(R.id.join_contact_blurb);
 
         String blurb = getString(R.string.blurbJoinContactDataWith,
diff --git a/src/com/android/contacts/MultiplePhonePickerActivity.java b/src/com/android/contacts/MultiplePhonePickerActivity.java
index 3eeb20a..492f419 100644
--- a/src/com/android/contacts/MultiplePhonePickerActivity.java
+++ b/src/com/android/contacts/MultiplePhonePickerActivity.java
@@ -18,7 +18,6 @@
 
 import com.android.contacts.list.MultiplePhoneExtraAdapter;
 import com.android.contacts.list.MultiplePhonePickerAdapter;
-import com.android.contacts.list.MultiplePhonePickerConfiguration;
 import com.android.contacts.list.MultiplePhonePickerItemView;
 import com.android.contacts.list.MultiplePhoneSelection;
 
@@ -129,8 +128,10 @@
     }
 
     @Override
-    public void initContentView() {
-        super.initContentView();
+    protected void onResume() {
+        super.onResume();
+
+        // TODO move this to onAttach of the corresponding fragment
         ListView listView = (ListView)findViewById(android.R.id.list);
         ((MultiplePhonePickerAdapter)listView.getAdapter()).setExtraAdapter(mPhoneNumberAdapter);
         ViewStub stub = (ViewStub)findViewById(R.id.footer_stub);
diff --git a/src/com/android/contacts/list/ContactEntryListController.java b/src/com/android/contacts/list/ContactEntryListController.java
deleted file mode 100644
index a190b4e..0000000
--- a/src/com/android/contacts/list/ContactEntryListController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.list;
-
-import com.android.contacts.ContactsApplicationController;
-
-import android.content.Context;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.ListAdapter;
-import android.widget.ListView;
-
-/**
- * Common base class for various contact-related list controllers.
- */
-public abstract class ContactEntryListController implements AdapterView.OnItemClickListener {
-
-    private final Context mContext;
-    private final ContactsApplicationController mAppController;
-    private ListAdapter mAdapter;
-    private ListView mListView;
-
-    public ContactEntryListController(Context context,
-            ContactsApplicationController appController) {
-        this.mContext = context;
-        this.mAppController = appController;
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public ContactsApplicationController getContactsApplicationController() {
-        return mAppController;
-    }
-
-    public void setAdapter(ListAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    public ListAdapter getAdapter() {
-        return mAdapter;
-    }
-
-    public void setListView(ListView listView) {
-        mListView = listView;
-    }
-
-    public ListView getListView() {
-        return mListView;
-    }
-
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        hideSoftKeyboard();
-
-        onItemClick(position, id);
-    }
-
-    protected abstract void onItemClick(int position, long id);
-
-    private void hideSoftKeyboard() {
-        // Hide soft keyboard, if visible
-        InputMethodManager inputMethodManager = (InputMethodManager)
-                mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
-        inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
-    }
-}
diff --git a/src/com/android/contacts/list/ContactEntryListConfiguration.java b/src/com/android/contacts/list/ContactEntryListFragment.java
similarity index 61%
rename from src/com/android/contacts/list/ContactEntryListConfiguration.java
rename to src/com/android/contacts/list/ContactEntryListFragment.java
index 88cf001..25f5674 100644
--- a/src/com/android/contacts/list/ContactEntryListConfiguration.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -21,98 +21,37 @@
 import com.android.contacts.R;
 import com.android.contacts.widget.PinnedHeaderListView;
 
+import android.app.Fragment;
 import android.content.Context;
 import android.text.Html;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
 /**
- * Common base class for configurations of various contact-related lists, e.g.
- * contact list, phone number list etc.
+ * Common base class for various contact-related list fragments.
  */
-public abstract class ContactEntryListConfiguration {
+public abstract class ContactEntryListFragment extends Fragment
+        implements AdapterView.OnItemClickListener {
 
-    private final Context mContext;
-    private final ContactsApplicationController mApplicationController;
     private boolean mSectionHeaderDisplayEnabled;
     private boolean mPhotoLoaderEnabled;
     private boolean mSearchMode;
     private boolean mSearchResultsMode;
     private String mQueryString;
 
-    public ContactEntryListConfiguration(Context context,
-            ContactsApplicationController applicationController) {
-        this.mContext = context;
-        this.mApplicationController = applicationController;
-    }
+    private ContactsApplicationController mAppController;
+    private ListAdapter mAdapter;
+    private ListView mListView;
 
-    public Context getContext() {
-        return mContext;
-    }
-
-    public ContactsApplicationController getApplicationController() {
-        return mApplicationController;
-    }
-
-    protected abstract View inflateView();
+    protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
     protected abstract ListAdapter createListAdapter();
-    protected abstract ContactEntryListController createController();
-
-    public View createView() {
-        View view = inflateView();
-        ListAdapter adapter = createListAdapter();
-        ContactEntryListController controller = createController();
-        configureView(view, adapter, controller);
-        return view;
-    }
-
-    protected void configureView(View view, ListAdapter adapter,
-            ContactEntryListController controller) {
-        ListView listView = (ListView)view.findViewById(android.R.id.list);
-        if (listView == null) {
-            throw new RuntimeException(
-                    "Your content must have a ListView whose id attribute is " +
-                    "'android.R.id.list'");
-        }
-
-        View emptyView = view.findViewById(com.android.internal.R.id.empty);
-        if (emptyView != null) {
-            listView.setEmptyView(emptyView);
-        }
-
-        controller.setAdapter(adapter);
-        listView.setAdapter(adapter);
-        listView.setOnItemClickListener(controller);
-        controller.setListView(listView);
-
-        ((ContactsListActivity)mContext).setupListView(adapter, listView);
-
-        configurePinnedHeader(listView, adapter);
-
-        if (isSearchResultsMode()) {
-            TextView titleText = (TextView)view.findViewById(R.id.search_results_for);
-            if (titleText != null) {
-                titleText.setText(Html.fromHtml(getContext().getString(R.string.search_results_for,
-                        "<b>" + getQueryString() + "</b>")));
-            }
-        }
-    }
-
-    private void configurePinnedHeader(ListView listView, ListAdapter adapter) {
-        if (!mSectionHeaderDisplayEnabled) {
-            return;
-        }
-
-        if (listView instanceof PinnedHeaderListView
-                && adapter instanceof PinnedHeaderListAdapter) {
-            PinnedHeaderListView pinnedHeaderList = (PinnedHeaderListView)listView;
-            PinnedHeaderListAdapter pinnedHeaderListAdapter = (PinnedHeaderListAdapter)adapter;
-            View headerView = pinnedHeaderListAdapter.createPinnedHeaderView(pinnedHeaderList);
-            pinnedHeaderList.setPinnedHeaderView(headerView);
-        }
-    }
+    protected abstract void onItemClick(int position, long id);
 
     public void setSectionHeaderDisplayEnabled(boolean flag) {
         mSectionHeaderDisplayEnabled = flag;
@@ -153,4 +92,79 @@
     public void setQueryString(String queryString) {
         mQueryString = queryString;
     }
+
+    @Deprecated
+    public void setContactsApplicationController(ContactsApplicationController controller) {
+        mAppController = controller;
+    }
+
+    @Deprecated
+    public ContactsApplicationController getContactsApplicationController() {
+        return mAppController;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container) {
+        View view = inflateView(inflater, container);
+        mAdapter = createListAdapter();
+        configureView(view, mAdapter);
+        return view;
+    }
+
+    protected void configureView(View view, ListAdapter adapter) {
+        mListView = (ListView)view.findViewById(android.R.id.list);
+        if (mListView == null) {
+            throw new RuntimeException(
+                    "Your content must have a ListView whose id attribute is " +
+                    "'android.R.id.list'");
+        }
+
+        View emptyView = view.findViewById(com.android.internal.R.id.empty);
+        if (emptyView != null) {
+            mListView.setEmptyView(emptyView);
+        }
+
+        mListView.setAdapter(adapter);
+        mListView.setOnItemClickListener(this);
+
+        ((ContactsListActivity)getActivity()).setupListView(adapter, mListView);
+
+        configurePinnedHeader(mListView, adapter);
+
+        if (isSearchResultsMode()) {
+            TextView titleText = (TextView)view.findViewById(R.id.search_results_for);
+            if (titleText != null) {
+                titleText.setText(Html.fromHtml(getActivity().getString(R.string.search_results_for,
+                        "<b>" + getQueryString() + "</b>")));
+            }
+        }
+    }
+
+    private void configurePinnedHeader(ListView listView, ListAdapter adapter) {
+        if (!mSectionHeaderDisplayEnabled) {
+            return;
+        }
+
+        if (listView instanceof PinnedHeaderListView
+                && adapter instanceof PinnedHeaderListAdapter) {
+            PinnedHeaderListView pinnedHeaderList = (PinnedHeaderListView)listView;
+            PinnedHeaderListAdapter pinnedHeaderListAdapter = (PinnedHeaderListAdapter)adapter;
+            View headerView = pinnedHeaderListAdapter.createPinnedHeaderView(pinnedHeaderList);
+            pinnedHeaderList.setPinnedHeaderView(headerView);
+        }
+    }
+
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        hideSoftKeyboard();
+
+        onItemClick(position, id);
+    }
+
+
+    private void hideSoftKeyboard() {
+        // Hide soft keyboard, if visible
+        InputMethodManager inputMethodManager = (InputMethodManager)
+                getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+        inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
+    }
 }
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index b5f8caf..1aec32d 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -474,46 +474,4 @@
         }
         return null;
     }
-
-    public ContactEntryListConfiguration getConfiguration() {
-        ContactEntryListConfiguration config;
-        switch (mMode) {
-            case MODE_DEFAULT: {
-                config = new DefaultContactListConfiguration(mContext, mAppController);
-                if (!mSearchMode) {
-                    config.setSectionHeaderDisplayEnabled(true);
-                }
-                break;
-            }
-            case MODE_LEGACY_PICK_POSTAL:
-            case MODE_PICK_POSTAL:
-            case MODE_LEGACY_PICK_PHONE:
-            case MODE_PICK_PHONE:
-            case MODE_STREQUENT:
-            case MODE_FREQUENT: {
-                config = new DefaultContactListConfiguration(mContext, mAppController);
-                break;
-            }
-            case MODE_PICK_MULTIPLE_PHONES: {
-                config = new MultiplePhonePickerConfiguration(mContext, mAppController);
-                break;
-            }
-            default: {
-                config = new DefaultContactListConfiguration(mContext, mAppController);
-                if (!mSearchMode) {
-                    config.setSectionHeaderDisplayEnabled(true);
-                }
-            }
-        }
-
-        config.setSearchMode(mSearchMode);
-        config.setSearchResultsMode(mSearchResultsMode);
-        config.setQueryString(mInitialFilter);
-
-        if ((mMode & MODE_MASK_SHOW_PHOTOS) == MODE_MASK_SHOW_PHOTOS) {
-            config.setPhotoLoaderEnabled(true);
-        }
-
-        return config;
-    }
 }
diff --git a/src/com/android/contacts/list/DefaultContactListController.java b/src/com/android/contacts/list/DefaultContactListController.java
deleted file mode 100644
index 4bb1416..0000000
--- a/src/com/android/contacts/list/DefaultContactListController.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.list;
-
-import com.android.contacts.ContactsApplicationController;
-
-import android.content.Context;
-
-/**
- * Controller for the default contact list.
- */
-public class DefaultContactListController extends ContactEntryListController {
-
-    public DefaultContactListController(Context context,
-            ContactsApplicationController appController) {
-        super(context, appController);
-    }
-
-    @Override
-    protected void onItemClick(int position, long id) {
-        // TODO instead of delegating the entire procedure to the ContactsListActivity,
-        // figure out what the specific action is and delegate the specific action.
-        getContactsApplicationController().onListItemClick(position, id);
-    }
-}
diff --git a/src/com/android/contacts/list/DefaultContactListConfiguration.java b/src/com/android/contacts/list/DefaultContactListFragment.java
similarity index 67%
rename from src/com/android/contacts/list/DefaultContactListConfiguration.java
rename to src/com/android/contacts/list/DefaultContactListFragment.java
index 52238aa..51ee2cc 100644
--- a/src/com/android/contacts/list/DefaultContactListConfiguration.java
+++ b/src/com/android/contacts/list/DefaultContactListFragment.java
@@ -13,44 +13,40 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.android.contacts.list;
 
-import com.android.contacts.ContactsApplicationController;
 import com.android.contacts.ContactsListActivity;
 import com.android.contacts.R;
 
-import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ListAdapter;
 
 /**
- * Configuration for the default contact list.
+ * Fragment for the default contact list.
  */
-public class DefaultContactListConfiguration extends ContactEntryListConfiguration {
+public class DefaultContactListFragment extends ContactEntryListFragment {
 
-    public DefaultContactListConfiguration(Context context,
-            ContactsApplicationController applicationController) {
-        super(context, applicationController);
+    @Override
+    protected void onItemClick(int position, long id) {
+        // TODO instead of delegating the entire procedure to the ContactsListActivity,
+        // figure out what the specific action is and delegate the specific action.
+        getContactsApplicationController().onListItemClick(position, id);
     }
 
     @Override
-    public ListAdapter createListAdapter() {
+    protected ListAdapter createListAdapter() {
         ContactItemListAdapter adapter =
-                new ContactItemListAdapter((ContactsListActivity)getContext());
+                new ContactItemListAdapter((ContactsListActivity)getActivity());
         adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
         adapter.setDisplayPhotos(isPhotoLoaderEnabled());
         return adapter;
     }
 
     @Override
-    public ContactEntryListController createController() {
-        return new DefaultContactListController(getContext(), getApplicationController());
-    }
-
-    @Override
-    protected View inflateView() {
-        LayoutInflater inflater = LayoutInflater.from(getContext());
+    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
         if (isSearchMode()) {
             return inflater.inflate(R.layout.contacts_search_content, null);
         } else if (isSearchResultsMode()) {
diff --git a/src/com/android/contacts/list/JoinContactListConfiguration.java b/src/com/android/contacts/list/JoinContactListFragment.java
similarity index 63%
rename from src/com/android/contacts/list/JoinContactListConfiguration.java
rename to src/com/android/contacts/list/JoinContactListFragment.java
index 5839010..52beb4a 100644
--- a/src/com/android/contacts/list/JoinContactListConfiguration.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -15,44 +15,36 @@
  */
 package com.android.contacts.list;
 
-import com.android.contacts.ContactsApplicationController;
 import com.android.contacts.JoinContactActivity;
 import com.android.contacts.R;
 
-import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ListAdapter;
 
 /**
- * Configuration for the default contact list.
+ * Fragment for the Join Contact list.
  */
-public class JoinContactListConfiguration extends ContactEntryListConfiguration {
-
-    public JoinContactListConfiguration(Context context,
-            ContactsApplicationController applicationController) {
-        super(context, applicationController);
-    }
+public class JoinContactListFragment extends ContactEntryListFragment {
 
     @Override
     public ListAdapter createListAdapter() {
         JoinContactListAdapter adapter =
-                new JoinContactListAdapter((JoinContactActivity)getContext());
+                new JoinContactListAdapter((JoinContactActivity)getActivity());
         adapter.setSectionHeaderDisplayEnabled(true);
         adapter.setDisplayPhotos(true);
         return adapter;
     }
 
     @Override
-    public ContactEntryListController createController() {
-
-        // TODO needs a separate controller
-        return new DefaultContactListController(getContext(), getApplicationController());
+    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+        return inflater.inflate(R.layout.contacts_list_content_join, null);
     }
 
     @Override
-    protected View inflateView() {
-        LayoutInflater inflater = LayoutInflater.from(getContext());
-        return inflater.inflate(R.layout.contacts_list_content_join, null);
+    protected void onItemClick(int position, long id) {
+        // TODO
+        throw new UnsupportedOperationException();
     }
 }
diff --git a/src/com/android/contacts/list/MultiplePhonePickerConfiguration.java b/src/com/android/contacts/list/MultiplePhonePickerFragment.java
similarity index 61%
rename from src/com/android/contacts/list/MultiplePhonePickerConfiguration.java
rename to src/com/android/contacts/list/MultiplePhonePickerFragment.java
index 66c3d95..fd3b517 100644
--- a/src/com/android/contacts/list/MultiplePhonePickerConfiguration.java
+++ b/src/com/android/contacts/list/MultiplePhonePickerFragment.java
@@ -15,45 +15,36 @@
  */
 package com.android.contacts.list;
 
-import com.android.contacts.ContactsApplicationController;
 import com.android.contacts.MultiplePhonePickerActivity;
 import com.android.contacts.R;
 
-import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ListAdapter;
 
 /**
- * Configuration for the multiple phone picker.
+ * Fragment for the multiple phone picker.
  */
-public class MultiplePhonePickerConfiguration extends ContactEntryListConfiguration {
-
-    public MultiplePhonePickerConfiguration(Context context,
-            ContactsApplicationController applicationController) {
-        super(context, applicationController);
-    }
+public class MultiplePhonePickerFragment extends ContactEntryListFragment {
 
     @Override
     public ListAdapter createListAdapter() {
         MultiplePhonePickerAdapter adapter =
-                new MultiplePhonePickerAdapter((MultiplePhonePickerActivity)getContext());
+                new MultiplePhonePickerAdapter((MultiplePhonePickerActivity)getActivity());
         adapter.setSectionHeaderDisplayEnabled(true);
         adapter.setDisplayPhotos(true);
         return adapter;
     }
 
     @Override
-    public ContactEntryListController createController() {
-
-        // TODO this needs a separate controller
-        return new DefaultContactListController(getContext(), getApplicationController());
+    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+        return inflater.inflate(R.layout.contacts_list_content, null);
     }
 
     @Override
-    protected View inflateView() {
-        // TODO implement a proper search mode for MultiPicker
-        LayoutInflater inflater = LayoutInflater.from(getContext());
-        return inflater.inflate(R.layout.contacts_list_content, null);
+    protected void onItemClick(int position, long id) {
+        // TODO
+        throw new UnsupportedOperationException();
     }
 }
