diff --git a/src/com/android/contacts/detail/ContactDetailHeaderView.java b/src/com/android/contacts/detail/ContactDetailHeaderView.java
index b88b43e..795ed62 100644
--- a/src/com/android/contacts/detail/ContactDetailHeaderView.java
+++ b/src/com/android/contacts/detail/ContactDetailHeaderView.java
@@ -200,26 +200,28 @@
         // Check the preference for display name ordering, and bold the contact's first name if
         // possible.
         ContactsPreferences prefs = new ContactsPreferences(getContext());
-        CharSequence styledName;
-        if (prefs.getDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
-            int overlapPoint = FormatUtils.overlapPoint(
-                    displayName.toString(), altDisplayName.toString());
-            if (overlapPoint > 0) {
-                styledName = FormatUtils.applyStyleToSpan(Typeface.BOLD,
-                        displayName, 0, overlapPoint, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        CharSequence styledName = "";
+        if (!TextUtils.isEmpty(displayName) && !TextUtils.isEmpty(altDisplayName)) {
+            if (prefs.getDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
+                int overlapPoint = FormatUtils.overlapPoint(
+                        displayName.toString(), altDisplayName.toString());
+                if (overlapPoint > 0) {
+                    styledName = FormatUtils.applyStyleToSpan(Typeface.BOLD,
+                            displayName, 0, overlapPoint, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                } else {
+                    styledName = displayName;
+                }
             } else {
-                styledName = displayName;
-            }
-        } else {
-            // Displaying alternate display name.
-            int overlapPoint = FormatUtils.overlapPoint(
-                    altDisplayName.toString(), displayName.toString());
-            if (overlapPoint > 0) {
-                styledName = FormatUtils.applyStyleToSpan(Typeface.BOLD,
-                        altDisplayName, overlapPoint, altDisplayName.length(),
-                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-            } else {
-                styledName = altDisplayName;
+                // Displaying alternate display name.
+                int overlapPoint = FormatUtils.overlapPoint(
+                        altDisplayName.toString(), displayName.toString());
+                if (overlapPoint > 0) {
+                    styledName = FormatUtils.applyStyleToSpan(Typeface.BOLD,
+                            altDisplayName, overlapPoint, altDisplayName.length(),
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                } else {
+                    styledName = altDisplayName;
+                }
             }
         }
         mDisplayNameView.setText(styledName);
diff --git a/tests/src/com/android/contacts/ContactLoaderTest.java b/tests/src/com/android/contacts/ContactLoaderTest.java
index 503fc64..0e0e2b0 100644
--- a/tests/src/com/android/contacts/ContactLoaderTest.java
+++ b/tests/src/com/android/contacts/ContactLoaderTest.java
@@ -29,10 +29,12 @@
 import android.provider.ContactsContract.RawContacts;
 import android.provider.ContactsContract.StatusUpdates;
 import android.test.LoaderTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
 
 /**
  * Runs ContactLoader tests for the the contact-detail and editor view.
  */
+@LargeTest
 public class ContactLoaderTest extends LoaderTestCase {
     ContactsMockContext mMockContext;
     MockContentProvider mContactsProvider;
@@ -265,7 +267,8 @@
             mContactsProvider.expectQuery(baseUri)
                     .withProjection(new String[] {
                         Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE,
-                        Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME, Contacts.PHONETIC_NAME,
+                        Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME,
+                        Contacts.DISPLAY_NAME_ALTERNATIVE, Contacts.PHONETIC_NAME,
                         Contacts.PHOTO_ID, Contacts.STARRED, Contacts.CONTACT_PRESENCE,
                         Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_TIMESTAMP,
                         Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_LABEL,
@@ -299,7 +302,7 @@
                     .withSortOrder(Contacts.Entity.RAW_CONTACT_ID)
                     .returnRow(
                         rawContactId, 40,
-                        "aa%12%@!", "John Doe", "jdo",
+                        "aa%12%@!", "John Doe", "Doe, John", "jdo",
                         0, 0, StatusUpdates.AVAILABLE,
                         "Having lunch", 0,
                         "mockPkg1", 10,
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
index 3eedef0..ef1afd0 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
@@ -25,6 +25,7 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.provider.CallLog.Calls;
 import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.view.View;
 import android.widget.FrameLayout;
@@ -44,7 +45,7 @@
  *   adb shell am instrument \
  *     -w com.android.contacts.tests/android.test.InstrumentationTestRunner
  */
-
+@LargeTest
 public class CallLogActivityTests
         extends ActivityInstrumentationTestCase2<CallLogActivity> {
     static private final String TAG = "CallLogActivityTests";
