diff -rupN calendar_old//includes/calendar.inc calendar/includes/calendar.inc
--- calendar_old//includes/calendar.inc	2009-05-12 08:24:27.000000000 +1000
+++ includes/calendar.inc	2009-05-26 12:31:43.000000000 +1000
@@ -516,10 +516,46 @@ function calendar_build_nodes(&$view, &$
           }
           
           // Make date objects
+          // Get fields settings so you can determine all_day based on granularity
+          $global_settings = db_result(db_query("SELECT global_settings FROM {content_node_field} WHERE field_name = '%s'", $real_field));
+          $widget_settings = db_result(db_query("SELECT widget_settings FROM {content_node_field_instance} WHERE field_name = '%s' AND type_name = '%s'", $real_field, $node->node_type));
+          $global_settings = unserialize($global_settings);
+          $widget_settings = unserialize($widget_settings);
+          switch ($widget_settings['increment']) {
+            case '1':
+              $last_time = '59';
+              break;
+            case '5':
+              $last_time = '55';
+              break;
+            case '10':
+              $last_time = '50';
+              break;
+            case '15':
+              $last_time = '45';
+              break;
+            case '30':
+              $last_time = '30';
+              break;
+          }
+          $max_time = '';
+          $max_format = '';
+          if (isset($global_settings['granularity']['hour'])) {
+            $max_time .= '23';
+            $max_format .= 'H';
+          }
+          if (isset($global_settings['granularity']['minute'])) {
+            $max_time .= $max_time ? ':' . $last_time : $last_time;
+            $max_format .= $max_format ? ':i' : 'i';
+          }
+          if (isset($global_settings['granularity']['second'])) {
+            $max_time .= $max_time ? ':' . $last_time : $last_time;
+            $max_format .= $max_format ? ':s' : 's';
+          }
           $node->calendar_start_date = date_create($node->calendar_start, timezone_open($to_zone));
           $node->calendar_end_date = date_create($node->calendar_end, timezone_open($to_zone));
           if (date_format($node->calendar_start_date, 'H:i:s') == '00:00:00' && 
-            date_format($node->calendar_end_date, 'H:i:s') == '23:59:59') {
+            date_format($node->calendar_end_date, $max_format) == $max_time) {
             $node->calendar_all_day = TRUE;
           }
           else {
