diff --git a/src/calendar/e-cal-backend-ews-utils.c b/src/calendar/e-cal-backend-ews-utils.c
index 36116cc..6844ffe 100644
--- a/src/calendar/e-cal-backend-ews-utils.c
+++ b/src/calendar/e-cal-backend-ews-utils.c
@@ -52,9 +52,10 @@ e_ews_collect_attendees (icalcomponent *comp,
                          GSList **resource)
 {
 	icalproperty *prop;
-	icalparameter *param;
+	icalparameter *param, *partstat;
 	const gchar *str = NULL;
 	const gchar *org_email_address = NULL;
+	EEwsCollectedAttendee *ews_attendee;
 
 	/* we need to know who the orgenizer is so we wont duplicate him/her */
 	org_email_address = e_ews_collect_organizer (comp);
@@ -78,34 +79,56 @@ e_ews_collect_attendees (icalcomponent *comp,
 
 		/* if this attenddee is the orgenizer - dont add him/her
 		 in some cases there is no maito for email if meeting orginazer */
-		if (g_ascii_strcasecmp (org_email_address, str) == 0) continue;
+		if (g_ascii_strcasecmp (org_email_address, str) == 0)
+			continue;
 
 		/* figure type of attendee, add to relevant list */
 		param = icalproperty_get_first_parameter (prop, ICAL_ROLE_PARAMETER);
 
 		/*in case of new time proposal the role parameter is not a part of ical*/
-		if (!param) continue;
+		if (!param)
+			continue;
+
+		partstat = icalproperty_get_first_parameter (prop, ICAL_PARTSTAT_PARAMETER);
+
+		ews_attendee = g_new0 (EEwsCollectedAttendee, 1);
+		ews_attendee->email = str;
+		ews_attendee->status = partstat ? icalparameter_get_partstat (partstat) : ICAL_PARTSTAT_NONE;
+		ews_attendee->is_organizer = FALSE;
 
 		switch (icalparameter_get_role (param)) {
 		case ICAL_ROLE_OPTPARTICIPANT:
-			*optional = g_slist_append (*optional, (gpointer)str);
+			*optional = g_slist_append (*optional, ews_attendee);
 			break;
 		case ICAL_ROLE_CHAIR:
 		case ICAL_ROLE_REQPARTICIPANT:
-			*required = g_slist_append (*required, (gpointer)str);
+			*required = g_slist_append (*required, ews_attendee);
 			break;
 		case ICAL_ROLE_NONPARTICIPANT:
-			*resource = g_slist_append (*resource, (gpointer)str);
+			*resource = g_slist_append (*resource, ews_attendee);
 			break;
 		case ICAL_ROLE_X:
 		case ICAL_ROLE_NONE:
 			/* Ignore these for now */
+			g_free (ews_attendee);
 			break;
 		}
 	}
 
-	if (*required == NULL && *optional == NULL && *resource == NULL && org_email_address != NULL)
-		*required = g_slist_prepend (*required, (gpointer) org_email_address);
+	if (*required == NULL && *optional == NULL && *resource == NULL && org_email_address != NULL) {
+		ews_attendee = g_new0 (EEwsCollectedAttendee, 1);
+		ews_attendee->email = org_email_address;
+		ews_attendee->status = ICAL_PARTSTAT_NONE;
+		ews_attendee->is_organizer = TRUE;
+
+		*required = g_slist_prepend (*required, ews_attendee);
+	}
+}
+
+void
+e_ews_free_collected_attendees (GSList *attendees)
+{
+	g_slist_free_full (attendees, g_free);
 }
 
 gint
diff --git a/src/calendar/e-cal-backend-ews-utils.h b/src/calendar/e-cal-backend-ews-utils.h
index 6f265c0..b8a6361 100644
--- a/src/calendar/e-cal-backend-ews-utils.h
+++ b/src/calendar/e-cal-backend-ews-utils.h
@@ -34,7 +34,15 @@ G_BEGIN_DECLS
 #define SECS_IN_MINUTE 60
 
 const gchar *e_ews_collect_organizer (icalcomponent *comp);
+
+typedef struct {
+	const gchar *email;
+	icalparameter_partstat status;
+	gboolean is_organizer;
+} EEwsCollectedAttendee;
+
 void e_ews_collect_attendees (icalcomponent *comp, GSList **required, GSList **optional, GSList **resource);
+void e_ews_free_collected_attendees (GSList *attendees);
 
 void ewscal_set_time (ESoapMessage *msg, const gchar *name, icaltimetype *t, gboolean with_timezone);
 void ewscal_set_timezone (ESoapMessage *msg, const gchar *name, icaltimezone *icaltz);
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index b60a81a..13129ae 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -1099,22 +1099,75 @@ typedef struct {
 	icalcomponent *icalcomp;
 } EwsConvertData;
 
