Only in activitystream: .DS_Store
diff -urp activitystream_orig/activitystream.css activitystream/activitystream.css
--- activitystream_orig/activitystream.css	2008-07-31 12:05:26.000000000 -0500
+++ activitystream/activitystream.css	2008-08-09 17:09:40.000000000 -0500
@@ -2,14 +2,15 @@
   $Id: activitystream.css,v 1.1.4.1 2008/07/31 17:05:26 akalsey Exp $
 */
 
-.activitystream-item ul {
+.activitystream-items {
   list-style-type: none;
-  padding: 0; margin: 0;
+  padding: 0;
+  margin: 0;
 }
 
-.activitystream-item li {
+.activitystream-items li {
   list-style-type: none !important;
-  padding: 5px 0 !important; 
+  padding: 2px 0 !important; 
   margin: 0 !important;
 }
 
diff -urp activitystream_orig/activitystream.module activitystream/activitystream.module
--- activitystream_orig/activitystream.module	2008-08-06 01:08:59.000000000 -0500
+++ activitystream/activitystream.module	2008-08-09 21:05:52.000000000 -0500
@@ -243,18 +243,20 @@ function _activitystream_get_activity($u
       return;
     }
 
-    $query = 'SELECT n.title, n.nid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid in ('. join(',', array_keys($arrusers)) .') ORDER BY n.created DESC';
+    $query = 'SELECT n.title, n.nid, n.uid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid in ('. join(',', array_keys($arrusers)) .') ORDER BY n.created DESC';
     $countquery = 'SELECT count(*) FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid in ('. join(',', array_keys($arrusers)) .') ORDER BY n.created DESC';
   }
   elseif ($user) {
-    $query = "SELECT n.title, n.nid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid = ". $user->uid ." ORDER BY n.created DESC"; 
+    $query = "SELECT n.title, n.nid, n.uid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid = ". $user->uid ." ORDER BY n.created DESC"; 
     $countquery = "SELECT count(*) FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 AND n.uid = ". $user->uid ." ORDER BY n.created";  
   }
   else {
-    $query = 'SELECT n.title, n.nid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 ORDER BY n.created DESC';
+    $query = 'SELECT n.title, n.nid, n.uid, s.module, s.link, s.data, n.created FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 ORDER BY n.created DESC';
     $countquery = 'SELECT count(*) FROM {activitystream} s, {node} n WHERE s.nid=n.nid AND n.status =1 ORDER BY n.created DESC';
   }
+  
   $datehead = '';
+  $name = NULL;
   $items = array();
   $stream = pager_query($query, $count, 0, $countquery);
   while ($action = db_fetch_object($stream)) {
@@ -270,28 +272,33 @@ function _activitystream_get_activity($u
       $theme_function = 'activitystream_item';
     }
     
-    $items[] = theme($theme_function, $action);
+    $date = theme('activitystream_date', $action->created);
+    
+    // only need to load and theme the username once
+    if (!$name) {
+      $user = user_load(array('uid' => $action->uid));
+      $name = theme('activitystream_username', $user);
+    }
+    
+    if (function_exists('theme_'. $action->module .'_icon')) {
+      $icon = theme($action->module .'_icon', $action->data);
+    } 
+    else {
+      $icon = theme('activitystream_icon');
+    }
+    
+    $items[] = theme($theme_function, $action, $date, $icon, $name);
   }
   return $items;
 }
 
 function theme_activitystream_header(&$action) {
-  return '<h3 class="datehead">' . format_date($action->created, 'medium') . '</h3>';
+  return '<li><h3 class="datehead">' . format_date($action->created, 'medium') . '</h3></li>';
 }
 
 
