diff --git a/src/com/android/contacts/common/util/ContactDisplayUtils.java b/src/com/android/contacts/common/util/ContactDisplayUtils.java
index ca91024..ca5fdbd 100644
--- a/src/com/android/contacts/common/util/ContactDisplayUtils.java
+++ b/src/com/android/contacts/common/util/ContactDisplayUtils.java
@@ -22,11 +22,14 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.Spannable;
 import android.text.SpannableString;
+import android.text.TextUtils;
 import android.text.style.TtsSpan;
 import android.util.Log;
 import android.util.Patterns;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.common.testing.NeededForTesting;
 
 import com.google.common.base.Preconditions;
 
@@ -220,4 +223,40 @@
         }
         return spannable;
     }
+
+    /**
+     * Returns either namePrimary or nameAlternative based on the value of displayOrderPreference
+     *
+     * In the event that nameAlternative is empty or displayOrderPreference is neither
+     * {@link ContactsPreferences#DISPLAY_ORDER_PRIMARY} nor
+     * {@link ContactsPreferences#DISPLAY_ORDER_ALTERNATIVE}, namePrimary is returned
+     *
+     * @param namePrimary the primary name
+     * @param nameAlternative the alternative name
+     * @param displayOrderPreference one of {@link ContactsPreferences#DISPLAY_ORDER_PRIMARY} or
+     *          {@link ContactsPreferences#DISPLAY_ORDER_ALTERNATIVE}
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference
+     */
+    @NeededForTesting // TODO Temporary until used in source
+    public static String getPreferredName(String namePrimary, String nameAlternative,
+            int displayOrderPreference) {
+        if (TextUtils.isEmpty(nameAlternative)) {
+            Log.d(TAG, "nameAlternative was empty - defaulting to primary");
+            return namePrimary;
+        }
+
+        if (displayOrderPreference != ContactsPreferences.DISPLAY_ORDER_PRIMARY
+                && displayOrderPreference != ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE) {
+            Log.d(TAG, "Attempted to get preferredName with invalid preference "
+                    + "- defaulting to primary");
+            return namePrimary;
+        }
+
+
+        if (displayOrderPreference == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+            return namePrimary;
+        }
+
+        return nameAlternative;
+    }
 }
diff --git a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
index 544abbb..3871b7c 100644
--- a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
+++ b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
@@ -22,6 +22,7 @@
 import android.test.suitebuilder.annotation.SmallTest;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.preference.ContactsPreferences;
 
 /**
  * Unit tests for (@link ContactDisplayUtils}
@@ -29,6 +30,9 @@
 @SmallTest
 public class ContactDisplayUtilTests extends AndroidTestCase {
 
+    private static final String NAME_PRIMARY = "Name Primary";
+    private static final String NAME_ALTERNATIVE = "Name Alternative";
+
     public void testIsCustomPhoneTypeReturnsTrue() {
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
@@ -92,4 +96,23 @@
         assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
     }
 
+    public void testGetPreferredNameEmptyAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY, "",
+                ContactsPreferences.DISPLAY_ORDER_PRIMARY));
+    }
+
+    public void testGetPreferredInvalidPreference() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, -1));
+    }
+
+    public void testGetPreferredNamePrimary() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_PRIMARY));
+    }
+
+    public void testGetPreferredNameAlternative() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
+    }
 }
