diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index a4de03f..441cc6c 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -77,7 +77,8 @@
         android:layout_alignTop="@id/photo_text_bar"
         android:layout_marginRight="@dimen/call_log_outer_margin"
     />
-    <RelativeLayout
+    <TextView
+        android:id="@+id/header_text"
         android:layout_width="wrap_content"
         android:layout_height="0dip"
         android:layout_alignLeft="@id/photo_text_bar"
@@ -86,9 +87,10 @@
         android:layout_alignBottom="@id/photo_text_bar"
         android:layout_marginRight="@dimen/call_log_inner_margin"
         android:layout_marginLeft="@dimen/call_detail_contact_name_margin"
-    >
-        <include layout="@layout/call_log_phone_call_details" />
-    </RelativeLayout>
+        android:textColor="?attr/call_log_primary_text_color"
+        android:textSize="18sp"
+        android:singleLine="true"
+    />
     <ImageButton
         android:id="@+id/main_action_push_layer"
         android:layout_width="match_parent"
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index d093453..cd5ba14 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -77,11 +77,10 @@
     /** If we should immediately start playback of the voicemail, this extra will be set to true. */
     public static final String EXTRA_VOICEMAIL_START_PLAYBACK = "EXTRA_VOICEMAIL_START_PLAYBACK";
 
-    /** The views representing the details of a phone call. */
-    private PhoneCallDetailsViews mPhoneCallDetailsViews;
     private CallTypeHelper mCallTypeHelper;
     private PhoneNumberHelper mPhoneNumberHelper;
     private PhoneCallDetailsHelper mPhoneCallDetailsHelper;
+    private TextView mHeaderTextView;
     private ImageView mMainActionView;
     private ImageButton mMainActionPushLayerView;
     private ImageView mContactBackgroundView;
@@ -145,13 +144,13 @@
         mInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
         mResources = getResources();
 
-        mPhoneCallDetailsViews = PhoneCallDetailsViews.fromView(getWindow().getDecorView());
         mCallTypeHelper = new CallTypeHelper(getResources());
         mPhoneNumberHelper = new PhoneNumberHelper(mResources, getVoicemailNumber());
         mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
                 mPhoneNumberHelper);
         mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
         mAsyncQueryHandler = new CallDetailActivityQueryHandler(this);
+        mHeaderTextView = (TextView) findViewById(R.id.header_text);
         mStatusMessageView = findViewById(R.id.voicemail_status);
         mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message);
         mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action);
@@ -276,8 +275,7 @@
         final Uri photoUri = details[0].photoUri;
 
         // Set the details header, based on the first phone call.
-        mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews,
-                details[0], false, false, true);
+        mPhoneCallDetailsHelper.setPhoneCallName(mHeaderTextView, details[0]);
 
         // Cache the details about the phone number.
         final Uri numberCallUri = mPhoneNumberHelper.getCallUri(mNumber);
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index 8cdd0d0..08e6a56 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -28,6 +28,7 @@
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.view.View;
+import android.widget.TextView;
 
 /**
  * Helper class to fill in the views in {@link PhoneCallDetailsViews}.
@@ -59,7 +60,7 @@
 
     /** Fills the call details views with content. */
     public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
