diff --git a/src/com/android/incallui/ContactInfoCache.java b/src/com/android/incallui/ContactInfoCache.java
index 448de7f..55c774a 100644
--- a/src/com/android/incallui/ContactInfoCache.java
+++ b/src/com/android/incallui/ContactInfoCache.java
@@ -28,6 +28,8 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
+import com.android.dialer.calllog.ContactInfo;
+import com.android.dialer.lookup.ReverseLookupThread;
 import com.android.incallui.service.PhoneNumberService;
 import com.android.incalluibind.ServiceFactory;
 import com.android.services.telephony.common.Call;
@@ -169,12 +171,16 @@
         sendInfoNotifications(callId, cacheEntry);
 
         if (didLocalLookup) {
-            if (!callerInfo.contactExists && cacheEntry.name == null &&
-                    mPhoneNumberService != null) {
+            if (!callerInfo.contactExists && cacheEntry.name == null) {
                 Log.d(TAG, "Contact lookup. Local contacts miss, checking remote");
-                final PhoneNumberServiceListener listener = new PhoneNumberServiceListener(callId);
-                mPhoneNumberService.getPhoneNumberInfo(cacheEntry.number, listener, listener,
-                        isIncoming);
+                if (mPhoneNumberService != null) {
+                    final PhoneNumberServiceListener listener = new PhoneNumberServiceListener(callId);
+                    mPhoneNumberService.getPhoneNumberInfo(cacheEntry.number, listener, listener,
+                            isIncoming);
+                } else {
+                    final ReverseLookupListener listener = new ReverseLookupListener(callId);
+                    ReverseLookupThread.performLookup(mContext, cacheEntry.number, listener);
+                }
             } else if (cacheEntry.personUri != null) {
                 Log.d(TAG, "Contact lookup. Local contact found, starting image load");
                 // Load the image with a callback to update the image state.
@@ -195,6 +201,57 @@
         }
     }
 
+    public class ReverseLookupListener {
+        private final int mCallId;
+
+        ReverseLookupListener(int callId) {
+            mCallId = callId;
+        }
+
+        public void onLookupComplete(final ContactInfo info) {
+            if (info == null) {
+                Log.d(TAG, "Reverse lookup returned no result.");
+                clearCallbacks(mCallId);
+                return;
+            }
+
+            ContactCacheEntry entry = new ContactCacheEntry();
+            entry.name = info.name;
+            entry.number = info.number;
+            if (info.type == Phone.TYPE_CUSTOM) {
+                entry.label = info.label;
+            } else {
+                final CharSequence typeStr = Phone.getTypeLabel(
+                        mContext.getResources(), info.type, info.label);
+                entry.label = typeStr == null ? null : typeStr.toString();
+            }
+
+            final ContactCacheEntry oldEntry = mInfoMap.get(mCallId);
+            if (oldEntry != null) {
+                // Location is only obtained from local lookup so persist
+                // the value for remote lookups. Once we have a name this
+                // field is no longer used; it is persisted here in case
+                // the UI is ever changed to use it.
+                entry.location = oldEntry.location;
+            }
+
+            // Add the contact info to the cache.
+            mInfoMap.put(mCallId, entry);
+            sendInfoNotifications(mCallId, entry);
+
+            // If there is no image then we should not expect another callback.
+            if (info.photoUri == null) {
+                // We're done, so clear callbacks
+                clearCallbacks(mCallId);
+            }
+        }
+
+        public void onImageFetchComplete(Bitmap bitmap) {
+            onImageLoadComplete(TOKEN_UPDATE_PHOTO_FOR_CALL_STATE, null,
+                    bitmap, (Integer) mCallId);
+        }
+    }
+
     class PhoneNumberServiceListener implements PhoneNumberService.NumberLookupListener,
                                      PhoneNumberService.ImageLookupListener {
         private final int mCallId;
