diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 3e1a2ef..d26e6fb 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -21,7 +21,6 @@
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.graphics.Bitmap;
-import android.os.AsyncTask;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 
@@ -359,7 +358,7 @@
     public void lookupPhoneNumber(String phoneNumber) {
         if (mPhoneNumberService != null) {
             mPhoneNumberService.getPhoneNumberInfo(phoneNumber,
-                    new PhoneNumberService.PhoneNumberServiceListener() {
+                    new PhoneNumberService.NumberLookupListener() {
                         @Override
                         public void onPhoneNumberInfoComplete(
                                 final PhoneNumberService.PhoneNumberInfo info) {
@@ -368,8 +367,8 @@
                             }
                             // TODO(klp): Ui is sometimes null due to something being shutdown.
                             if (getUi() != null) {
-                                if (info.getName() != null) {
-                                    getUi().setPrimaryName(info.getName(), false);
+                                if (info.getDisplayName() != null) {
+                                    getUi().setPrimaryName(info.getDisplayName(), false);
                                 }
 
                                 if (info.getImageUrl() != null) {
@@ -424,23 +423,14 @@
 
     private void fetchImage(final String url) {
         if (url != null) {
-            new AsyncTask<Void, Void, Bitmap>() {
-
+            mPhoneNumberService.fetchImage(url, new PhoneNumberService.ImageLookupListener() {
                 @Override
-                protected Bitmap doInBackground(Void... params) {
-                    // Fetch the image
-                    return mPhoneNumberService.fetchImage(url);
-                }
-
-                @Override
-                protected void onPostExecute(Bitmap bitmap) {
-                    // TODO(klp): same as above, figure out why it's null.
+                public void onImageFetchComplete(Bitmap bitmap) {
                     if (getUi() != null) {
                         getUi().setPrimaryImage(bitmap);
                     }
                 }
-
-            }.execute();
+            });
         }
     }
 
diff --git a/InCallUI/src/com/android/incallui/service/PhoneNumberService.java b/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
index 4566388..1fc2858 100644
--- a/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
+++ b/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
@@ -19,14 +19,27 @@
 import android.graphics.Bitmap;
 
 /**
- *
+ * Provides phone number lookup services.
  */
 public interface PhoneNumberService {
-    public void getPhoneNumberInfo(String phoneNumber, PhoneNumberServiceListener listener);
 
-    public Bitmap fetchImage(String url);
+    /**
+     * Get a phone number number asynchronously.
+     *
+     * @param phoneNumber The phone number to lookup.
+     * @param listener The listener to notify when the phone number lookup is complete.
+     */
+    public void getPhoneNumberInfo(String phoneNumber, NumberLookupListener listener);
 
-    public interface PhoneNumberServiceListener {
+    /**
+     * Get an image asynchronously.
+     *
+     * @param url The url to fetch the image from.
+     * @param listener The listener to notify when the image lookup is complete.
+     */
+    public void fetchImage(String url, ImageLookupListener listener);
+
+    public interface NumberLookupListener {
 
         /**
          * Callback when a phone number has been looked up.
@@ -36,8 +49,18 @@
         public void onPhoneNumberInfoComplete(PhoneNumberInfo info);
     }
 
+    public interface ImageLookupListener {
+
+        /**
+         * Callback when a image has been fetched.
+         *
+         * @param bitmap The fetched image.
+         */
+        public void onImageFetchComplete(Bitmap bitmap);
+    }
+
     public interface PhoneNumberInfo {
-        public String getName();
+        public String getDisplayName();
         public String getPhoneNumber();
         public String getImageUrl();
     }