+static gchar *
+e_ews_get_response_time (icalcomponent *icalcomp)
+{
+	icalproperty *prop;
+	gchar *response_time = NULL;
+
+	prop = icalcomponent_get_first_property (icalcomp, ICAL_LASTMODIFIED_PROPERTY);
+	if (prop) {
+		struct icaltimetype tt = icalproperty_get_lastmodified (prop);
+		GTimeVal tv;
+
+		tv.tv_usec = 0;
+		tv.tv_sec = icaltime_as_timet (tt);
+
+		response_time = g_time_val_to_iso8601 (&tv);
+	}
+
+	if (!response_time) {
+		GTimeVal tv;
+
+		g_get_current_time (&tv);
+		response_time = g_time_val_to_iso8601 (&tv);
+	}
+
+	return response_time;
+}
+
 static void
 add_attendees_list_to_message (ESoapMessage *msg,
                                const gchar *listname,
-                               GSList *list)
+                               GSList *list,
+			       const gchar *response_time)
 {
 	GSList *item;
 
+	g_return_if_fail (response_time != NULL);
+
 	e_soap_message_start_element (msg, listname, NULL, NULL);
 
 	for (item = list; item != NULL; item = item->next) {
+		const EEwsCollectedAttendee *ews_attendee = item->data;
+		gboolean with_response_time = TRUE;
+
+		if (!ews_attendee)
+			continue;
+
 		e_soap_message_start_element (msg, "Attendee", NULL, NULL);
 		e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
 
-		e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, item->data);
+		e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, ews_attendee->email);
 
 		e_soap_message_end_element (msg); /* "Mailbox" */
+
+		if (ews_attendee->is_organizer)
+			e_ews_message_write_string_parameter (msg, "ResponseType", NULL, "Organizer");
+		else if (ews_attendee->status == ICAL_PARTSTAT_NEEDSACTION)
+			e_ews_message_write_string_parameter (msg, "ResponseType", NULL, "NoResponseReceived");
+		else if (ews_attendee->status == ICAL_PARTSTAT_ACCEPTED)
+			e_ews_message_write_string_parameter (msg, "ResponseType", NULL, "Accept");
+		else if (ews_attendee->status == ICAL_PARTSTAT_DECLINED)
+			e_ews_message_write_string_parameter (msg, "ResponseType", NULL, "Decline");
+		else if (ews_attendee->status == ICAL_PARTSTAT_TENTATIVE)
+			e_ews_message_write_string_parameter (msg, "ResponseType", NULL, "Tentative");
+		else
+			with_response_time = FALSE;
+
+		if (0&&with_response_time)
+			e_ews_message_write_string_parameter (msg, "LastResponseTime", NULL, response_time);
+		
 		e_soap_message_end_element (msg); /* "Attendee" */
 	}
 
@@ -1202,6 +1255,7 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
 	icalproperty *prop;
 	gboolean has_alarms;
 	const gchar *value;
+	gchar *response_time;
 
 	e_cal_component_set_icalcomponent (comp, icalcomp);
 
@@ -1257,19 +1311,22 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
 
 	/* collect attendees */
 	e_ews_collect_attendees (icalcomp, &required, &optional, &resource);
+	response_time = e_ews_get_response_time (icalcomp);
 
 	if (required != NULL) {
-		add_attendees_list_to_message (msg, "RequiredAttendees", required);
-		g_slist_free (required);
+		add_attendees_list_to_message (msg, "RequiredAttendees", required, response_time);
+		e_ews_free_collected_attendees (required);
 	}
 	if (optional != NULL) {
-		add_attendees_list_to_message (msg, "OptionalAttendees", optional);
-		g_slist_free (optional);
+		add_attendees_list_to_message (msg, "OptionalAttendees", optional, response_time);
+		e_ews_free_collected_attendees (optional);
 	}
 	if (resource != NULL) {
-		add_attendees_list_to_message (msg, "Resources", resource);
-		g_slist_free (resource);
+		add_attendees_list_to_message (msg, "Resources", resource, response_time);
+		e_ews_free_collected_attendees (resource);
 	}
+
+	g_free (response_time);
 	/* end of attendees */
 
 	/* Recurrence */
@@ -2014,7 +2071,7 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 	const gchar *org_email_address = NULL, *value = NULL, *old_value = NULL;
 	gboolean has_alarms, has_alarms_old, dt_changed = FALSE;
 	gint alarm = 0, alarm_old = 0;
-	gchar *recid;
+	gchar *recid, *response_time;
 	GError *error = NULL;
 
 	/* Modifying a recurring meeting ? */
@@ -2140,31 +2197,35 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 
 	/*need to test it*/
 	e_ews_collect_attendees (icalcomp, &required, &optional, &resource);
+	response_time = e_ews_get_response_time (icalcomp);
+
 	if (required != NULL) {
 		e_ews_message_start_set_item_field (msg, "RequiredAttendees", "calendar", "CalendarItem");
 
-		add_attendees_list_to_message (msg, "RequiredAttendees", required);
-		g_slist_free (required);
+		add_attendees_list_to_message (msg, "RequiredAttendees", required, response_time);
+		e_ews_free_collected_attendees (required);
 
 		e_ews_message_end_set_item_field (msg);
 	}
 	if (optional != NULL) {
 		e_ews_message_start_set_item_field (msg, "OptionalAttendees", "calendar", "CalendarItem");
 
-		add_attendees_list_to_message (msg, "OptionalAttendees", optional);
-		g_slist_free (optional);
+		add_attendees_list_to_message (msg, "OptionalAttendees", optional, response_time);
+		e_ews_free_collected_attendees (optional);
 
 		e_ews_message_end_set_item_field (msg);
 	}
 	if (resource != NULL) {
 		e_ews_message_start_set_item_field (msg, "Resources", "calendar", "CalendarItem");
 
-		add_attendees_list_to_message (msg, "Resources", resource);
-		g_slist_free (resource);
+		add_attendees_list_to_message (msg, "Resources", resource, response_time);
+		e_ews_free_collected_attendees (resource);
 
 		e_ews_message_end_set_item_field (msg);
 	}
 
+	g_free (response_time);
+
 	/* Recurrence */
 	value = NULL; old_value = NULL;
 	prop = icalcomponent_get_first_property (icalcomp_old, ICAL_RRULE_PROPERTY);
