diff -ru ../date-clean/theme/date-vcalendar.tpl.php ./theme/date-vcalendar.tpl.php
--- ../date-clean/theme/date-vcalendar.tpl.php	2010-08-17 17:14:28.759975018 +1000
+++ ./theme/date-vcalendar.tpl.php	2010-08-17 16:34:08.469977959 +1000
@@ -8,12 +8,12 @@
  *   @see date-valarm.tpl.php.
  */
 ?>
-BEGIN:VCALENDAR
-VERSION:2.0
-METHOD:PUBLISH
-X-WR-CALNAME: <?php print $calname ?> 
-PRODID:-//Drupal iCal API//EN
+BEGIN:VCALENDAR
+VERSION:2.0
+METHOD:PUBLISH
+X-WR-CALNAME: <?php print $calname ?>
+PRODID:-//Drupal iCal API//EN
 <?php foreach($events as $event): ?>
 <?php print theme('date_vevent', $event); ?>
 <?php endforeach; ?>
-END:VCALENDAR
\ No newline at end of file
+END:VCALENDAR
diff -ru ../date-clean/theme/date-vevent.tpl.php ./theme/date-vevent.tpl.php
--- ../date-clean/theme/date-vevent.tpl.php	2010-08-17 17:14:28.759975018 +1000
+++ ./theme/date-vevent.tpl.php	2010-08-17 16:35:04.309975017 +1000
@@ -17,24 +17,24 @@
  *    @see date-valarm.tpl.php.
  */
 ?>
-BEGIN:VEVENT
-UID:<?php print($event['uid'] . "\n") ?>
-SUMMARY:<?php print($event['summary'] . "\n") ?>
-DTSTAMP;TZID=<?php print $site_timezone ?>;VALUE=DATE-TIME:<?php print($current_date . "\n") ?>
-DTSTART;<?php print $event['timezone'] ?>VALUE=DATE-TIME:<?php print($event['start'] . "\n") ?>
+BEGIN:VEVENT
+UID:<?php print($event['uid'] . "\r\n") ?>
+SUMMARY:<?php print($event['summary'] . "\r\n") ?>
+DTSTAMP:<?php print($site_timezone_utc . "Z\r\n") ?>
+DTSTART;<?php print $event['timezone'] ?><?php print($event['start'] . "\r\n") ?>
 <?php if (!empty($event['end'])): ?>
-DTEND;<?php print $event['timezone'] ?>VALUE=DATE-TIME:<?php print($event['end'] . "\n") ?>
+DTEND;<?php print $event['timezone'] ?><?php print($event['end'] . "\r\n") ?>
 <?php endif; ?>
 <?php if (!empty($event['rrule'])) : ?>
-RRULE;<?php print($event['rrule'] . "\n") ?>
+<?php print($event['rrule'] . "\r\n") ?>
 <?php endif; ?>
 <?php if (!empty($event['url'])): ?>
-URL;VALUE=URI:<?php print($event['url'] . "\n") ?>
+URL;VALUE=URI:<?php print($event['url'] . "\r\n") ?>
 <?php endif; ?>
 <?php if (!empty($event['location'])): ?>
-LOCATION:<?php print($event['location'] . "\n") ?>
+LOCATION:<?php print($event['location'] . "\r\n") ?>
 <?php endif; ?>
 <?php if (!empty($event['description'])) : ?>
-DESCRIPTION:<?php print($event['description'] . "\n") ?>
+DESCRIPTION:<?php print($event['description'] . "\r\n") ?>
 <?php endif; ?>
-END:VEVENT
\ No newline at end of file
+END:VEVENT
diff -ru ../date-clean/theme/theme.inc ./theme/theme.inc
--- ../date-clean/theme/theme.inc	2010-08-17 17:14:28.759975018 +1000
+++ ./theme/theme.inc	2010-08-17 16:19:06.162474845 +1000
@@ -169,6 +169,7 @@
 function template_preprocess_date_vcalendar(&$vars) {
     
   $vars['current_date'] = date_format(date_now(), DATE_FORMAT_ICAL);
+  $vars['current_date_utc'] = date_format(date_now('UTC'), DATE_FORMAT_ICAL);
   $vars['site_timezone'] = date_default_timezone_name();
   $vars['calname'] = date_ical_escape_text(!empty($vars['calname']) ? $vars['calname'] : variable_get('site_name', ''));
   
@@ -183,7 +184,7 @@
       $events[$uid] = $event;
       $timezone = timezone_name_get(date_timezone_get($event['start']));
       if (!empty($timezone)) {
-        $events[$uid]['timezone'] = "TZID=$timezone;";
+        $events[$uid]['timezone'] = "TZID=$timezone:";
       }
       else {
         $events[$uid]['timezone'] = '';
@@ -212,7 +213,7 @@
           }
         }
         elseif (in_array($key, array('summary', 'description', 'location'))) {
-          $events[$uid][$key] = date_ical_escape_text($value);
+          $events[$uid][$key] = date_ical_escape_text(html_entity_decode($value, ENT_QUOTES, 'UTF-8'));
         }
       }
     }
@@ -397,4 +398,4 @@
   else {
     return date_format_interval($start_date, $interval);
   }
-}
\ No newline at end of file
+}
