diff --git a/chips/src/com/android/ex/chips/BaseRecipientAdapter.java b/chips/src/com/android/ex/chips/BaseRecipientAdapter.java
index c24188a..fb6378b 100644
--- a/chips/src/com/android/ex/chips/BaseRecipientAdapter.java
+++ b/chips/src/com/android/ex/chips/BaseRecipientAdapter.java
@@ -148,6 +148,7 @@
         public final long contactId;
         public final long dataId;
         public final String thumbnailUriString;
+        public final int displayNameSource;
 
         public TemporaryEntry(Cursor cursor) {
             this.displayName = cursor.getString(Queries.Query.NAME);
@@ -157,6 +158,7 @@
             this.contactId = cursor.getLong(Queries.Query.CONTACT_ID);
             this.dataId = cursor.getLong(Queries.Query.DATA_ID);
             this.thumbnailUriString = cursor.getString(Queries.Query.PHOTO_THUMBNAIL_URI);
+            this.displayNameSource = cursor.getInt(Queries.Query.DISPLAY_NAME_SOURCE);
         }
     }
 
@@ -624,6 +626,7 @@
         if (!isAggregatedEntry) {
             nonAggregatedEntries.add(RecipientEntry.constructTopLevelEntry(
                     entry.displayName,
+                    entry.displayNameSource,
                     entry.destination, entry.destinationType, entry.destinationLabel,
                     entry.contactId, entry.dataId, entry.thumbnailUriString));
         } else if (entryMap.containsKey(entry.contactId)) {
@@ -631,12 +634,14 @@
             final List<RecipientEntry> entryList = entryMap.get(entry.contactId);
             entryList.add(RecipientEntry.constructSecondLevelEntry(
                     entry.displayName,
+                    entry.displayNameSource,
                     entry.destination, entry.destinationType, entry.destinationLabel,
                     entry.contactId, entry.dataId, entry.thumbnailUriString));
         } else {
             final List<RecipientEntry> entryList = new ArrayList<RecipientEntry>();
             entryList.add(RecipientEntry.constructTopLevelEntry(
                     entry.displayName,
+                    entry.displayNameSource,
                     entry.destination, entry.destinationType, entry.destinationLabel,
                     entry.contactId, entry.dataId, entry.thumbnailUriString));
             entryMap.put(entry.contactId, entryList);
@@ -840,7 +845,12 @@
                 if (TextUtils.isEmpty(displayName)
                         || TextUtils.equals(displayName, destination)) {
                     displayName = destination;
-                    destination = null;
+
+                    // We only show the destination for secondary entries, so clear it only for
+                    // the first level.
+                    if (entry.isFirstLevel()) {
+                        destination = null;
+                    }
                 }
 
                 final View itemView = convertView != null ? convertView
diff --git a/chips/src/com/android/ex/chips/Queries.java b/chips/src/com/android/ex/chips/Queries.java
index cfea9c1..f44ce73 100644
--- a/chips/src/com/android/ex/chips/Queries.java
+++ b/chips/src/com/android/ex/chips/Queries.java
@@ -34,7 +34,8 @@
             Phone.LABEL,                 // 3
             Phone.CONTACT_ID,            // 4
             Phone._ID,                   // 5
-            Contacts.PHOTO_THUMBNAIL_URI // 6
+            Contacts.PHOTO_THUMBNAIL_URI,// 6
+            Contacts.DISPLAY_NAME_SOURCE // 7
         }, Phone.CONTENT_FILTER_URI, Phone.CONTENT_URI) {
 
             @Override
@@ -51,8 +52,8 @@
             Email.LABEL,                 // 3
             Email.CONTACT_ID,            // 4
             Email._ID,                   // 5
-            Contacts.PHOTO_THUMBNAIL_URI // 6
-
+            Contacts.PHOTO_THUMBNAIL_URI,// 6
+            Contacts.DISPLAY_NAME_SOURCE // 7
         }, Email.CONTENT_FILTER_URI, Email.CONTENT_URI) {
 
             @Override
@@ -74,6 +75,7 @@
         public static final int CONTACT_ID = 4;
         public static final int DATA_ID = 5;
         public static final int PHOTO_THUMBNAIL_URI = 6;
+        public static final int DISPLAY_NAME_SOURCE = 7;
 
         public Query (String[] projection, Uri contentFilter, Uri content) {
             mProjection = projection;
diff --git a/chips/src/com/android/ex/chips/RecipientAlternatesAdapter.java b/chips/src/com/android/ex/chips/RecipientAlternatesAdapter.java
index 80abdcd..9bc4645 100644
--- a/chips/src/com/android/ex/chips/RecipientAlternatesAdapter.java
+++ b/chips/src/com/android/ex/chips/RecipientAlternatesAdapter.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.database.Cursor;
+import android.provider.ContactsContract.DisplayNameSources;
 import android.text.util.Rfc822Token;
 import android.text.util.Rfc822Tokenizer;
 import android.util.Log;
@@ -104,6 +105,7 @@
                         String address = c.getString(Queries.Query.DESTINATION);
                         recipientEntries.put(address, RecipientEntry.constructTopLevelEntry(
                                 c.getString(Queries.Query.NAME),
+                                c.getInt(Queries.Query.DISPLAY_NAME_SOURCE),
                                 c.getString(Queries.Query.DESTINATION),
                                 c.getInt(Queries.Query.DESTINATION_TYPE),
                                 c.getString(Queries.Query.DESTINATION_LABEL),
@@ -180,6 +182,7 @@
         c.moveToPosition(position);
         return RecipientEntry.constructTopLevelEntry(
                 c.getString(Queries.Query.NAME),
+                c.getInt(Queries.Query.DISPLAY_NAME_SOURCE),
                 c.getString(Queries.Query.DESTINATION),
                 c.getInt(Queries.Query.DESTINATION_TYPE),
                 c.getString(Queries.Query.DESTINATION_LABEL),
diff --git a/chips/src/com/android/ex/chips/RecipientEditTextView.java b/chips/src/com/android/ex/chips/RecipientEditTextView.java
index 46ac2e7..eb8c639 100644
--- a/chips/src/com/android/ex/chips/RecipientEditTextView.java
+++ b/chips/src/com/android/ex/chips/RecipientEditTextView.java
@@ -674,6 +674,7 @@
         if (mInvalidChipBackground == null) {
             mInvalidChipBackground = r.getDrawable(R.drawable.chip_background_invalid);
         }
+        a.recycle();
     }
 
     // Visible for testing.
diff --git a/chips/src/com/android/ex/chips/RecipientEntry.java b/chips/src/com/android/ex/chips/RecipientEntry.java
index f307b25..4f22142 100644
--- a/chips/src/com/android/ex/chips/RecipientEntry.java
+++ b/chips/src/com/android/ex/chips/RecipientEntry.java
@@ -18,6 +18,7 @@
 
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.DisplayNameSources;
 
 /**
  * Represents one entry inside recipient auto-complete list.
@@ -50,6 +51,7 @@
      */
     private boolean mIsFirstLevel;
     private final String mDisplayName;
+
     /** Destination for this contact entry. Would be an email address or a phone number. */
     private final String mDestination;
     /** Type of the destination like {@link Email#TYPE_HOME} */
@@ -123,6 +125,17 @@
     }
 
     /**
+     * @return the display name for the entry.  If the display name source is larger than
+     * {@link DisplayNameSources#PHONE} we use the contact's display name, but if not,
+     * i.e. the display name came from an email address or a phone number, we don't use it
+     * to avoid confusion and just use the destination instead.
+     */
+    private static String pickDisplayName(int displayNameSource, String displayName,
+            String destination) {
+        return (displayNameSource > DisplayNameSources.PHONE) ? displayName : destination;
+    }
+
+    /**
      * Construct a RecipientEntry from just an address that has been entered
      * with both an associated display name. This address has not been resolved
      * to a contact and therefore does not have a contact id or photo.
@@ -134,30 +147,31 @@
     }
 
     public static RecipientEntry constructTopLevelEntry(
-            String displayName, String destination, int destinationType, String destinationLabel,
-            long contactId, long dataId, Uri photoThumbnailUri) {
-        return new RecipientEntry(ENTRY_TYPE_PERSON, displayName,
+            String displayName, int displayNameSource, String destination, int destinationType,
+            String destinationLabel, long contactId, long dataId, Uri photoThumbnailUri) {
+        return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName,
+                    destination),
                 destination, destinationType, destinationLabel,
                 contactId, dataId,
                 photoThumbnailUri, true);
     }
 
     public static RecipientEntry constructTopLevelEntry(
-            String displayName, String destination, int destinationType, String destinationLabel,
-            long contactId, long dataId,
+            String displayName, int displayNameSource, String destination, int destinationType,
+            String destinationLabel, long contactId, long dataId,
             String thumbnailUriAsString) {
         return new RecipientEntry(
-                ENTRY_TYPE_PERSON, displayName,
+                ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName, destination),
                 destination, destinationType, destinationLabel,
                 contactId, dataId,
                 (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), true);
     }
 
     public static RecipientEntry constructSecondLevelEntry(
-            String displayName, String destination, int destinationType, String destinationLabel,
-            long contactId, long dataId, String thumbnailUriAsString) {
+            String displayName, int displayNameSource, String destination, int destinationType,
+            String destinationLabel, long contactId, long dataId, String thumbnailUriAsString) {
         return new RecipientEntry(
-                ENTRY_TYPE_PERSON, displayName,
+                ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName, destination),
                 destination, destinationType, destinationLabel,
                 contactId, dataId,
                 (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), false);
diff --git a/chips/tests/Android.mk b/chips/tests/Android.mk
index 42bb6a3..313af7d 100644
--- a/chips/tests/Android.mk
+++ b/chips/tests/Android.mk
@@ -23,6 +23,8 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner
 LOCAL_STATIC_JAVA_LIBRARIES += android-common-chips
 LOCAL_RESOURCE_DIR := frameworks/ex/chips/res/
+LOCAL_AAPT_FLAGS := --auto-add-overlay
+LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.chips
 
 include $(BUILD_PACKAGE)
 
diff --git a/chips/tests/src/com/android/ex/chips/ChipsTest.java b/chips/tests/src/com/android/ex/chips/ChipsTest.java
index 4d662f3..6639bcb 100644
--- a/chips/tests/src/com/android/ex/chips/ChipsTest.java
+++ b/chips/tests/src/com/android/ex/chips/ChipsTest.java
@@ -119,9 +119,16 @@
         }
     }
 
+    private class TestBaseRecipientAdapter extends BaseRecipientAdapter {
+        public TestBaseRecipientAdapter(Context context) {
+            super(context);
+        }
+    }
+
     private MockRecipientEditTextView createViewForTesting() {
         mEditable = new SpannableStringBuilder();
         MockRecipientEditTextView view = new MockRecipientEditTextView(getContext());
+        view.setAdapter(new TestBaseRecipientAdapter(getContext()));
         return view;
     }
 
