diff --git a/calendar/libecal/e-cal.c b/calendar/libecal/e-cal.c
index c8f1c91..8d30735 100644
--- a/calendar/libecal/e-cal.c
+++ b/calendar/libecal/e-cal.c
@@ -60,6 +60,7 @@ typedef struct {
 	gboolean bool;
 	char *string;
 
+	char *op_str;
 	ECalView *query;
 	ECalViewListener *listener;
 } ECalendarOp;
@@ -300,13 +301,14 @@ convert_type (ECalSourceType type)
 /* EBookOp calls */
 
 static ECalendarOp*
-e_calendar_new_op (ECal *ecal)
+e_calendar_new_op (ECal *ecal, const char *str)
 {
 	ECalendarOp *op = g_new0 (ECalendarOp, 1);
 
 	op->done = e_flag_new ();
 
 	ecal->priv->current_op = op;
+	op->op_str = g_strdup (str);
 
 	return op;
 }
@@ -327,6 +329,7 @@ e_calendar_free_op (ECalendarOp *op)
 {
 	/* XXX more stuff here */
 	e_flag_free (op->done);
+	g_free (op->op_str);
 	g_free (op);
 }
 
@@ -1643,7 +1646,7 @@ open_calendar (ECal *ecal, gboolean only_if_exists, GError **error, ECalendarSta
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 	/* start the open operation */
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "open_calendar");
 
 	g_mutex_unlock (priv->mutex);
 
@@ -1898,7 +1901,7 @@ e_cal_remove (ECal *ecal, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "cal_remove");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2153,7 +2156,7 @@ get_read_only (ECal *ecal, gboolean *read_only, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_read_only");
 
 	/* set it to true so that op does not emit cond signals for all notifications
 	   from the backend */
@@ -2226,7 +2229,7 @@ e_cal_get_cal_address (ECal *ecal, char **cal_address, GError **error)
 			E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 		}
 
-		our_op = e_calendar_new_op (ecal);
+		our_op = e_calendar_new_op (ecal, "get_cal_address");
 
 		g_mutex_unlock (ecal->priv->mutex);
 
@@ -2297,7 +2300,7 @@ e_cal_get_alarm_email_address (ECal *ecal, char **alarm_address, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_alarm_address");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2364,7 +2367,7 @@ e_cal_get_ldap_attribute (ECal *ecal, char **ldap_attribute, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_ldap_attribute");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2421,7 +2424,7 @@ load_static_capabilities (ECal *ecal, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "load_static_capabilities");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2654,7 +2657,7 @@ e_cal_get_default_object (ECal *ecal, icalcomponent **icalcomp, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_default_object");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2729,7 +2732,7 @@ e_cal_get_attachments_for_comp (ECal *ecal, const char *uid, const char *rid, GS
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_attachments_for_comp");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2800,7 +2803,7 @@ e_cal_get_object (ECal *ecal, const char *uid, const char *rid, icalcomponent **
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_object");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -2911,7 +2914,7 @@ e_cal_get_objects_for_uid (ECal *ecal, const char *uid, GList **objects, GError
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_objects_for_uid");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -3054,7 +3057,7 @@ e_cal_get_changes (ECal *ecal, const char *change_id, GList **changes, GError **
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_changes");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -3148,7 +3151,7 @@ e_cal_get_object_list (ECal *ecal, const char *query, GList **objects, GError **
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_object_list");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -3275,7 +3278,7 @@ e_cal_get_free_busy (ECal *ecal, GList *users, time_t start, time_t end,
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_freebusy");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -3744,6 +3747,7 @@ e_cal_generate_instances_for_object (ECal *ecal, icalcomponent *icalcomp,
 	ECalComponentDateTime datetime;
 	icaltimezone *start_zone;
 	struct instances_info *instances_hold;
+	gboolean is_single_instance = FALSE;
 
 	g_return_if_fail (E_IS_CAL (ecal));
 	g_return_if_fail (start >= 0);
@@ -3755,9 +3759,12 @@ e_cal_generate_instances_for_object (ECal *ecal, icalcomponent *icalcomp,
 	comp = e_cal_component_new ();
 	e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp));
 
+	if (!e_cal_component_has_recurrences (comp))
+		is_single_instance = TRUE;
+
 	/*If the backend stores it as individual instances and does not
 	 * have a master object - do not expand*/
-	if (e_cal_get_static_capability (ecal, CAL_STATIC_CAPABILITY_RECURRENCES_NO_MASTER)) {
+	if (is_single_instance || e_cal_get_static_capability (ecal, CAL_STATIC_CAPABILITY_RECURRENCES_NO_MASTER)) {
 
 		/*return the same instance */
 		result = (* cb)  (comp, icaltime_as_timet_with_zone (icalcomponent_get_dtstart (icalcomp), ecal->priv->default_zone),
@@ -4024,7 +4031,7 @@ e_cal_discard_alarm (ECal *ecal, ECalComponent *comp, const char *auid, GError *
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "discard_alarm");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4265,7 +4272,7 @@ e_cal_create_object (ECal *ecal, icalcomponent *icalcomp, char **uid, GError **e
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "create_object");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4346,7 +4353,7 @@ e_cal_modify_object (ECal *ecal, icalcomponent *icalcomp, CalObjModType mod, GEr
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "modify_object");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4424,7 +4431,7 @@ e_cal_remove_object_with_mod (ECal *ecal, const char *uid,
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "remove_object_with_mod");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4513,7 +4520,7 @@ e_cal_receive_objects (ECal *ecal, icalcomponent *icalcomp, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "receive_objects");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4585,7 +4592,7 @@ e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomp
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "send_objects");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4672,7 +4679,7 @@ e_cal_get_timezone (ECal *ecal, const char *tzid, icaltimezone **zone, GError **
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_timezone");
 
 	g_mutex_unlock (priv->mutex);
 
@@ -4836,7 +4843,7 @@ e_cal_add_timezone (ECal *ecal, icaltimezone *izone, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "add_timezone");
 
 	g_mutex_unlock (priv->mutex);
 
@@ -4923,7 +4930,7 @@ e_cal_get_query (ECal *ecal, const char *sexp, ECalView **query, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "get_query");
 
 	g_mutex_unlock (ecal->priv->mutex);
 
@@ -4995,7 +5002,7 @@ e_cal_set_default_timezone (ECal *ecal, icaltimezone *zone, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
 	}
 
-	our_op = e_calendar_new_op (ecal);
+	our_op = e_calendar_new_op (ecal, "set_default_timezone");
 
 	g_mutex_unlock (priv->mutex);
 