-function theme_activitystream_item($action) {
-  $node = node_load($action->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  if (function_exists('theme_'. $action->module .'_icon')) {
-    $theme_function = $action->module .'_icon';
-  } 
-  else {
-    $theme_function = 'activitystream_icon';
-  }
-  return '<span class="activitystream-item">'. theme($theme_function) ." <span>$name ". l($node->title, 'node/'. $node->nid) ." <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('class' => 'permalink')) ."</span>\n";
+function theme_activitystream_item($action, $date, $icon, $name) {
+  return '<li>'. $icon .' '. $name .' '. l($action->title, 'node/'. $action->nid) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 
@@ -300,7 +307,14 @@ function theme_activitystream($items) {
   if (!count($items)) {
     $items = array(t('There are no activities to show.'));
   }
-  return '<div id="activitystream">'."\n". theme('item_list', $items) ."\n</div>";
+  $output = '<div id="activitystream">'."\n";
+  $output .= '<ul class="activitystream-items">'."\n";
+  foreach ($items as $item) {
+    $output .= $item ."\n";
+  }
+  $output .= "</ul>\n";
+  $output .= "</div>\n";
+  return $output;
 }
 
 function theme_activitystream_date($date) {
@@ -421,11 +435,14 @@ function _activitystream_save($activity,
 function activitystream_theme() {
   return array(
     'activitystream_item' => array(
-      'arguments' => array('action' => NULL),
+      'arguments' => array('action' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
     'activitystream' => array(
       'arguments' => array('items' => NULL),
     ),
+    'activitystream_header' => array(
+      'arguments' => array('action' => NULL),
+    ),
     'activitystream_date' => array(
       'arguments' => array('date' => NULL),
     ),
diff -urp activitystream_orig/activitystream_delicious/activitystream_delicious.module activitystream/activitystream_delicious/activitystream_delicious.module
--- activitystream_orig/activitystream_delicious/activitystream_delicious.module	2008-07-31 12:05:26.000000000 -0500
+++ activitystream/activitystream_delicious/activitystream_delicious.module	2008-08-09 21:02:23.000000000 -0500
@@ -58,12 +58,8 @@ function theme_activitystream_delicious_
   return theme_image(drupal_get_path('module', 'activitystream_delicious') .'/delicious.png', 'Del.icio.us');
 }
 
-function theme_activitystream_delicious_item($action) {
-  $node = node_load($action->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  return '<span class="activitystream-item">'. theme('activitystream_delicious_icon') ." <span>$name linked to ". l($node->title, $action->link) ." <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('attributes' => array('class' => 'permalink'))) .'</span>';
+function theme_activitystream_delicious_item($action, $date, $icon, $name) {
+  return '<li class="activitystream-delicious">'. $icon .' '. $name .' linked to '. l($action->title, $action->link) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 function activitystream_delicious_theme() {
diff -urp activitystream_orig/activitystream_digg/activitystream_digg.module activitystream/activitystream_digg/activitystream_digg.module
--- activitystream_orig/activitystream_digg/activitystream_digg.module	2008-07-31 12:05:26.000000000 -0500
+++ activitystream/activitystream_digg/activitystream_digg.module	2008-08-09 21:02:01.000000000 -0500
@@ -57,12 +57,8 @@ function theme_activitystream_digg_icon(
   return theme_image(drupal_get_path('module', 'activitystream_digg') .'/digg.png', 'Digg');
 }
 
-function theme_activitystream_digg_item($activity) {
-  $node = node_load($activity->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  return '<span class="activitystream-item">'. theme('activitystream_digg_icon') ." <span>$name dugg ". l($node->title, $activity->link) ." <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('class' => 'permalink')) .'</span>';
+function theme_activitystream_digg_item($action, $date, $icon, $name) {
+  return '<li class="activitystream-digg">'. $icon .' '. $name .' dugg '. l($action->title, $action->link) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 function activitystream_digg_theme() {
@@ -71,7 +67,7 @@ function activitystream_digg_theme() {
       'arguments' => array(),
     ),
     'activitystream_digg_item' => array(
-      'arguments' => array('activity' => NULL),
+      'arguments' => array('activity' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
   );
 }
diff -urp activitystream_orig/activitystream_feed/activitystream_feed.module activitystream/activitystream_feed/activitystream_feed.module
--- activitystream_orig/activitystream_feed/activitystream_feed.module	2008-07-31 12:46:08.000000000 -0500
+++ activitystream/activitystream_feed/activitystream_feed.module	2008-08-09 21:01:22.000000000 -0500
@@ -120,12 +120,9 @@ function theme_activitystream_feed_icon(
   }
 }
 
-function theme_activitystream_feed_item($activity) {
-  $node = node_load($activity->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  return '<span class="activitystream-item">'. theme('activitystream_feed_icon', $activity->data) ." <span>$name posted ". l($node->title, $activity->link) ." <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('class' => 'permalink')) .'</span>'."\n";
+function theme_activitystream_feed_item($action, $date, $icon, $name) {
+  $class = str_replace('.', '_', str_replace('www.', '', strtolower(parse_url($action->link, PHP_URL_HOST))));
+  return '<li class="activitystream-'. $class .'">'. $icon .' '. $name .' posted '. l($action->title, $action->link) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 function activitystream_feed_theme() {
@@ -134,7 +131,7 @@ function activitystream_feed_theme() {
       'arguments' => array('params' => NULL),
     ),
     'activitystream_feed_item' => array(
-      'arguments' => array('activity' => NULL),
+      'arguments' => array('activity' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
   );
 }
\ No newline at end of file
diff -urp activitystream_orig/activitystream_flickr/activitystream_flickr.module activitystream/activitystream_flickr/activitystream_flickr.module
--- activitystream_orig/activitystream_flickr/activitystream_flickr.module	2008-07-31 12:05:27.000000000 -0500
+++ activitystream/activitystream_flickr/activitystream_flickr.module	2008-08-09 20:54:44.000000000 -0500
@@ -101,12 +101,8 @@ function theme_activitystream_flickr_ico
   return theme_image(drupal_get_path('module', 'activitystream_flickr') .'/flickr.png', 'Flickr');
 }
 
-function theme_activitystream_flickr_item($action) {
-  $node = node_load($action->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  return '<span class="activitystream-item">'. theme('activitystream_flickr_icon') ." <span>$name posted " . l($node->title, $action->link) ." <span class=\"activitystream-created\">$date</span></span> ". l('#', 'node/'. $node->nid, array('class' => 'permalink')) .'</span>';
+function theme_activitystream_flickr_item($action, $date, $icon, $name) {
+  return '<li class="activitystream-flickr">'. $icon .' '. $name .' posted '. l($action->title, $action->link) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 
@@ -116,7 +112,7 @@ function activitystream_flickr_theme() {
       'arguments' => array(),
     ),
     'activitystream_flickr_item' => array(
-      'arguments' => array('activity' => NULL),
+      'arguments' => array('activity' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
   );
 }
diff -urp activitystream_orig/activitystream_lastfm/activitystream_lastfm.module activitystream/activitystream_lastfm/activitystream_lastfm.module
--- activitystream_orig/activitystream_lastfm/activitystream_lastfm.module	2008-07-31 12:05:27.000000000 -0500
+++ activitystream/activitystream_lastfm/activitystream_lastfm.module	2008-08-09 20:53:41.000000000 -0500
@@ -57,12 +57,8 @@ function theme_activitystream_lastfm_ico
   return theme_image(drupal_get_path('module', 'activitystream_lastfm') .'/lastfm.png', 'Last.fm');
 }
 
-function theme_activitystream_lastfm_item($activity) {
-  $node = node_load($activity->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $name = theme('activitystream_username', $user);
-  return '<span class="activitystream-item">'. theme('activitystream_lastfm_icon') ." <span>$name listened to ". l($node->title, $activity->link) ." <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('class' => 'permalink')) .'</span>';
+function theme_activitystream_lastfm_item($action, $date, $icon, $name) {
+  return '<li class="activitystrea-lastfm">'. $icon .' '. $name .' listened to '. l($action->title, $action->link) ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 
 function activitystream_lastfm_theme() {
@@ -71,7 +67,7 @@ function activitystream_lastfm_theme() {
       'arguments' => array(),
     ),
     'activitystream_lastfm_item' => array(
-      'arguments' => array('activity' => NULL),
+      'arguments' => array('activity' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
   );
 }
\ No newline at end of file
diff -urp activitystream_orig/activitystream_twitter/activitystream_twitter.module activitystream/activitystream_twitter/activitystream_twitter.module
--- activitystream_orig/activitystream_twitter/activitystream_twitter.module	2008-07-31 12:05:27.000000000 -0500
+++ activitystream/activitystream_twitter/activitystream_twitter.module	2008-08-09 20:54:22.000000000 -0500
@@ -62,13 +62,9 @@ function theme_activitystream_twitter_ic
   return theme_image(drupal_get_path('module', 'activitystream_twitter') .'/twitter.png', 'Twitter');
 }
 
-function theme_activitystream_twitter_item($activity) {
-  $node = node_load($activity->nid);
-  $date = theme('activitystream_date', $node->created);
-  $user = user_load(array('uid' => $node->uid));
-  $title = activitystream_twitter_makelinks($node->title);
-  $name = theme('activitystream_username', $user);
-   return '<span class="activitystream-item">'. theme('activitystream_twitter_icon') ." <span>$name ". l('tweeted', $activity->link) ." \"". $title ."\" <span class=\"activitystream-created\">$date</span></span>". l('#', 'node/'. $node->nid, array('class' => 'permalink')) .'</span>';
+function theme_activitystream_twitter_item($action, $date, $icon, $name) {
+  $title = activitystream_twitter_makelinks($action->title);
+  return '<li class="activitystream-twitter">'. $icon .' '. $name .' '. l('tweeted', $action->link) .' \ '. $title ." <span class=\"activitystream-created\">$date</span>". l('#', 'node/'. $action->nid, array('attributes' => array('class' => 'permalink'))) .'</li>';
 }
 function activitystream_twitter_makelinks($text) {
   // autolink URLS
@@ -87,7 +83,7 @@ function activitystream_twitter_theme() 
       'arguments' => array(),
     ),
     'activitystream_twitter_item' => array(
-      'arguments' => array('activity' => NULL),
+      'arguments' => array('activity' => NULL, 'date' => NULL, 'icon' => NULL, 'name' => NULL),
     ),
   );
 }
