Index: calendar/ChangeLog
===================================================================
--- calendar/ChangeLog	(revision 8047)
+++ calendar/ChangeLog	(working copy)
@@ -1,3 +1,11 @@
+2007-09-10  Milan Crha  <mcrha@redhat.com>
+
+	** Fix for bug #415817
+
+	* backends/file/e-cal-backend-file.c:
+	(e_cal_backend_file_modify_object): Update start/end time for
+	recurrence instances even when only end time has been changed.
+
 2007-09-10  Chenthill Palanisamy  <pchenthill@novell.com>
 
 	** Fix for bug #426421
Index: calendar/backends/file/e-cal-backend-file.c
===================================================================
--- calendar/backends/file/e-cal-backend-file.c	(revision 8047)
+++ calendar/backends/file/e-cal-backend-file.c	(working copy)
@@ -2062,18 +2062,32 @@
 				recur.zone = start.zone;
 			
 			if (icaltime_compare_date_only (start, recur) == 0) {
+				icaltimetype end = icalcomponent_get_dtend (icalcomp);
 				ECalComponentDateTime m_sdate, m_endate;
 
 				e_cal_component_get_dtstart (obj_data->full_object, &m_sdate);
 				e_cal_component_get_dtend (obj_data->full_object, &m_endate);
 
-				if (icaltime_compare (start, recur) != 0) {
-					icaltimetype end = icalcomponent_get_dtend (icalcomp);
+				if (icaltime_compare (start, recur) != 0 ||
+				    !m_endate.value ||
+				    icaltime_compare (end, *(m_endate.value)) != 0) {
 					
 					m_sdate.value->hour = start.hour;
 					m_sdate.value->minute = start.minute;
-					m_sdate.value->second = 
-						
+					m_sdate.value->second = start.second;
+
+					if (!m_endate.value) {
+						/* create one if not exists and make same date
+						   and time zone like start */
+						m_endate.value = g_new (struct icaltimetype, 1);
+						*m_endate.value = *m_sdate.value;
+
+						if (m_endate.tzid)
+							g_free ((char*)m_endate.tzid);
+
+						m_endate.tzid = g_strdup (m_sdate.tzid);
+					}
+
 					m_endate.value->hour = end.hour;
 					m_endate.value->minute = end.minute;
 					m_endate.value->second = end.second;
@@ -2083,6 +2097,9 @@
 				e_cal_component_set_dtend (comp, &m_endate);
 				e_cal_component_set_recurid (comp, NULL);
 				e_cal_component_commit_sequence (comp);
+
+				e_cal_component_free_datetime (&m_sdate);
+				e_cal_component_free_datetime (&m_endate);
 			} 
 			e_cal_component_set_recurid (comp, NULL);
 			*new_object = e_cal_component_get_as_string (comp);
