diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index cde1215..87c321e 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -573,15 +573,6 @@
                     PhoneDataItem phone = (PhoneDataItem) dataItem;
                     // Build phone entries
                     entry.data = phone.getFormattedPhoneNumber();
-                    if (entry.data == null) {
-                        // This case happens when the quick contact was opened from the contact
-                        // list, and then, the user touches the quick contact image and brings the
-                        // user to the detail card.  In this case, the Contact object that was
-                        // loaded from quick contacts does not contain the formatted phone number,
-                        // so it must be loaded here.
-                        phone.computeFormattedPhoneNumber(mDefaultCountryIso);
-                        entry.data = phone.getFormattedPhoneNumber();
-                    }
                     final Intent phoneIntent = mHasPhone ?
                             ContactsUtils.getCallIntent(entry.data) : null;
                     final Intent smsIntent = mHasSms ? new Intent(Intent.ACTION_SENDTO,
diff --git a/src/com/android/contacts/model/ContactLoader.java b/src/com/android/contacts/model/ContactLoader.java
index 0b7e40d..f9f630d 100644
--- a/src/com/android/contacts/model/ContactLoader.java
+++ b/src/com/android/contacts/model/ContactLoader.java
@@ -63,6 +63,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -332,6 +333,9 @@
                 if (mLoadStreamItems && result.getStreamItems() == null) {
                     loadStreamItems(result);
                 }
+                if (mComputeFormattedPhoneNumber) {
+                    computeFormattedPhoneNumbers(result);
+                }
                 if (!resultIsCached) loadPhotoBinaryData(result);
 
                 // Note ME profile should never have "Add connection"
@@ -384,7 +388,6 @@
                 if (!cursor.isNull(ContactQuery.DATA_ID)) {
                     ContentValues data = loadDataValues(cursor);
                     final DataItem item = rawContact.addDataItemValues(data);
-                    processDataItem(item);
 
                     if (!cursor.isNull(ContactQuery.PRESENCE)
                             || !cursor.isNull(ContactQuery.STATUS)) {
@@ -405,19 +408,6 @@
     }
 
     /**
-     * Performs any further computations on the data item
-     */
-    private void processDataItem(DataItem dataItem) {
-        if (dataItem instanceof PhoneDataItem) {
-            if (mComputeFormattedPhoneNumber) {
-                final PhoneDataItem phoneDataItem = (PhoneDataItem) dataItem;
-                final String defaultCountryIso = ContactsUtils.getCurrentCountryIso(getContext());
-                phoneDataItem.computeFormattedPhoneNumber(defaultCountryIso);
-            }
-        }
-    }
-
-    /**
      * Looks for the photo data item in entities. If found, creates a new Bitmap instance. If
      * not found, returns null
      */
@@ -808,6 +798,29 @@
                 .build());
     }
 
+    /**
+     * Iterates over all data items that represent phone numbers are tries to calculate a formatted
+     * number. This function can safely be called several times as no unformatted data is
+     * overwritten
+     */
+    private void computeFormattedPhoneNumbers(Contact contactData) {
+        final String countryIso = ContactsUtils.getCurrentCountryIso(getContext());
+        final ImmutableList<RawContact> rawContacts = contactData.getRawContacts();
+        final int rawContactCount = rawContacts.size();
+        for (int rawContactIndex = 0; rawContactIndex < rawContactCount; rawContactIndex++) {
+            final RawContact rawContact = rawContacts.get(rawContactIndex);
+            final List<DataItem> dataItems = rawContact.getDataItems();
+            final int dataCount = dataItems.size();
+            for (int dataIndex = 0; dataIndex < dataCount; dataIndex++) {
+                final DataItem dataItem = dataItems.get(dataIndex);
+                if (dataItem instanceof PhoneDataItem) {
+                    final PhoneDataItem phoneDataItem = (PhoneDataItem) dataItem;
+                    phoneDataItem.computeFormattedPhoneNumber(countryIso);
+                }
+            }
+        }
+    }
+
     @Override
     public void deliverResult(Contact result) {
         unregisterObserver();
@@ -895,12 +908,13 @@
     public void upgradeToFullContact() {
         // Everything requested already? Nothing to do, so let's bail out
         if (mLoadGroupMetaData && mLoadInvitableAccountTypes && mLoadStreamItems
-                && mPostViewNotification) return;
+                && mPostViewNotification && mComputeFormattedPhoneNumber) return;
 
         mLoadGroupMetaData = true;
         mLoadInvitableAccountTypes = true;
         mLoadStreamItems = true;
         mPostViewNotification = true;
+        mComputeFormattedPhoneNumber = true;
 
         // Cache the current result, so that we only load the "missing" parts of the contact.
         cacheResult();
