diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index aed377b..ddebf4e 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -744,14 +744,20 @@
                 return Result.forNotFound(mRequestedUri);
             }
 
+            // Create the loaded result starting with the Contact data.
+            Result result = loadContactHeaderData(cursor, contactUri);
+
+            // Fill in the raw contacts, which is wrapped in an Entity and any
+            // status data.  Initially, result has empty entities and statuses.
             long currentRawContactId = -1;
             Entity entity = null;
-            Result result = loadContactHeaderData(cursor, contactUri);
             ArrayList<Entity> entities = result.getEntities();
             LongSparseArray<DataStatus> statuses = result.getStatuses();
             for (; !cursor.isAfterLast(); cursor.moveToNext()) {
                 long rawContactId = cursor.getLong(ContactQuery.RAW_CONTACT_ID);
                 if (rawContactId != currentRawContactId) {
+                    // First time to see this raw contact id, so create a new entity, and
+                    // add it to the result's entities.
                     currentRawContactId = rawContactId;
                     entity = new android.content.Entity(loadRawContact(cursor));
                     entities.add(entity);
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 238055c..ca6fa63 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -627,13 +627,26 @@
                     if (isSuperPrimary) mPrimaryPhoneUri = entry.uri;
 
                     entry.isPrimary = isSuperPrimary;
-                    mPhoneEntries.add(entry);
+
+                    // If the entry is a primary entry, then render it first in the view.
+                    if (entry.isPrimary) {
+                        // add to beginning of list so that this phone number shows up first
+                        mPhoneEntries.add(0, entry);
+                    } else {
+                        // add to end of list
+                        mPhoneEntries.add(entry);
+                    }
                 } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
                     // Build email entries
                     entry.intent = new Intent(Intent.ACTION_SENDTO,
                             Uri.fromParts(Constants.SCHEME_MAILTO, entry.data, null));
                     entry.isPrimary = isSuperPrimary;
-                    mEmailEntries.add(entry);
+                    // If entry is a primary entry, then render it first in the view.
+                    if (entry.isPrimary) {
+                        mEmailEntries.add(0, entry);
+                    } else {
+                        mEmailEntries.add(entry);
+                    }
 
                     // When Email rows have status, create additional Im row
                     final DataStatus status = mContactData.getStatuses().get(entry.id);
diff --git a/src/com/android/contacts/quickcontact/ActionMultiMap.java b/src/com/android/contacts/quickcontact/ActionMultiMap.java
index 21234ce..ff9d677 100644
--- a/src/com/android/contacts/quickcontact/ActionMultiMap.java
+++ b/src/com/android/contacts/quickcontact/ActionMultiMap.java
@@ -25,12 +25,26 @@
  */
 public class ActionMultiMap extends HashMap<String, ArrayList<Action>> {
     public void put(String mimeType, Action info) {
-        // Create list for this MIME-type when needed
+       put(mimeType, info, false);
+    }
+
+    /**
+     * Puts the (mimeType,Action) tuple into the multimap at the front if
+     * the 'front' flag is set to true
+     */
+    public void put(String mimeType, Action info, boolean front) {
+        // Put the info first
         ArrayList<Action> collectList = get(mimeType);
+
+        // Create list for this MIME-type if needed
         if (collectList == null) {
             collectList = new ArrayList<Action>();
             put(mimeType, collectList);
         }
-        collectList.add(info);
+        if (front) {
+            collectList.add(0, info);
+        } else {
+            collectList.add(info);
+        }
     }
 }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index e00f051..f914aa1 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -345,7 +345,7 @@
                     // along with all others of this MIME-type.
                     final Action action = new DataAction(context, mimeType, kind, dataId,
                             entryValues);
-                    final boolean wasAdded = considerAdd(action, cache);
+                    final boolean wasAdded = considerAdd(action, cache, isSuperPrimary);
                     if (wasAdded) {
                         // Remember the default
                         if (isSuperPrimary || (isPrimary && (mDefaultsMap.get(mimeType) == null))) {
@@ -363,7 +363,7 @@
                         final DataAction action = new DataAction(context, Im.CONTENT_ITEM_TYPE,
                                 imKind, dataId, entryValues);
                         action.setPresence(status.getPresence());
-                        considerAdd(action, cache);
+                        considerAdd(action, cache, isSuperPrimary);
                     }
                 }
             }
@@ -421,11 +421,14 @@
      * Consider adding the given {@link Action}, which will only happen if
      * {@link PackageManager} finds an application to handle
      * {@link Action#getIntent()}.
+     * @param action the action to handle
+     * @param resolveCache cache of applications that can handle actions
+     * @param front indicates whether to add the action to the front of the list
      * @return true if action has been added
      */
-    private boolean considerAdd(Action action, ResolveCache resolveCache) {
+    private boolean considerAdd(Action action, ResolveCache resolveCache, boolean front) {
         if (resolveCache.hasResolve(action)) {
-            mActions.put(action.getMimeType(), action);
+            mActions.put(action.getMimeType(), action, front);
             return true;
         }
         return false;
