diff -urp /tmp/event/event.module event/event.module
--- /tmp/event/event.module	2008-01-02 00:37:57.000000000 +0100
+++ event/event.module	2008-01-11 19:23:01.303490522 +0100
@@ -282,6 +282,12 @@ function event_admin_overview_settings()
     '#default_value' => variable_get('event_type_control', 'all'),
     '#options' => array('all' => t('Show content type filter control on calendar views'), 'request' => t('Only show content type filter control when content type filter view is requested'), 'never' => t('Never show content type filter control')));
 
+  $form['event_weight'] = array(
+    '#title' => t('Event Weight'),
+    '#type' => 'weight',
+    '#default_value' => variable_get('event_weight', '-10'),
+  );
+
   return system_settings_form($form);
 }
 
@@ -822,8 +828,10 @@ function _event_node_ical($node) {
   $event = array();
   // Allow modules to affect item fields
   node_invoke_nodeapi($node, 'ical item');
-  $event['start'] = $node->event['start'];
-  $event['end'] = $node->event['end'];
+  $offset=(event_explode_date(event_check_dst($node)));
+  $offset=$offset['hour'] * 60 * 60;
+  $event['start']=date('Y-m-d H:i:s',(event_mktime(event_explode_date($node->event['start'])) - $offset));
+  $event['end']=date('Y-m-d H:i:s',(event_mktime(event_explode_date($node->event['end'])) - $offset));
   if (module_exists('location')) {
     if (isset($node->locations[0])) {
       $posted_locations[0] = location_form2api($node->locations[0]);
@@ -836,16 +844,17 @@ function _event_node_ical($node) {
         $posted_locations[0]['province'] = isset($postal_data['province']) ? $postal_data['province'] : '';
       }
 
-      if ($output = theme('locations', $posted_locations, variable_get('location_suppress_country', 0) ? array('country') : array())) {
+      if ($output = theme('ical_locations', $posted_locations, variable_get('location_suppress_country', 0) ? array('country') : array())) {
           $event['location'] = $output;
       }
     }
   }
   $event['summary'] = $node->title;
-  $event['description'] = check_markup($node->teaser ? $node->teaser : $node->body);
+  $event['description'] = strip_tags(check_markup($node->teaser ? $node->teaser : $node->body));
   $event['uid'] = url("node/$node->nid", NULL, NULL, 1);
   $event['url'] = url("node/$node->nid", NULL, NULL, 1);
-
+  $event['has_time']=$node->event['has_time'];//serialize($node);//->has_time;
+  
   return $event;
 }
 
@@ -1978,11 +1987,17 @@ function event_form_alter($form_id, &$fo
     case $form['type']['#value'] .'_node_form':
       if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') {
 
+        $form['event'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Date/Time'),
+          '#weight' => variable_get('event_weight', -15),
+        );
+
         $form['event']['has_time'] = array(
           '#type' => 'checkbox',
           '#title' => t('Event has time'),
           '#default_value' => !isset($node->event['has_time']) ? 1 : $node->event['has_time'],
-          '#weight' => -16,
+          '#weight' => -6,
           '#description' => t('Is time important for this event? Uncheck if event takes all day.')
         );
 
@@ -1990,7 +2005,7 @@ function event_form_alter($form_id, &$fo
           '#type' => 'checkbox',
           '#title' => t('Event has end date'),
           '#default_value' => $node->event['has_end_date'],
-          '#weight' => -14,
+          '#weight' => 0,
           '#description' => t('Check if you want to specify end date for this event, then choose end date below.')
         );
 
@@ -2024,7 +2039,7 @@ function event_form_alter($form_id, &$fo
             '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
             '#size' => 19,
             '#maxlength' => 19,
-            '#weight' => -15,
+            '#weight' => -3,
             '#description' => t('YYYY-MM-DD HH:MM'),
             );
           $form['event']['event_end'] = array(
@@ -2037,7 +2052,7 @@ function event_form_alter($form_id, &$fo
             '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
             '#size' => 19,
             '#maxlength' => 19,
-            '#weight' => -13,
+            '#weight' => 2,
             '#description' => t('YYYY-MM-DD HH:MM'),
             );
         }
@@ -2045,14 +2060,14 @@ function event_form_alter($form_id, &$fo
           $form['event']['start'] = array(
             '#type' => 'fieldset',
             '#title' => t('Start date'),
-            '#weight' => -15
+            '#weight' => -3
             );
           $form['event']['start']['date'] = event_form_date(isset($node->event['start_orig']) ? $node->event['start_orig'] : _event_user_time(), 'start', $node->event['start_offset']);
 
           $form['event']['end'] = array(
             '#type' => 'fieldset',
             '#title' => t('End date'),
-            '#weight' => -13
+            '#weight' => 2
             );
           $form['event']['end']['date'] = event_form_date(isset($node->event['end_orig']) ? $node->event['end_orig'] : _event_user_time(), 'end', $node->event['end_offset']);
         }
@@ -2064,7 +2079,7 @@ function event_form_alter($form_id, &$fo
             '#default_value' => ($node->event['timezone'] ? $node->event['timezone'] : variable_get('date_default_timezone_id', 0)),
             '#options' => event_zonelist(),
             '#description' => t('Select the time zone this event occurs in.'),
-            '#weight' => -12
+            '#weight' => 4
             );
         }
         elseif (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone) && (variable_get('event_timezone_input', 'site') == 'user')) {
@@ -2630,6 +2645,18 @@ function event_is_dst($dst_region, $time
 }
 
 /**
+ * make a date object
+ */
+function event_mktime($date_a, $type='array')
+{
+  if ($type == 'string') {
+    $date_a = event_explode_date($date_a);
+  }
+  
+   return mktime((int)$date_a['hour'], (int)$date_a['minute'], (int)$date_a['second'], (int)$date_a['month'], (int)$date_a['day'], (int)$date_a['year']);
+}
+
+/**
  * Compares two dates in format YYYY-MM-DD HH:mm:ss or as a date array
  *
  * @param $date_a first date
@@ -2640,13 +2667,8 @@ function event_is_dst($dst_region, $time
  *         FALSE else
  */
 function event_is_later($date_a, $date_b, $type = 'array') {
-  if ($type == 'string') {
-    $date_a = event_explode_date($date_a);
-    $date_b = event_explode_date($date_b);
-  }
-
-  $date_a = mktime((int)$date_a['hour'], (int)$date_a['minute'], (int)$date_a['second'], (int)$date_a['month'], (int)$date_a['day'], (int)$date_a['year']);
-  $date_b = mktime((int)$date_b['hour'], (int)$date_b['minute'], (int)$date_b['second'], (int)$date_b['month'], (int)$date_b['day'], (int)$date_b['year']);
+  $date_a=event_mktime($date_a,$type);
+  $date_b=event_mktime($date_b,$type);
 
   if ($date_a >= $date_b) {
     return TRUE;
Only in event: event.module_54.patch
Only in event: event.module.orig
diff -urp /tmp/event/ical.inc event/ical.inc
--- /tmp/event/ical.inc	2007-08-29 18:00:32.000000000 +0200
+++ event/ical.inc	2008-01-11 18:49:00.706516839 +0100
@@ -37,7 +37,7 @@ function ical_export($events, $calname =
   $output .= "PRODID:-//strange bird labs//Drupal iCal API//EN\n";
   foreach ($events as $uid => $event) {
     $output .= "BEGIN:VEVENT\n";
-    $output .= "DTSTAMP;VALUE=DATE:". gmdate("Ymd\THis\Z", time())."\n";
+    $output .= "DTSTAMP;VALUE=DATE:". gmdate("Ymd\THis\Z", time()).$event['start']."\n";
     if ($event['start'] == $event['end']) { // all day event
       $output .= "DTSTART;VALUE=DATE:" . event_format_date($event['start'], 'custom', "Ymd\THis\Z") . "\n";
       //If allday event, set to day after allday start
@@ -45,8 +45,13 @@ function ical_export($events, $calname =
       $output .= "DTEND;VALUE=DATE:" . event_format_date($end_date, 'custom', 'Ymd') . "\n";
     }
     else if ($event['start'] && $event['end']) {
-      $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") . "\n";
-      $output .= "DTEND;VALUE=DATE-TIME:". event_format_date($event['end'], 'custom', "Ymd\THis\Z") . "\n";
+      if ($event['has_time']) {
+        $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") . "\n";
+        $output .= "DTEND;VALUE=DATE-TIME:". event_format_date($event['end'], 'custom', "Ymd\THis\Z") . "\n";
+      } else {
+        $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd") ."\n";
+        $output .= "DTEND;VALUE=DATE-TIME:". event_format_date($event['end'], 'custom', "Ymd") . "\n";
+      }
     }
     else if ($event['start']) {
       $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") ."\n";
@@ -400,3 +405,95 @@ function ical_quoted_printable_encode($t
   }
   return trim($output);
 }
+
+
+function theme_ical_locations($locations = array(), $hide = array()) {
+  $output = '';  
+
+  if (count($locations)) {
+    foreach ($locations as $location) {
+      $output .= theme('ical_location', $location, $hide);
+    }
+  }
+
+  return $output;
+}
+
+/**
+ * Generates HTML for the passed location.
+ *
+ * @param $location
+ *   An associative array where
+ *      'street'       => A string representing the street location
+ *      'additional'   => A string for any additional portion of the street location
+ *      'city'         => A string for the city name
+ *      'province'     => The standard postal abbreviation for the province
+ *      'country'      => The two-letter ISO code for the country of the location (REQUIRED)
+ *      'postal_code'  => The international postal code for the location
+ *
+ * @param $hide
+ *   An linear array where the values are the location fields to suppress in the themed display.
+ *
+ * @return
+ *   An HTML string with special tags for locations.
+ */
+function theme_ical_location($location = array(), $hide = array()) {
+  if (_location_nothing_to_show($location, $hide)) {
+    return '';
+  }
+
+  $output = '';
+  if (count($location)) {
+    $output .= "  ";
+    if (!empty($location['name']) && !in_array('name', $hide)) {
+      $output .= $location['name'] .'  ';
+    }
+    if (!empty($location['street']) && !in_array('street', $hide)) {
+      $output .= $location['street'];
+      if (!empty($location['additional']) && !in_array('street', $hide)) {
+        $output .= ' ' . $location['additional'];
+      }
+      $output .='  ';
+    }
+
+    if (!empty($location['city']) && !in_array('city', $hide)) {
+      $city_province_postal[] = $location['city'];
+    }
+
+    if ((!empty($location['city']) && !in_array('city', $hide)) ||
+        (!empty($location['province']) && !in_array('province', $hide)) ||
+        (!empty($location['postal_codet']) && !in_array('postal_code', $hide))) {
+
+      $city_province_postal = array();
+
+      if (!empty($location['city']) && !in_array('city', $hide)) {
+        $city_province_postal[] =  $location['city'] .'  ';
+      }
+
+      if (!empty($location['province']) && !in_array('province', $hide)) {
+        $city_province_postal[] =  $location['province'] .'  ';
+      }
+
+      if (!empty($location['postal_code']) && !in_array('postal_code', $hide)) {
+        $city_province_postal[] =  $location['postal_code'] .'  ';
+      }
+
+      $output .= implode(', ', $city_province_postal);
+    }
+
+    if (!empty($location['country']) && !in_array('country', $hide)) {
+      $countries = _location_get_iso3166_list();
+      $output .=  t($countries[$location['country']]) .'  ';
+    }
+
+//    if (isset($location['latitude']) && isset($location['longitude'])) {
+//      $output .=  '<div class="geo"><abbr class="latitude" title="'. $location['latitude'] .'" /><abbr class="longitude" title="'. $location['latitude'] .'" /></div>';
+    //   }
+
+//    $output .= '</div></div>';
+  }
+
+  $output .= location_map_link($location);
+
+  return $output;
+}
