Index: ical.inc
===================================================================
--- ical.inc	(revision 203)
+++ ical.inc	(working copy)
@@ -38,11 +38,14 @@
   foreach ($events as $uid => $event) {
     $output .= "BEGIN:VEVENT\n";
     $output .= "DTSTAMP;VALUE=DATE-TIME:". gmdate("Ymd\THis\Z", time()) ."\n";
+    
     if (!$event['has_time']) { // all day event
-      $output .= "DTSTART;VALUE=DATE-TIME:" . event_format_date($event['start_utc'], 'custom', "Ymd\THis\Z") ."\n";
-      //If allday event, set to day after allday start
-      $end_date = event_date_later($event['start'], 1);
-      $output .= "DTEND;VALUE=DATE-TIME:" . event_format_date($end_date, 'custom', 'Ymd') ."\n";
+    	// outlook and google calendar flag an event as all day event if DATE (not DATE-TIME) is specified
+      $output .= "DTSTART;VALUE=DATE:" . event_format_date($event['start_utc'], 'custom', "Ymd") ."\n";
+      if (!empty($event['end_utc']))
+      {
+      	$output .= "DTEND;VALUE=DATE:" . event_format_date($event['end_utc'], 'custom', "Ymd") ."\n";
+      }
     }
     else if (!empty($event['start_utc']) && !empty($event['end_utc'])) {
       $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start_utc'], 'custom', "Ymd\THis\Z") ."\n";
