Index: date_api_ical.inc===================================================================--- date_api_ical.inc (revision 2179(
+++ date_api_ical.inc (working copy)
@@ -722,18 +722,23 @@ function date_api_ical_build_rrule($form_values) {
 
   // Exceptions dates go last, on their own line.
   if (isset($form_values['RDATE']) && is_array($form_values['RDATE'])) {
+    $tz = date_default_timezone_name();
     $ex_dates = array();
     foreach ($form_values['RDATE'] as $value) {
-	$tz = variable_get('date_default_timezone_name', NULL);
-      $ex_dates[] = date_convert($value['datetime'], DATE_DATETIME, DATE_ICAL, $value['tz']);
+      $ex_date = date_convert($value['datetime'], DATE_DATETIME, DATE_ICAL, $tz);
+      if(!empty($ex_date)) {
+        $ex_dates[] = $ex_date;
+      }
     }
     if (!empty($ex_dates)) {
       sort($ex_dates);
-      $RRULE .= chr(13) . chr(10) .'RDATE:'. implode(',', $ex_dates);
+      $RRULE .= chr(13) . chr(10) .'RDATE;TZID=' . $tz . ':'. implode(',', $ex_dates);
     }
   }
   elseif (!empty($form_values['RDATE'])) {
-    $RRULE .= chr(13) . chr(10) .'RDATE:'. $form_values['RDATE'];
+    $tz = date_default_timezone_name();
+    $ex_date = date_convert($form_values['RDATE'], DATE_DATETIME, DATE_ICAL, $tz);
+    $RRULE .= chr(13) . chr(10) .'RDATE;TZID=' . $tz . ':'. $ex_date;
   }
 
   return $RRULE;
Index: date_repeat/date_repeat_calc.inc===================================================================--- date_repeat/date_repeat_calc.inc	(revision 2179)+++ date_repeat/date_repeat_calc.inc	(working copy)@@ -49,7 +49,7 @@   // Create a date object for the start and end dates.
   $start_date = date_make_date($start, $timezone);
   $end_date = date_make_date($end, $timezone);
-  
+  date_time_set($end_date, '23', '59', '59');
   // If the rule has an UNTIL, see if that is earlier than the end date.
   if (!empty($rrule['UNTIL'])) {
     $until_date = date_ical_date($rrule['UNTIL']);
Index: date_repeat/date_repeat_form.inc===================================================================--- date_repeat/date_repeat_form.inc	(revision 2179)+++ date_repeat/date_repeat_form.inc	(working copy)@@ -194,7 +194,6 @@       'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day'))),
       );
   }
-  
   // collect additions in the same way as exceptions - implements RDATE.
   $element['additions'] = array(
     '#type' => 'fieldset',
@@ -217,14 +216,14 @@         '#type' => $element['#date_repeat_widget'],
         '#default_value' => $RDATE,
         '#date_timezone' => !empty($element['#date_timezone']) ? $element['#date_timezone'] : date_default_timezone_name(),
-        '#date_format' => !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d',
+        '#date_format' => !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day', 'hour', 'minute')) : 'Y-m-d H:i',
         '#date_text_parts'  => !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : array(),
         '#date_year_range'  => !empty($element['#date_year_range']) ? $element['#date_year_range'] : '-3:+3',
         '#date_label_position' => !empty($element['#date_label_position']) ? $element['#date_label_position'] : 'within',
         ),
       'tz' => array('#type' => 'hidden', '#value' => $element['#date_timezone']),
-      'all_day' => array('#type' => 'hidden', '#value' => 1),
-      'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day'))),
+      'all_day' => array('#type' => 'hidden', '#value' => 0),      
+      'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day', 'hour', 'minute'))),
       );
   }
 
@@ -344,7 +343,7 @@     foreach ($form_values['RDATE'] as $delta => $value) {
       if (is_array($value['datetime'])) {
         $rdate_element['#value'] = $form_values['RDATE'][$delta]['datetime'];
-        $rdate_element['#date_format'] = date_limit_format($element['#date_format'], array('year', 'month', 'day'));
+        $rdate_element['#date_format'] = date_limit_format($element['#date_format'], array('year', 'month', 'day', 'hour', 'minute'));
         $form_values['RDATE'][$delta]['datetime'] = $function($rdate_element);
       }
     }
