diff --git a/res/layout-finger/fasttrack.xml b/res/layout-finger/fasttrack.xml
index 23e6be1..cf6b3d0 100644
--- a/res/layout-finger/fasttrack.xml
+++ b/res/layout-finger/fasttrack.xml
@@ -14,17 +14,47 @@
      limitations under the License.
 -->
 
-<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:fadingEdgeLength="40dip"
-    android:scrollbars="none">
+    android:orientation="vertical">
 
-    <LinearLayout
-        android:id="@+id/fasttrack"
+    <ImageView
+        android:id="@+id/photo"
+        android:layout_width="32dip"
+        android:layout_height="32dip"
+        android:layout_marginLeft="4dip"
+        android:layout_marginTop="4dip"
+        android:visibility="gone" />
+
+    <TextView
+        android:id="@+id/displayname"
+        android:layout_toRightOf="@id/photo"
+        android:layout_alignTop="@id/photo"
+        android:layout_alignBottom="@id/photo"
+        android:gravity="center_vertical"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:padding="4dip"
-        android:orientation="horizontal" />
+        android:paddingLeft="8dip"
+        android:paddingRight="8dip"
+        android:textSize="18dip"
+        android:textStyle="bold" />
 
-</HorizontalScrollView>
+    <HorizontalScrollView
+        android:layout_below="@id/photo"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fadingEdgeLength="40dip"
+        android:padding="4dip"
+        android:scrollbars="none">
+
+        <LinearLayout
+            android:id="@+id/fasttrack"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal" />
+
+    </HorizontalScrollView>
+
+</RelativeLayout>
+
diff --git a/src/com/android/contacts/FastTrackWindow.java b/src/com/android/contacts/FastTrackWindow.java
index 4b7bbd8..0cf9daf 100644
--- a/src/com/android/contacts/FastTrackWindow.java
+++ b/src/com/android/contacts/FastTrackWindow.java
@@ -21,11 +21,13 @@
 import com.android.contacts.SocialStreamActivity.MappingCache;
 import com.android.contacts.SocialStreamActivity.MappingCache.Mapping;
 import com.android.providers.contacts2.ContactsContract;
+import com.android.providers.contacts2.ContactsContract.Aggregates;
 import com.android.providers.contacts2.ContactsContract.CommonDataKinds;
 import com.android.providers.contacts2.ContactsContract.Data;
 import com.android.providers.contacts2.ContactsContract.CommonDataKinds.Email;
 import com.android.providers.contacts2.ContactsContract.CommonDataKinds.Im;
 import com.android.providers.contacts2.ContactsContract.CommonDataKinds.Phone;
+import com.android.providers.contacts2.ContactsContract.CommonDataKinds.Photo;
 import com.android.providers.contacts2.ContactsContract.CommonDataKinds.Postal;
 
 import android.content.ActivityNotFoundException;
@@ -34,6 +36,8 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.util.Log;
 import android.view.Gravity;
@@ -82,6 +86,7 @@
 
     private boolean mShowing = false;
     private boolean mHasPosition = false;
+    private boolean mHasDisplayName = false;
     private boolean mHasData = false;
 
     public static final int ICON_SIZE = 42;
@@ -91,7 +96,8 @@
     private int mFirstX;
     private int mFirstY;
 
-    private static final int TOKEN = 1;
+    private static final int TOKEN_DISPLAY_NAME = 1;
+    private static final int TOKEN_DATA = 2;
 
     private static final int GRAVITY = Gravity.LEFT | Gravity.TOP;
 
@@ -152,8 +158,10 @@
         mDataUri = Uri.withAppendedPath(aggUri, ContactsContract.Aggregates.Data.CONTENT_DIRECTORY);
 
         mHandler = new NotifyingAsyncQueryHandler(context, this);
-        mHandler.startQuery(TOKEN, null, mDataUri, null, null, null, null);
+        mHandler.startQuery(TOKEN_DISPLAY_NAME, null, aggUri, null, null, null, null);
+        mHandler.startQuery(TOKEN_DATA, null, mDataUri, null, null, null, null);
 
+        // TODO: poll around for latest status message or location details
     }
 
     /**
@@ -161,7 +169,7 @@
      * completed query results.
      */
     private synchronized void considerShowing() {
-        if (mHasData && mHasPosition && !mShowing) {
+        if (mHasData && mHasPosition && mHasDisplayName && !mShowing) {
             mShowing = true;
             showAtLocation(mParent, GRAVITY, mFirstX, mFirstY);
         }
@@ -185,6 +193,40 @@
 
     /** {@inheritDoc} */
     public void onQueryComplete(int token, Object cookie, Cursor cursor) {
+        if (cursor == null) {
+            return;
+        }
+        switch (token) {
+            case TOKEN_DISPLAY_NAME:
+                handleDisplayName(cursor);
+                break;
+            case TOKEN_DATA:
+                handleData(cursor);
+                break;
+        }
+        considerShowing();
+    }
+
+    /**
+     * Handle the result from the {@link TOKEN_DISPLAY_NAME} query.
+     */
+    private void handleDisplayName(Cursor cursor) {
+        final TextView displayname = (TextView)mContent.findViewById(R.id.displayname);
+        final int COL_DISPLAY_NAME = cursor.getColumnIndex(Aggregates.DISPLAY_NAME);
+
+        if (cursor.moveToNext()) {
+            String foundName = cursor.getString(COL_DISPLAY_NAME);
+            displayname.setText(foundName);
+        }
+
+        mHasDisplayName = true;
+    }
+
+    /**
+     * Handle the result from the {@link TOKEN_DATA} query.
+     */
+    private void handleData(Cursor cursor) {
+        final ImageView photo = (ImageView)mContent.findViewById(R.id.photo);
         final ViewGroup fastTrack = (ViewGroup)mContent.findViewById(R.id.fasttrack);
 
         // Build list of actions for this contact, this could be done better in
@@ -194,12 +236,25 @@
         final int COL_ID = cursor.getColumnIndex(Data._ID);
         final int COL_PACKAGE = cursor.getColumnIndex(Data.PACKAGE);
         final int COL_MIMETYPE = cursor.getColumnIndex(Data.MIMETYPE);
+        final int COL_PHOTO = cursor.getColumnIndex(Photo.PHOTO);
+
+        boolean foundDisplayName = false;
+        boolean foundPhoto = false;
 
         while (cursor.moveToNext()) {
             final long dataId = cursor.getLong(COL_ID);
             final String packageName = cursor.getString(COL_PACKAGE);
             final String mimeType = cursor.getString(COL_MIMETYPE);
 
+            // Handle finding the photo among various return rows
+            if (!foundPhoto && Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                byte[] photoBlob = cursor.getBlob(COL_PHOTO);
+                Bitmap photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0, photoBlob.length);
+                photo.setImageBitmap(photoBitmap);
+                photo.setVisibility(View.VISIBLE);
+                foundPhoto = true;
+            }
+
             ImageView action;
 
             // First, try looking in mapping cache for possible icon match
@@ -262,7 +317,6 @@
         }
 
         mHasData = true;
-        considerShowing();
     }
 
     /**
