diff --git a/src/com/android/contacts/ContactTileLoaderFactory.java b/src/com/android/contacts/ContactTileLoaderFactory.java
index 20ad26e..e90730a 100644
--- a/src/com/android/contacts/ContactTileLoaderFactory.java
+++ b/src/com/android/contacts/ContactTileLoaderFactory.java
@@ -33,13 +33,17 @@
     public final static int STARRED = 2;
     public final static int PHOTO_URI = 3;
     public final static int LOOKUP_KEY = 4;
+    public final static int CONTACT_PRESENCE = 5;
+    public final static int CONTACT_STATUS = 6;
 
     private static final String[] COLUMNS = new String[] {
         Contacts._ID,
         Contacts.DISPLAY_NAME,
         Contacts.STARRED,
         Contacts.PHOTO_URI,
-        Contacts.LOOKUP_KEY
+        Contacts.LOOKUP_KEY,
+        Contacts.CONTACT_PRESENCE,
+        Contacts.CONTACT_STATUS,
     };
 
     public static CursorLoader createStrequentLoader(Context context) {
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index 452c5d0..9605747 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -53,6 +53,7 @@
         Data.LOOKUP_KEY,                        // 11
         Data.PHONETIC_NAME,                     // 12
         Data.HAS_PHONE_NUMBER,                  // 13
+        Data.CONTACT_STATUS,                    // 14
     };
 
     private final long mGroupId;
@@ -71,6 +72,7 @@
     public static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 11;
     public static final int CONTACT_PHONETIC_NAME_COLUMN_INDEX = 12;
     public static final int CONTACT_HAS_PHONE_COLUMN_INDEX = 13;
+    public static final int CONTACT_STATUS_COLUMN_INDEX = 14;
 
     public GroupMemberLoader(Context context, long groupId) {
         super(context);
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 9674960..48a9938 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -59,6 +59,8 @@
     private int mPhotoUriIndex;
     private int mNameIndex;
     private int mStarredIndex;
+    private int mPresenceIndex;
+    private int mStatusIndex;
 
     private boolean mIsQuickContactEnabled = false;
 
@@ -139,12 +141,16 @@
             mPhotoUriIndex = GroupMemberLoader.CONTACT_PHOTO_URI_COLUMN_INDEX;
             mNameIndex = GroupMemberLoader.CONTACT_DISPLAY_NAME_PRIMARY_COLUMN_INDEX;
             mStarredIndex = GroupMemberLoader.CONTACT_STARRED_COLUMN_INDEX;
+            mPresenceIndex = GroupMemberLoader.CONTACT_PRESENCE_STATUS_COLUMN_INDEX;
+            mStatusIndex = GroupMemberLoader.CONTACT_STATUS_COLUMN_INDEX;
         } else {
             mIdIndex = ContactTileLoaderFactory.CONTACT_ID;
             mLookupIndex = ContactTileLoaderFactory.LOOKUP_KEY;
             mPhotoUriIndex = ContactTileLoaderFactory.PHOTO_URI;
             mNameIndex = ContactTileLoaderFactory.DISPLAY_NAME;
             mStarredIndex = ContactTileLoaderFactory.STARRED;
+            mPresenceIndex = ContactTileLoaderFactory.CONTACT_PRESENCE;
+            mStatusIndex = ContactTileLoaderFactory.CONTACT_STATUS;
         }
     }
 
@@ -192,9 +198,11 @@
 
         ContactEntry contact = new ContactEntry();
         contact.name = cursor.getString(mNameIndex);
+        contact.status = cursor.getString(mStatusIndex);
         contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
         contact.lookupKey = ContentUris.withAppendedId(
                 Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
+        contact.presence = cursor.isNull(mPresenceIndex) ? null : cursor.getInt(mPresenceIndex);
 
         return contact;
     }
@@ -455,9 +463,11 @@
      * Class to hold contact information
      */
     public static class ContactEntry {
-        public Uri photoUri;
         public String name;
+        public String status;
+        public Uri photoUri;
         public Uri lookupKey;
+        public Integer presence;
     }
 
     private static class ViewTypes {
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index 7981bd1..715c331 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -20,6 +20,8 @@
 import com.android.contacts.list.ContactTileAdapter.ContactEntry;
 
 import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -29,6 +31,9 @@
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
+import android.provider.ContactsContract.StatusUpdates;
+
+
 /**
  * A ContactTile displays the contact's picture overlayed with their name
  */
@@ -37,8 +42,10 @@
 
     private Uri mLookupUri;
     private ImageView mPhoto;
+    private ImageView mPresence;
     private QuickContactBadge mQuickContact;
     private TextView mName;
+    private TextView mStatus;
     private ContactPhotoManager mPhotoManager = null;
 
     public ContactTileView(Context context, AttributeSet attrs) {
@@ -53,6 +60,8 @@
 
         mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
         mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
+        mPresence = (ImageView) findViewById(R.id.contact_tile_presence);
+        mStatus = (TextView) findViewById(R.id.contact_tile_status);
     }
 
     public void setPhotoManager(ContactPhotoManager photoManager) {
@@ -68,6 +77,24 @@
             mName.setText(entry.name);
             mLookupUri = entry.lookupKey;
 
+            int presenceDrawableResId = (entry.presence == null ? 0 :
+                    StatusUpdates.getPresenceIconResourceId(entry.presence));
+
+            if (mPresence != null) {
+                mPresence.setBackgroundResource(presenceDrawableResId);
+            }
+
+            if (mStatus != null) {
+                String statusText;
+                if (entry.presence == null) {
+                    statusText = null;
+                } else {
+                    statusText =
+                          (entry.status == null ? getStatusString(entry.presence) : entry.status);
+                }
+                mStatus.setText(statusText);
+            }
+
             if (mQuickContact != null) {
                 mQuickContact.assignContactUri(mLookupUri);
                 mQuickContact.setImageBitmap(null);
@@ -92,6 +119,23 @@
         }
     }
 
+    private String getStatusString(int presence) {
+        Resources resources = getResources();
+        switch (presence) {
+            case StatusUpdates.AVAILABLE:
+                return resources.getString(R.string.status_available);
+            case StatusUpdates.IDLE:
+            case StatusUpdates.AWAY:
+                return resources.getString(R.string.status_away);
+            case StatusUpdates.DO_NOT_DISTURB:
+                return resources.getString(R.string.status_busy);
+            case StatusUpdates.OFFLINE:
+            case StatusUpdates.INVISIBLE:
+            default:
+                return null;
+        }
+    }
+
     public Uri getLookupUri() {
         return mLookupUri;
     }
