diff --git a/src/com/android/contacts/SocialStreamActivity.java b/src/com/android/contacts/SocialStreamActivity.java
index 157100e..9412287 100644
--- a/src/com/android/contacts/SocialStreamActivity.java
+++ b/src/com/android/contacts/SocialStreamActivity.java
@@ -32,6 +32,7 @@
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
@@ -57,6 +58,7 @@
 import android.widget.CursorAdapter;
 import android.widget.ImageView;
 import android.widget.ListAdapter;
+import android.widget.ListView;
 import android.widget.TextView;
 
 import java.io.IOException;
@@ -78,6 +80,8 @@
         Activities.TITLE,
         Activities.SUMMARY,
         Activities.THREAD_PUBLISHED,
+        Activities.LINK,
+        Activities.THUMBNAIL,
     };
 
     private static final int COL_ID = 0;
@@ -90,8 +94,11 @@
     private static final int COL_TITLE = 7;
     private static final int COL_SUMMARY = 8;
     private static final int COL_THREAD_PUBLISHED = 9;
+    private static final int COL_LINK = 10;
+    private static final int COL_THUMBNAIL = 11;
 
-    public static final int PHOTO_SIZE = 58;
+    public static final int PHOTO_SIZE = 54;
+    public static final int THUMBNAIL_SIZE = 54;
 
     private ListAdapter mAdapter;
 
@@ -145,6 +152,19 @@
 
     }
 
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        Cursor cursor = (Cursor)getListAdapter().getItem(position);
+
+        // TODO check mime type and if it is supported, launch the corresponding app
+        String link = cursor.getString(COL_LINK);
+        if (link == null) {
+            return;
+        }
+
+        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link)));
+    }
+
     /**
      * List adapter for social stream data queried from
      * {@link Activities#CONTENT_URI}.
@@ -161,6 +181,8 @@
             ImageView sourceIcon;
             TextView content;
             SpannableStringBuilder contentBuilder = new SpannableStringBuilder();
+            TextView summary;
+            ImageView thumbnail;
             TextView published;
         }
 
@@ -192,7 +214,9 @@
             long contactId = cursor.getLong(COL_AUTHOR_CONTACT_ID);
             String name = cursor.getString(COL_DISPLAY_NAME);
             String title = cursor.getString(COL_TITLE);
+            String summary = cursor.getString(COL_SUMMARY);
             long published = cursor.getLong(COL_PUBLISHED);
+            byte[] thumbnailBlob = cursor.getBlob(COL_THUMBNAIL);
 
             // TODO: trigger async query to find actual name and photo instead
             // of using this lazy caching mechanism
@@ -209,6 +233,22 @@
             holder.contentBuilder.setSpan(mTextStyleName, 0, name.length(), 0);
             holder.content.setText(holder.contentBuilder);
 
+            if (summary == null) {
+                holder.summary.setVisibility(View.GONE);
+            } else {
+                holder.summary.setText(summary);
+                holder.summary.setVisibility(View.VISIBLE);
+            }
+
+            if (thumbnailBlob != null) {
+                Bitmap thumbnail =
+                        BitmapFactory.decodeByteArray(thumbnailBlob, 0, thumbnailBlob.length);
+                holder.thumbnail.setImageBitmap(thumbnail);
+                holder.thumbnail.setVisibility(View.VISIBLE);
+            } else {
+                holder.thumbnail.setVisibility(View.GONE);
+            }
+
             CharSequence relativePublished = DateUtils.getRelativeTimeSpanString(published,
                     System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS);
             holder.published.setText(relativePublished);
@@ -235,6 +275,8 @@
             holder.photo = (ImageView) view.findViewById(R.id.photo);
             holder.sourceIcon = (ImageView) view.findViewById(R.id.sourceIcon);
             holder.content = (TextView) view.findViewById(R.id.content);
+            holder.summary = (TextView) view.findViewById(R.id.summary);
+            holder.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
             holder.published = (TextView) view.findViewById(R.id.published);
             view.setTag(holder);
 
