Index: calendar/gui/e-calendar-view.c
===================================================================
--- calendar/gui/e-calendar-view.c	(revision 35225)
+++ calendar/gui/e-calendar-view.c	(working copy)
@@ -1287,7 +1287,24 @@ transfer_item_to (ECalendarViewEvent *ev
 		if (!e_cal_modify_object (dest_client, event->comp_data->icalcomp, CALOBJ_MOD_ALL, NULL))
 			return;
 	} else {
-		orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
+		if (e_cal_util_component_is_instance (event->comp_data->icalcomp)) {
+			icalcomponent *icalcomp = NULL;
+
+			if (e_cal_get_object (event->comp_data->client, uid, NULL, &icalcomp, NULL)) {
+				/* use master object when working with recurring event */
+				orig_icalcomp = icalcomponent_new_clone (icalcomp);
+				icalcomponent_free (icalcomp);
+			} else {
+				/* ... or remove the recurrence id property */
+				icalproperty *prop;
+
+				orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
+				prop = icalcomponent_get_first_property (orig_icalcomp, ICAL_RECURRENCEID_PROPERTY);
+				if (prop)
+					icalcomponent_remove_property (orig_icalcomp, prop);
+			}
+		} else
+			orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
 
 		icalprop = icalproperty_new_x ("1");
 		icalproperty_set_x_name (icalprop, "X-EVOLUTION-MOVE-CALENDAR");
@@ -1314,10 +1331,16 @@ transfer_item_to (ECalendarViewEvent *ev
 
 	/* remove the item from the source calendar */
 	if (remove_item) {
-		if (e_cal_util_component_is_instance (event->comp_data->icalcomp) || e_cal_util_component_is_instance (event->comp_data->icalcomp))
-			e_cal_remove_object_with_mod (event->comp_data->client, uid,
-					NULL, CALOBJ_MOD_ALL, NULL);
-		else
+		if (e_cal_util_component_is_instance (event->comp_data->icalcomp) || e_cal_util_component_has_recurrences (event->comp_data->icalcomp)) {
+			char *rid = NULL;
+			struct icaltimetype recur_id = icalcomponent_get_recurrenceid (event->comp_data->icalcomp);
+
+			if (!icaltime_is_null_time (recur_id) )
+				rid = icaltime_as_ical_string (recur_id);
+
+			e_cal_remove_object_with_mod (event->comp_data->client, uid, rid, CALOBJ_MOD_ALL, NULL);
+			g_free (rid);
+		} else
 			e_cal_remove_object (event->comp_data->client, uid, NULL);
 	}
 }
Index: calendar/ChangeLog
===================================================================
--- calendar/ChangeLog	(revision 35225)
+++ calendar/ChangeLog	(working copy)
@@ -1,3 +1,10 @@
+2008-03-20  Milan Crha  <mcrha@redhat.com>
+
+	** Fix for bug #310844
+
+	* gui/e-calendar-view.c: (transfer_item_to):
+	Transfer master object instead of the instance for recurring events.
+
 2008-03-13  Milan Crha  <mcrha@redhat.com>
 
 	** Fix for bug #512543
