diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index c449e09..3f49006 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -74,7 +74,7 @@
 import com.android.dialer.list.ListsFragment;
 import com.android.dialer.list.OnDragDropListener;
 import com.android.dialer.list.OnListFragmentScrolledListener;
-import com.android.dialer.list.PhoneFavoriteFragment;
+import com.android.dialer.list.SpeedDialFragment;
 import com.android.dialer.list.PhoneFavoriteTileView;
 import com.android.dialer.list.PhoneFavoriteSquareTileView;
 import com.android.dialer.list.RegularSearchFragment;
@@ -95,7 +95,7 @@
         OnListFragmentScrolledListener,
         DialpadFragment.HostInterface,
         ListsFragment.HostInterface,
-        PhoneFavoriteFragment.HostInterface,
+        SpeedDialFragment.HostInterface,
         OnDragDropListener, View.OnLongClickListener,
         OnPhoneNumberPickerActionListener {
     private static final String TAG = "DialtactsActivity";
@@ -207,7 +207,7 @@
         public void show() {
             final Menu menu = getMenu();
             final MenuItem clearFrequents = menu.findItem(R.id.menu_clear_frequents);
-            // TODO: Check mPhoneFavoriteFragment.hasFrequents()
+            // TODO: Check mSpeedDialFragment.hasFrequents()
             clearFrequents.setVisible(true);
             super.show();
         }
@@ -483,7 +483,7 @@
                 return true;
             case R.id.menu_clear_frequents:
                 // TODO: This should be enabled/disabled based on
-                // PhoneFavoritesFragments.hasFrequents
+                // SpeedDialFragment.hasFrequents
                 ClearFrequentsDialog.show(getFragmentManager());
                 return true;
             case R.id.menu_call_settings:
@@ -940,7 +940,7 @@
     public void onDroppedOnRemove() {}
 
     /**
-     * Allows the PhoneFavoriteFragment to attach the drag controller to mRemoveViewContainer
+     * Allows the SpeedDialFragment to attach the drag controller to mRemoveViewContainer
      * once it has been attached to the activity.
      */
     @Override
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index d6ea2ad..676b3b0 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -65,13 +65,13 @@
 
     private ViewPager mViewPager;
     private ViewPagerAdapter mViewPagerAdapter;
-    private PhoneFavoriteFragment mSpeedDialFragment;
+    private SpeedDialFragment mSpeedDialFragment;
     private CallLogFragment mRecentsFragment;
     private AllContactsFragment mAllContactsFragment;
 
     private String[] mTabTitles;
 
-    private PhoneFavoriteMergedAdapter mMergedAdapter;
+    private ShortcutCardsAdapter mMergedAdapter;
     private CallLogAdapter mCallLogAdapter;
     private CallLogQueryHandler mCallLogQueryHandler;
 
@@ -116,7 +116,7 @@
         public Fragment getItem(int position) {
             switch (position) {
                 case TAB_INDEX_SPEED_DIAL:
-                    mSpeedDialFragment = new PhoneFavoriteFragment();
+                    mSpeedDialFragment = new SpeedDialFragment();
                     return mSpeedDialFragment;
                 case TAB_INDEX_RECENTS:
                     mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
@@ -168,7 +168,7 @@
         mCallLogAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
                 new ContactInfoHelper(getActivity(), currentCountryIso), false, false);
 
-        mMergedAdapter = new PhoneFavoriteMergedAdapter(getActivity(), this, mCallLogAdapter);
+        mMergedAdapter = new ShortcutCardsAdapter(getActivity(), this, mCallLogAdapter);
     }
 
     @Override
diff --git a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/ShortcutCardsAdapter.java
similarity index 97%
rename from src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
rename to src/com/android/dialer/list/ShortcutCardsAdapter.java
index 122e062..4cca20b 100644
--- a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
+++ b/src/com/android/dialer/list/ShortcutCardsAdapter.java
@@ -38,7 +38,7 @@
  * An adapter that displays call shortcuts from {@link com.android.dialer.calllog.CallLogAdapter}
  * in the form of cards.
  */
-public class PhoneFavoriteMergedAdapter extends BaseAdapter {
+public class ShortcutCardsAdapter extends BaseAdapter {
 
     private class CustomDataSetObserver extends DataSetObserver {
         @Override
@@ -47,7 +47,7 @@
         }
     }
 
-    private static final String TAG = PhoneFavoriteMergedAdapter.class.getSimpleName();
+    private static final String TAG = ShortcutCardsAdapter.class.getSimpleName();
 
     private final CallLogAdapter mCallLogAdapter;
     private final ListsFragment mFragment;
@@ -93,7 +93,7 @@
         }
     };
 
-    public PhoneFavoriteMergedAdapter(Context context,
+    public ShortcutCardsAdapter(Context context,
             ListsFragment fragment,
             CallLogAdapter callLogAdapter) {
         final Resources resources = context.getResources();
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java
similarity index 95%
rename from src/com/android/dialer/list/PhoneFavoriteFragment.java
rename to src/com/android/dialer/list/SpeedDialFragment.java
index 05e2d44..9de75bb 100644
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -50,14 +50,9 @@
 import java.util.HashMap;
 
 /**
- * Fragment for Phone UI's favorite screen.
- *
- * This fragment contains three kinds of contacts in one screen: "starred", "frequent", and "all"
- * contacts. To show them at once, this merges results from {@link com.android.contacts.common.list.ContactTileAdapter} and
- * {@link com.android.contacts.common.list.PhoneNumberListAdapter} into one unified list using {@link PhoneFavoriteMergedAdapter}.
- * A contact filter header is also inserted between those adapters' results.
+ * This fragment displays the user's favorite/frequent contacts in a grid.
  */
-public class PhoneFavoriteFragment extends Fragment implements OnItemClickListener,
+public class SpeedDialFragment extends Fragment implements OnItemClickListener,
         PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener {
 
     /**
@@ -69,7 +64,7 @@
      */
     private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
 
-    private static final String TAG = PhoneFavoriteFragment.class.getSimpleName();
+    private static final String TAG = SpeedDialFragment.class.getSimpleName();
     private static final boolean DEBUG = false;
 
     private int mAnimationDuration;
diff --git a/src/com/android/dialer/list/TileInteractionTeaserView.java b/src/com/android/dialer/list/TileInteractionTeaserView.java
index 6e70fd1..fd5ed34 100644
--- a/src/com/android/dialer/list/TileInteractionTeaserView.java
+++ b/src/com/android/dialer/list/TileInteractionTeaserView.java
@@ -31,7 +31,7 @@
     private int mTextTop;
     private int mAnimatedHeight = -1;
 
-    private PhoneFavoriteMergedAdapter mAdapter;
+    private ShortcutCardsAdapter mAdapter;
 
     public TileInteractionTeaserView(final Context context) {
         this(context, null);
@@ -91,7 +91,7 @@
         return prefs.getBoolean(KEY_TILE_INTERACTION_TEASER_SHOWN, true);
     }
 
-    public void setAdapter(PhoneFavoriteMergedAdapter adapter) {
+    public void setAdapter(ShortcutCardsAdapter adapter) {
         mAdapter = adapter;
     }
 
