diff -urpN --strip-trailing-cr ../event-orig/event.module ./event.module
--- ../event-orig/event.module	2009-02-03 01:21:19.000000000 +0100
+++ ./event.module	2009-03-22 16:08:57.000000000 +0100
@@ -81,7 +81,10 @@ function event_theme() {
     'event_links' => array('arguments' => array('links' => NULL, 'view' => NULL)),
     'event_ical_link' => array('arguments' => array('path' => NULL)),
     'event_more_link' => array('arguments' => array('path' => NULL)),
-    'event_upcoming_item' => array('arguments' => array('node' => NULL, 'types' => NULL)),
+    'event_upcoming_item' => array(
+      'template' => 'event-upcoming-item',
+      'arguments' => array('node' => NULL, 'node_types' => NULL)
+      ),
     'event_upcoming_block' => array('arguments' => array('items' => NULL)),
   );
 }
@@ -2078,8 +2081,23 @@ function _event_block_upcoming($limit = 
       else {
         $timeleft = t('Now');
       }
-
       $node->event['timeleft'] = $timeleft;
+
+      // Retrieve start/end date/time of the event, to allow their usage in theming
+      $object = event_get_event_load($node->nid);
+      $node->event['start'] = $object->event_start;
+      $node->event['end'] = $object->event_end;
+      $node->event['has_time'] = $object->has_time;
+      $node->event['has_end_date'] = $object->has_end_date;
+      $node->event['start_utc'] = $object->event_start_utc;
+      $node->event['start_user'] = $object->event_start_user;
+      $node->event['start_site'] = $object->event_start_site;
+      $node->event['end_utc'] = $object->event_end_utc;
+      $node->event['end_user'] = $object->event_end_user;
+      $node->event['end_site'] = $object->event_end_site;
+      _event_prepare_start_end($node);
+
+      include_once(EVENT_PATH .'/event.theme');
       $node->event['node_type'] = node_get_types('name', $node);
       $items[] = theme('event_upcoming_item', $node, $types);
     }