-            boolean useIcons, boolean isHighlighted, boolean nameOnly) {
+            boolean useIcons, boolean isHighlighted) {
         if (useIcons) {
             views.callTypeIcons.clear();
             int count = details.callTypes.length;
@@ -130,21 +131,22 @@
         }
 
         views.dateView.setText(shortDateText);
-        views.dateView.setVisibility(View.VISIBLE);
         views.nameView.setText(nameText);
-        views.nameView.setVisibility(View.VISIBLE);
-        // Do not show the number if it is not available. This happens if we have only the number,
-        // in which case the number is shown in the name field instead.
-        if (!TextUtils.isEmpty(numberText)) {
-            views.numberView.setText(numberText);
-            views.numberView.setVisibility(View.VISIBLE);
+        views.numberView.setText(numberText);
+    }
+
+    /** Sets the name in the text view for the given phone call. */
+    public void setPhoneCallName(TextView nameView, PhoneCallDetails details) {
+        final CharSequence nameText;
+        final CharSequence displayNumber =
+            mPhoneNumberHelper.getDisplayNumber(details.number, details.formattedNumber);
+        if (TextUtils.isEmpty(details.name)) {
+            nameText = displayNumber;
         } else {
-            views.numberView.setVisibility(View.GONE);
+            nameText = details.name;
         }
 
-        // Hide the rest if not visible.
-        views.callTypeView.setVisibility(nameOnly ? View.GONE : View.VISIBLE);
-        views.numberView.setVisibility(nameOnly ? View.GONE : View.VISIBLE);
+        nameView.setText(nameText);
     }
 
     public void setCurrentTimeForTest(long currentTimeMillis) {
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index d8184d2..a448399 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -54,7 +54,7 @@
     public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
             boolean useIcons, boolean isHighlighted) {
         mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details, useIcons,
-                isHighlighted, false);
+                isHighlighted);
         boolean canCall = mPhoneNumberHelper.canPlaceCallsTo(details.number);
         boolean canPlay = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
 
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 0d371d8..21b9a6f 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -26,6 +26,7 @@
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
 import android.view.View;
+import android.widget.TextView;
 
 import java.util.GregorianCalendar;
 import java.util.Locale;
@@ -51,6 +52,7 @@
     private PhoneCallDetailsHelper mHelper;
     /** The views to fill. */
     private PhoneCallDetailsViews mViews;
+    private TextView mNameView;
     private PhoneNumberHelper mPhoneNumberHelper;
 
     @Override
@@ -62,6 +64,7 @@
         mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
         mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, mPhoneNumberHelper);
         mViews = PhoneCallDetailsViews.createForTest(context);
+        mNameView = new TextView(context);
     }
 
     @Override
@@ -197,12 +200,17 @@
         }
     }
 
-    public void testSetPhoneCallDetails_NameOnly() {
-        setPhoneCallDetailsNameOnly();
-        assertEquals(View.VISIBLE, mViews.nameView.getVisibility());
-        assertEquals(View.GONE, mViews.numberView.getVisibility());
-        assertEquals(View.GONE, mViews.callTypeView.getVisibility());
-    }
+    public void testSetPhoneName_NumberOnly() {
+      setPhoneCallNameWithNumberOnly();
+      assertEquals(View.VISIBLE, mNameView.getVisibility());
+      assertEquals(TEST_FORMATTED_NUMBER, mNameView.getText().toString());
+  }
+
+    public void testSetPhoneName() {
+      setPhoneCallName("John Doe");
+      assertEquals(View.VISIBLE, mNameView.getVisibility());
+      assertEquals("John Doe", mNameView.getText().toString());
+  }
 
     /** Asserts that the name text field contains the value of the given string resource. */
     private void assertNameEqualsResource(int resId) {
@@ -265,7 +273,7 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO,
                         new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION),
-                false, false, false);
+                false, false);
     }
 
     /** Sets the phone call details with default values and the given date. */
@@ -273,7 +281,7 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
                         new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION),
-                false, false, false);
+                false, false);
     }
 
     /** Sets the phone call details with default values and the given call types using icons. */
@@ -290,13 +298,19 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
                         callTypes, TEST_DATE, TEST_DURATION),
-                useIcons, false, false);
+                useIcons, false);
     }
 
-    private void setPhoneCallDetailsNameOnly() {
-        mHelper.setPhoneCallDetails(mViews,
+    private void setPhoneCallNameWithNumberOnly() {
+        mHelper.setPhoneCallName(mNameView,
                 new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION),
-                true, false, true);
+                        new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION));
+    }
+
+    private void setPhoneCallName(String name) {
+        mHelper.setPhoneCallName(mNameView,
+                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
+                        new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
+                        name, 0, "", 1, null));
     }
 }
