diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index c984b7a..849923d 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -40,15 +40,14 @@
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.R;
-import com.android.contacts.detail.ContactDetailDisplayUtils;
+import com.android.contacts.common.model.Contact;
+import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.detail.ContactDetailFragment;
 import com.android.contacts.detail.ContactDetailLayoutController;
+import com.android.contacts.detail.ContactDisplayUtils;
 import com.android.contacts.detail.ContactLoaderFragment;
 import com.android.contacts.detail.ContactLoaderFragment.ContactLoaderFragmentListener;
 import com.android.contacts.interactions.ContactDeletionInteraction;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.util.PhoneCapabilityTester;
 
 import java.util.ArrayList;
 
@@ -115,7 +114,7 @@
                     final boolean isStarred = starredMenuItem.isChecked();
 
                     // To improve responsiveness, swap out the picture (and tag) in the UI already
-                    ContactDetailDisplayUtils.configureStarredMenuItem(starredMenuItem,
+                    ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
                             mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                             !isStarred);
 
@@ -129,7 +128,7 @@
         });
         // If there is contact data, update the starred state
         if (mContactData != null) {
-            ContactDetailDisplayUtils.configureStarredMenuItem(starredMenuItem,
+            ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
                     mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                     mContactData.getStarred());
         }
@@ -209,8 +208,8 @@
      * Setup the activity title and subtitle with contact name and company.
      */
     private void setupTitle() {
-        CharSequence displayName = ContactDetailDisplayUtils.getDisplayName(this, mContactData);
-        String company =  ContactDetailDisplayUtils.getCompany(this, mContactData);
+        CharSequence displayName = ContactDisplayUtils.getDisplayName(this, mContactData);
+        String company =  ContactDisplayUtils.getCompany(this, mContactData);
 
         ActionBar actionBar = getActionBar();
         actionBar.setTitle(displayName);
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 85581d5..50be097 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -18,7 +18,6 @@
 
 import android.app.Activity;
 import android.app.Fragment;
-import android.app.SearchManager;
 import android.content.ComponentName;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -26,21 +25,16 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
-import android.net.ParseException;
 import android.net.Uri;
-import android.net.WebAddress;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.provider.CalendarContract;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.DisplayNameSources;
 import android.provider.ContactsContract.StatusUpdates;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -75,30 +69,24 @@
 import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.ClipboardUtils;
-import com.android.contacts.common.Collapser;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.GroupMetaData;
 import com.android.contacts.common.Collapser.Collapsible;
 import com.android.contacts.common.ContactPresenceIconUtil;
-import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.GroupMetaData;
 import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.editor.SelectAccountDialogFragment;
 import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ContactDisplayUtils;
-import com.android.contacts.common.util.DataStatus;
-import com.android.contacts.common.util.DateUtils;
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.RawContact;
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.AccountType.EditType;
+import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.dataitem.DataItem;
+import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.model.dataitem.EmailDataItem;
 import com.android.contacts.common.model.dataitem.EventDataItem;
 import com.android.contacts.common.model.dataitem.GroupMembershipDataItem;
@@ -112,17 +100,16 @@
 import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
 import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
 import com.android.contacts.common.model.dataitem.WebsiteDataItem;
+import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
+import com.android.contacts.common.util.DataStatus;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.StructuredPostalUtils;
 import com.android.contacts.util.UiClosables;
-import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
 import com.google.common.collect.Iterables;
 
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -378,7 +365,7 @@
      * list cannot have a positive offset.
      */
     public int getFirstListItemOffset() {
-        return ContactDetailDisplayUtils.getFirstListItemOffset(mListView);
+        return ContactDisplayUtils.getFirstListItemOffset(mListView);
     }
 
     /**
@@ -387,7 +374,7 @@
      * @param offset which should be <= 0
      */
     public void requestToMoveToOffset(int offset) {
-        ContactDetailDisplayUtils.requestToMoveToOffset(mListView, offset);
+        ContactDisplayUtils.requestToMoveToOffset(mListView, offset);
     }
 
     protected void bindData() {
@@ -581,7 +568,8 @@
                         entry.secondaryIntent = smsIntent;
                         entry.secondaryActionIcon = kind.iconAltRes;
                         entry.secondaryActionDescription =
-                            ContactDisplayUtils.getSmsLabelResourceId(entry.type);
+                                com.android.contacts.common.util.ContactDisplayUtils.
+                                        getSmsLabelResourceId(entry.type);
                     } else if (hasPhone) {
                         entry.intent = phoneIntent;
                     } else if (hasSms) {
@@ -786,7 +774,7 @@
      * done manually because phonetic name doesn't have a mimetype or action intent.
      */
     private void addPhoneticName() {
-        String phoneticName = ContactDetailDisplayUtils.getPhoneticName(mContext, mContactData);
+        String phoneticName = ContactDisplayUtils.getPhoneticName(mContext, mContactData);
         if (TextUtils.isEmpty(phoneticName)) {
             return;
         }
@@ -809,7 +797,7 @@
      * to the same {@link DataKind}.
      */
     private void addNetworks() {
-        String attribution = ContactDetailDisplayUtils.getAttribution(mContext, mContactData);
+        String attribution = ContactDisplayUtils.getAttribution(mContext, mContactData);
         boolean hasAttribution = !TextUtils.isEmpty(attribution);
         int networksCount = mOtherEntriesMap.keySet().size();
 
@@ -1519,9 +1507,9 @@
                 result.setTag(viewCache);
             }
 
-            ContactDetailDisplayUtils.setDisplayName(mContext, mContactData,
+            ContactDisplayUtils.setDisplayName(mContext, mContactData,
                     viewCache.displayNameView);
-            ContactDetailDisplayUtils.setCompanyName(mContext, mContactData, viewCache.companyView);
+            ContactDisplayUtils.setCompanyName(mContext, mContactData, viewCache.companyView);
 
             // Set the photo if it should be displayed
             if (viewCache.photoView != null) {
@@ -1537,7 +1525,7 @@
             // Set the starred state if it should be displayed
             final ImageView favoritesStar = viewCache.starredView;
             if (favoritesStar != null) {
-                ContactDetailDisplayUtils.configureStarredImageView(favoritesStar,
+                ContactDisplayUtils.configureStarredImageView(favoritesStar,
                         mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                         mContactData.getStarred());
                 final Uri lookupUri = mContactData.getLookupUri();
@@ -1556,7 +1544,7 @@
 
                             // To improve responsiveness, swap out the picture (and tag) in the UI
                             // already
-                            ContactDetailDisplayUtils.configureStarredImageView(favoritesStar,
+                            ContactDisplayUtils.configureStarredImageView(favoritesStar,
                                     mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                                     !isStarred);
 
@@ -1715,7 +1703,8 @@
             String secondaryActionDescription = null;
             if (entry.secondaryActionIcon != -1) {
                 secondaryActionIcon = resources.getDrawable(entry.secondaryActionIcon);
-                if (ContactDisplayUtils.isCustomPhoneType(entry.type)) {
+                if (com.android.contacts.common.util.ContactDisplayUtils.isCustomPhoneType(
+                        entry.type)) {
                     secondaryActionDescription = resources.getString(
                             entry.secondaryActionDescription, entry.typeString);
                 } else {
diff --git a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java b/src/com/android/contacts/detail/ContactDisplayUtils.java
similarity index 99%
rename from src/com/android/contacts/detail/ContactDetailDisplayUtils.java
rename to src/com/android/contacts/detail/ContactDisplayUtils.java
index 2684af7..1180219 100644
--- a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDisplayUtils.java
@@ -50,8 +50,8 @@
  * (meaning name, phonetic name, job, and attribution) from a
  * {@link Contact} data object to appropriate {@link View}s.
  */
-public class ContactDetailDisplayUtils {
-    private static final String TAG = "ContactDetailDisplayUtils";
+public class ContactDisplayUtils {
+    private static final String TAG = "ContactDisplayUtils";
 
     /**
      * Returns the display name of the contact, using the current display order setting.
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 5eb1fd5..06622b6 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -114,7 +114,7 @@
 import com.android.contacts.common.util.DateUtils;
 import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.detail.ContactDetailDisplayUtils;
+import com.android.contacts.detail.ContactDisplayUtils;
 import com.android.contacts.interactions.CalendarInteractionsLoader;
 import com.android.contacts.interactions.CallLogInteractionsLoader;
 import com.android.contacts.interactions.ContactDeletionInteraction;
@@ -687,7 +687,7 @@
         mPhotoSetter.setupContactPhoto(data, mPhotoView);
         extractAndApplyTintFromPhotoViewAsynchronously();
         analyzeWhitenessOfPhotoAsynchronously();
-        setHeaderNameText(data.getDisplayName());
+        setHeaderNameText(ContactDisplayUtils.getDisplayName(this, data).toString());
 
         Trace.endSection();
 
@@ -1579,7 +1579,7 @@
             final boolean isStarred = starredMenuItem.isChecked();
 
             // To improve responsiveness, swap out the picture (and tag) in the UI already
-            ContactDetailDisplayUtils.configureStarredMenuItem(starredMenuItem,
+            ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
                     mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                     !isStarred);
 
@@ -1677,7 +1677,7 @@
     public boolean onPrepareOptionsMenu(Menu menu) {
         if (mContactData != null) {
             final MenuItem starredMenuItem = menu.findItem(R.id.menu_star);
-            ContactDetailDisplayUtils.configureStarredMenuItem(starredMenuItem,
+            ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
                     mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
                     mContactData.getStarred());
             // Configure edit MenuItem
diff --git a/src/com/android/contacts/widget/AlphaTouchInterceptorOverlay.java b/src/com/android/contacts/widget/AlphaTouchInterceptorOverlay.java
index 8779a95..f203193 100644
--- a/src/com/android/contacts/widget/AlphaTouchInterceptorOverlay.java
+++ b/src/com/android/contacts/widget/AlphaTouchInterceptorOverlay.java
@@ -20,7 +20,7 @@
 import android.view.View;
 import android.widget.FrameLayout;
 
-import com.android.contacts.detail.ContactDetailDisplayUtils;
+import com.android.contacts.detail.ContactDisplayUtils;
 import com.android.contacts.util.ThemeUtils;
 
 /**
@@ -66,7 +66,7 @@
         if (mAlphaLayer == alphaLayer) return;
 
         // We're no longer the alpha-layer, so make ourself invisible.
-        if (mAlphaLayer == this) ContactDetailDisplayUtils.setAlphaOnViewBackground(this, 0.0f);
+        if (mAlphaLayer == this) ContactDisplayUtils.setAlphaOnViewBackground(this, 0.0f);
 
         mAlphaLayer = (alphaLayer == null) ? this : alphaLayer;
         setAlphaLayerValue(mAlpha);
@@ -76,7 +76,7 @@
     public void setAlphaLayerValue(float alpha) {
         mAlpha = alpha;
         if (mAlphaLayer != null) {
-            ContactDetailDisplayUtils.setAlphaOnViewBackground(mAlphaLayer, mAlpha);
+            ContactDisplayUtils.setAlphaOnViewBackground(mAlphaLayer, mAlpha);
         }
     }
 
