diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 9191b8e..1200cdf 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -303,8 +303,9 @@
                     ViewAdapter adapter = new ViewAdapter(this, actions);
                     setListAdapter(adapter);
                 }
-                mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews, date, callType,
-                        nameText, numberText, numberType, numberLabel);
+                mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews,
+                        new PhoneCallDetails(numberText, callType, date, nameText, numberType,
+                                numberLabel));
 
                 loadContactPhotos(photoId);
             } else {
diff --git a/src/com/android/contacts/PhoneCallDetails.java b/src/com/android/contacts/PhoneCallDetails.java
new file mode 100644
index 0000000..8ed6bee
--- /dev/null
+++ b/src/com/android/contacts/PhoneCallDetails.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 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;
+
+import android.provider.CallLog.Calls;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+
+/**
+ * The details of a phone call to be shown in the UI.
+ */
+public class PhoneCallDetails {
+    /** The number of the other party involved in the call. */
+    public final CharSequence number;
+    /** The type of call, as defined in the call log table, e.g., {@link Calls#INCOMING_TYPE}. */
+    public final int callType;
+    /** The date of the call, in milliseconds since the epoch. */
+    public final long date;
+    /** The name of the contact, or the empty string. */
+    public final CharSequence name;
+    /** The type of phone, e.g., {@link Phone#TYPE_HOME}, 0 if not available. */
+    public final int numberType;
+    /** The custom label associated with the phone number in the contact, or the empty string. */
+    public final CharSequence numberLabel;
+
+    /** Create the details for a call with a number not associated with a contact. */
+    public PhoneCallDetails(CharSequence number, int callType, long date) {
+        this(number, callType, date, "", 0, "");
+    }
+
+    /** Create the details for a call with a number associated with a contact. */
+    public PhoneCallDetails(CharSequence number, int callType, long date, CharSequence name,
+            int numberType, CharSequence numberLabel) {
+        this.number = number;
+        this.callType = callType;
+        this.date = date;
+        this.name = name;
+        this.numberType = numberType;
+        this.numberLabel = numberLabel;
+    }
+}
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index 72ab6cb..f884df7 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -69,21 +69,10 @@
         mVoicemailDrawable = voicemailDrawable;
     }
 
-    /**
-     * Fills the call details views with content.
-     *
-     * @param date the date of the call, in milliseconds since the epoch
-     * @param callType the type of call, as defined in the call log table
-     * @param name the name of the contact, if available
-     * @param number the number of the other party involved in the call
-     * @param numberType the type of phone, e.g., {@link Phone#TYPE_HOME}, 0 if not available
-     * @param numberLabel the custom label associated with the phone number in the contact
-     */
-    public void setPhoneCallDetails(PhoneCallDetailsViews views, long date,
-            int callType, CharSequence name, CharSequence number, int numberType,
-            CharSequence numberLabel) {
+    /** Fills the call details views with content. */
+    public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details) {
         Drawable callTypeDrawable = null;
-        switch (callType) {
+        switch (details.callType) {
             case Calls.INCOMING_TYPE:
                 callTypeDrawable = mIncomingDrawable;
                 break;
@@ -101,26 +90,28 @@
                 break;
         }
         CharSequence shortDateText =
-            DateUtils.getRelativeTimeSpanString(date,
+            DateUtils.getRelativeTimeSpanString(details.date,
                     getCurrentTimeMillis(),
                     DateUtils.MINUTE_IN_MILLIS,
                     DateUtils.FORMAT_ABBREV_RELATIVE);
 
         CharSequence numberFormattedLabel = null;
         // Only show a label if the number is shown and it is not a SIP address.
-        if (!TextUtils.isEmpty(number) && !PhoneNumberUtils.isUriNumber(number.toString())) {
-            numberFormattedLabel = Phone.getTypeLabel(mResources, numberType, numberLabel);
+        if (!TextUtils.isEmpty(details.number)
+                && !PhoneNumberUtils.isUriNumber(details.number.toString())) {
+            numberFormattedLabel = Phone.getTypeLabel(mResources, details.numberType,
+                    details.numberLabel);
         }
 
         final CharSequence nameText;
         final CharSequence numberText;
-        if (TextUtils.isEmpty(name)) {
-            nameText = getDisplayNumber(number);
+        if (TextUtils.isEmpty(details.name)) {
+            nameText = getDisplayNumber(details.number);
             numberText = "";
         } else {
-            nameText = name;
-            CharSequence displayNumber = getDisplayNumber(number);
-            if (callType != 0 && numberFormattedLabel != null) {
+            nameText = details.name;
+            CharSequence displayNumber = getDisplayNumber(details.number);
+            if (details.callType != 0 && numberFormattedLabel != null) {
                 numberText = FormatUtils.applyStyleToSpan(Typeface.BOLD,
                         numberFormattedLabel + " " + displayNumber, 0,
                         numberFormattedLabel.length(),