@@ -2308,33 +2326,8 @@ function event_nodeapi(&$node, $op, $tea
         if (!empty($node->build_mode) && $node->build_mode == NODE_BUILD_PREVIEW) {
           event_pre_render($node);
         }
-        switch (variable_get('event_timezone_display', 'event')) {
-          case 'site':
-            if (variable_get('date_default_timezone_id', 0) != $node->timezone) {
-              $node->event['start'] = $node->event['start_site'];
-              $node->event['end'] = $node->event['end_site'];
-              break;
-            }
-            // no break
-          case 'event':
-            break;
-          case 'user':
-            $node->event['start'] = $node->event['start_user'];
-            $node->event['end'] = $node->event['end_user'];
-            break;
-        }
-
-        $node->event['start_exploded'] = event_explode_date($node->event['start']);
-        $node->event['end_exploded'] = event_explode_date($node->event['end']);
-
-        $format = event_strip_time(variable_get('date_format_short', 'm/d/Y - H:i'));
-        $node->event['start_format'] = event_format_date($node->event['start_exploded'], 'small');
-        $node->event['start_date_format'] = event_format_date($node->event['start_exploded'], 'custom', $format);
-        $node->event['start_time_format'] = event_format_date($node->event['start_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
-        $node->event['end_format'] = event_format_date($node->event['end_exploded'], 'small');
-        $node->event['end_date_format'] = event_format_date($node->event['end_exploded'], 'custom', $format);
-        $node->event['end_time_format'] = event_format_date($node->event['end_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
 
+        _event_prepare_start_end($node);
         include_once(EVENT_PATH .'/event.theme');
         $node->content['event'] = array(
           '#value' => theme('event_nodeapi', $node),
@@ -2387,6 +2380,39 @@ function event_nodeapi(&$node, $op, $tea
 }
 
 /**
+ * Helper function to prepare various start/end date/time items for theming.
+ */
+function _event_prepare_start_end(&$node) {
+
+  switch (variable_get('event_timezone_display', 'event')) {
+    case 'site':
+      if (variable_get('date_default_timezone_id', 0) != $node->timezone) {
+        $node->event['start'] = $node->event['start_site'];
+        $node->event['end'] = $node->event['end_site'];
+        break;
+      }
+      // no break
+    case 'event':
+      break;
+    case 'user':
+      $node->event['start'] = $node->event['start_user'];
+      $node->event['end'] = $node->event['end_user'];
+      break;
+  }
+
+  $node->event['start_exploded'] = event_explode_date($node->event['start']);
+  $node->event['end_exploded'] = event_explode_date($node->event['end']);
+
+  $format = event_strip_time(variable_get('date_format_short', 'm/d/Y - H:i'));
+  $node->event['start_format'] = event_format_date($node->event['start_exploded'], 'small');
+  $node->event['start_date_format'] = event_format_date($node->event['start_exploded'], 'custom', $format);
+  $node->event['start_time_format'] = event_format_date($node->event['start_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
+  $node->event['end_format'] = event_format_date($node->event['end_exploded'], 'small');
+  $node->event['end_date_format'] = event_format_date($node->event['end_exploded'], 'custom', $format);
+  $node->event['end_time_format'] = event_format_date($node->event['end_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
+}
+
+/**
  * Implementation of hook_cron
  */
 function event_cron() {
diff -urpN --strip-trailing-cr ../event-orig/event.theme ./event.theme
--- ../event-orig/event.theme	2008-12-25 17:19:17.000000000 +0100
+++ ./event.theme	2009-03-22 16:08:57.000000000 +0100
@@ -369,6 +369,25 @@ function template_preprocess_event_nodea
 }
 
 /**
+ * Format an individual upcoming event block item
+ *
+ * @param node
+ *   The node to render as an upcoming event
+ * @param types
+ *   List of event-enabled node types
+ * TODO: decorate with hcalendar
+ */
+function template_preprocess_event_upcoming_item(&$variables) {
+
+  // Re-use the event_nodeapi preprocess function to get various time/date variables
+  template_preprocess_event_nodeapi($variables);
+
+  $variables['node_title'] = check_plain($variables['node']->title);
+  $variables['node_link'] = l($variables['node']->title, 'node/'. $variables['node']->nid, array('attributes' => array('title' => $variables['node']->title)));
+  $variables['timeleft'] = $variables['node']->event['timeleft'];
+}
+
+/**
  * Format the event filter control dropdown
  *
  * @param form
@@ -458,22 +477,6 @@ function theme_event_more_link($path) {
 }
 
 /**
- * Format an individual upcoming event block item
- *
- * @param node
- *   The node to render as an upcoming event
- * TODO: decorate with hcalendar
- */
-function theme_event_upcoming_item($node, $types = array()) {
-  $output = l($node->title, "node/$node->nid", array('attributes' => array('title' => $node->title)));
-  if (count($types) > 1) {
-    $output .= '<span class="event-nodetype">('. $node->event['node_type'] .')</span>';
-  }
-  $output .= '<span class="event-timeleft">('. $node->event['timeleft'] .')</span>';
-  return $output;
-}
-
-/**
  * Format the upcoming event block for event calendars
  *
  * @param items
diff -urpN --strip-trailing-cr ../event-orig/event-upcoming-item.tpl.php ./event-upcoming-item.tpl.php
--- ../event-orig/event-upcoming-item.tpl.php	1970-01-01 01:00:00.000000000 +0100
+++ ./event-upcoming-item.tpl.php	2009-03-22 16:08:57.000000000 +0100
@@ -0,0 +1,31 @@
+<?php
+// $Id:$
+
+/**
+ * @file event-upcoming-item.tpl.php
+ * Display an event in the upcoming events block view.
+ *
+ * Available variables:
+ * - $node_link: Node title, with link to the node
+ * - $node_title: Node title (not a link)
+ * - $node_type: Node type
+ * - $timeleft: Time left
+ * - $show_end: If the end date should be shown
+ * - $start_date: The unformatted start date
+ * - $end_date: The unformatted end date
+ * - $start_date_utc: The unformatted start date (UTC)
+ * - $end_date_utc: The unformatted end date (UTC)
+ * - $start_date_formatted: The formatted start date (Y-m-d), according to the chosen settings
+ * - $end_date_formatted: The formatted end date (Y-m-d), according to the chosen settings
+ * - $start_time_formatted: The formatted start time, according to the chosen settings
+ * - $end_time_formatted: The formatted end time, according to the chosen settings
+ * - $node_types: List of all event-enabled node types
+ *
+ * @see template_preprocess_event_upcoming_item()
+ */
+?>
+<?php print $node_link; ?>
+<?php if (count($node_types) > 1) { ?>
+  <span class="event-nodetype">(<?php print $node_type; ?>)</span>
+<?php  } ?>
+<span class="event-timeleft">(<?php print $timeleft; ?>)</span>
