[evolution-ews/wip/mcrha/soup3] Rename ESoap/EwsMessage to ESoap/EwsRequest and move some functionality to ESoapResponse



commit 9f13d8de11a2f8e9785898972e6046bfe383e6c9
Author: Milan Crha <mcrha redhat com>
Date:   Thu Dec 9 17:02:50 2021 +0100

    Rename ESoap/EwsMessage to ESoap/EwsRequest and move some functionality to ESoapResponse

 src/CMakeLists.txt                                 |    2 +-
 src/EWS/addressbook/e-book-backend-ews.c           |  270 +--
 src/EWS/calendar/e-cal-backend-ews-utils.c         |  476 +++---
 src/EWS/calendar/e-cal-backend-ews-utils.h         |   20 +-
 src/EWS/camel/camel-ews-folder.c                   |   80 +-
 src/EWS/camel/camel-ews-store.c                    |   24 +-
 src/EWS/camel/camel-ews-utils.c                    |   68 +-
 src/EWS/camel/camel-ews-utils.h                    |    4 +-
 src/EWS/common/CMakeLists.txt                      |   10 +-
 src/EWS/common/e-ews-calendar-utils.c              |  308 ++--
 src/EWS/common/e-ews-calendar-utils.h              |    8 +-
 src/EWS/common/e-ews-camel-common.c                |  107 +-
 src/EWS/common/e-ews-connection-utils.c            |   27 +-
 src/EWS/common/e-ews-connection-utils.h            |    3 +
 src/EWS/common/e-ews-connection.c                  | 1781 +++++++++-----------
 src/EWS/common/e-ews-connection.h                  |   23 +-
 src/EWS/common/e-ews-debug.c                       |    2 +-
 src/EWS/common/e-ews-folder.c                      |   20 +-
 src/EWS/common/e-ews-folder.h                      |    4 +-
 src/EWS/common/e-ews-item-change.c                 |  436 ++---
 src/EWS/common/e-ews-item-change.h                 |  183 +-
 src/EWS/common/e-ews-item.h                        |    4 +-
 src/EWS/common/e-ews-notification.c                |   44 +-
 src/EWS/common/e-ews-oof-settings.c                |   62 +-
 src/EWS/common/e-ews-query-to-restriction.c        |  170 +-
 src/EWS/common/e-ews-query-to-restriction.h        |    4 +-
 .../common/{e-ews-message.c => e-ews-request.c}    |  222 +--
 .../common/{e-ews-message.h => e-ews-request.h}    |   65 +-
 src/EWS/common/e-soap-message.c                    | 1163 -------------
 src/EWS/common/e-soap-message.h                    |  146 --
 src/EWS/common/e-soap-request.c                    |  890 ++++++++++
 src/EWS/common/e-soap-request.h                    |  135 ++
 src/EWS/common/e-soap-response.c                   |  286 ++++
 src/EWS/common/e-soap-response.h                   |   19 +
 34 files changed, 3468 insertions(+), 3598 deletions(-)
---
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 32df2977..78da6ab6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,2 +1,2 @@
 add_subdirectory(EWS)
-add_subdirectory(Microsoft365)
+#add_subdirectory(Microsoft365)
diff --git a/src/EWS/addressbook/e-book-backend-ews.c b/src/EWS/addressbook/e-book-backend-ews.c
index 7a021774..29d7bf10 100644
--- a/src/EWS/addressbook/e-book-backend-ews.c
+++ b/src/EWS/addressbook/e-book-backend-ews.c
@@ -28,7 +28,7 @@
 #include <libedata-book/libedata-book.h>
 
 #include "common/e-ews-item-change.h"
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 #include "common/e-ews-connection.h"
 #include "common/e-ews-connection-utils.h"
 #include "common/e-ews-item.h"
@@ -757,7 +757,7 @@ ebews_find_cert_base64_data (EContact *contact,
 
 static void
 ebews_set_cert (EBookBackendEws *bbews,
-               ESoapMessage *message,
+               ESoapRequest *request,
                EContact *contact,
                const gchar *kind,
                gint fallback_index)
@@ -772,14 +772,14 @@ ebews_set_cert (EBookBackendEws *bbews,
        if (!base64_data)
                return;
 
-       e_soap_message_start_element (message, kind, NULL, NULL);
-       e_ews_message_write_string_parameter (message, "Base64Binary", NULL, base64_data);
-       e_soap_message_end_element (message);
+       e_soap_request_start_element (message, kind, NULL, NULL);
+       e_ews_request_write_string_parameter (message, "Base64Binary", NULL, base64_data);
+       e_soap_request_end_element (message);
 }
 
 static void
 ebews_set_user_cert (EBookBackendEws *bbews,
-                    ESoapMessage *message,
+                    ESoapRequest *request,
                     EContact *contact)
 {
        ebews_set_cert (bbews, message, contact, E_EWS_CERT_KIND_USER, 0);
@@ -788,7 +788,7 @@ ebews_set_user_cert (EBookBackendEws *bbews,
 
 static void
 ebews_set_msex_cert (EBookBackendEws *bbews,
-                    ESoapMessage *message,
+                    ESoapRequest *request,
                     EContact *contact)
 {
        ebews_set_cert (bbews, message, contact, E_EWS_CERT_KIND_MSEX, 1);
@@ -796,7 +796,7 @@ ebews_set_msex_cert (EBookBackendEws *bbews,
 
 static void
 ebews_set_cert_changes (EBookBackendEws *bbews,
-                       ESoapMessage *message,
+                       ESoapRequest *request,
                        EContact *new,
                        EContact *old,
                        const gchar *kind,
@@ -820,19 +820,19 @@ ebews_set_cert_changes (EBookBackendEws *bbews,
                return;
 
        if (new_base64_data) {
-               e_ews_message_start_set_item_field (message, kind, "contacts", "Contact");
-               e_soap_message_start_element (message, kind, NULL, NULL);
-               e_ews_message_write_string_parameter (message, "Base64Binary", NULL, new_base64_data);
-               e_soap_message_end_element (message);
-               e_ews_message_end_set_item_field (message);
+               e_ews_request_start_set_item_field (message, kind, "contacts", "Contact");
+               e_soap_request_start_element (message, kind, NULL, NULL);
+               e_ews_request_write_string_parameter (message, "Base64Binary", NULL, new_base64_data);
+               e_soap_request_end_element (message);
+               e_ews_request_end_set_item_field (message);
        } else {
-               e_ews_message_add_delete_item_field (message, kind, "contacts");
+               e_ews_request_add_delete_item_field (message, kind, "contacts");
        }
 }
 
 static void
 ebews_set_user_cert_changes (EBookBackendEws *bbews,
-                            ESoapMessage *message,
+                            ESoapRequest *request,
                             EContact *new,
                             EContact *old,
                             gchar **out_new_change_key,
@@ -844,7 +844,7 @@ ebews_set_user_cert_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_msex_cert_changes (EBookBackendEws *bbews,
-                            ESoapMessage *message,
+                            ESoapRequest *request,
                             EContact *new,
                             EContact *old,
                             gchar **out_new_change_key,
@@ -1020,7 +1020,7 @@ ebews_populate_emails (EBookBackendEws *bbews,
 
 static void
 ebews_set_item_id (EBookBackendEws *bbews,
-                  ESoapMessage *message,
+                  ESoapRequest *request,
                   EContact *contact)
 {
 
@@ -1028,7 +1028,7 @@ ebews_set_item_id (EBookBackendEws *bbews,
 
 static void
 ebews_set_full_name (EBookBackendEws *bbews,
-                    ESoapMessage *msg,
+                    ESoapRequest *request,
                     EContact *contact)
 {
        EContactName *name;
@@ -1038,16 +1038,16 @@ ebews_set_full_name (EBookBackendEws *bbews,
                return;
 
        if (name->given)
-               e_ews_message_write_string_parameter (msg, "GivenName", NULL, name->given);
+               e_ews_request_write_string_parameter (request, "GivenName", NULL, name->given);
 
        if (name->additional && *name->additional)
-               e_ews_message_write_string_parameter (msg, "MiddleName", NULL, name->additional);
+               e_ews_request_write_string_parameter (request, "MiddleName", NULL, name->additional);
 
        e_contact_name_free (name);
 }
 
 static void
-ebews_set_date_value (ESoapMessage *message,
+ebews_set_date_value (ESoapRequest *request,
                      EContact *contact,
                      EContactField field,
                      const gchar *element_name)
@@ -1063,7 +1063,7 @@ ebews_set_date_value (ESoapMessage *message,
        value = g_strdup_printf ("%04d-%02d-%02dT00:00:00Z",
                date->year, date->month, date->day);
 
-       e_ews_message_write_string_parameter (message, element_name, NULL, value);
+       e_ews_request_write_string_parameter (message, element_name, NULL, value);
 
        e_contact_date_free (date);
        g_free (value);
@@ -1071,7 +1071,7 @@ ebews_set_date_value (ESoapMessage *message,
 
 static void
 ebews_set_birth_date (EBookBackendEws *bbews,
-                     ESoapMessage *message,
+                     ESoapRequest *request,
                      EContact *contact)
 {
        ebews_set_date_value (message, contact, E_CONTACT_BIRTH_DATE, "Birthday");
@@ -1079,7 +1079,7 @@ ebews_set_birth_date (EBookBackendEws *bbews,
 
 static void
 ebews_set_anniversary (EBookBackendEws *bbews,
-                      ESoapMessage *message,
+                      ESoapRequest *request,
                       EContact *contact)
 {
        ebews_set_date_value (message, contact, E_CONTACT_ANNIVERSARY, "WeddingAnniversary");
@@ -1087,14 +1087,14 @@ ebews_set_anniversary (EBookBackendEws *bbews,
 
 static void
 ebews_set_photo (EBookBackendEws *bbews,
-                ESoapMessage *message,
+                ESoapRequest *request,
                 EContact *contact)
 {
 
 }
 
 static gboolean
-add_entry (ESoapMessage *msg,
+add_entry (ESoapRequest *request,
            EContact *contact,
            EContactField field,
            const gchar *entry_name,
@@ -1106,9 +1106,9 @@ add_entry (ESoapMessage *msg,
 
        if (entry_val && *entry_val) {
                if (include_hdr)
-                       e_soap_message_start_element (msg, include_hdr, NULL, NULL);
+                       e_soap_request_start_element (request, include_hdr, NULL, NULL);
 
-               e_ews_message_write_string_parameter_with_attribute (msg, "Entry", NULL, entry_val, "Key", 
entry_name);
+               e_ews_request_write_string_parameter_with_attribute (request, "Entry", NULL, entry_val, 
"Key", entry_name);
 
                g_free (entry_val);
                return TRUE;
@@ -1120,23 +1120,23 @@ add_entry (ESoapMessage *msg,
 
 static void
 ebews_set_phone_numbers (EBookBackendEws *bbews,
-                        ESoapMessage *msg,
+                        ESoapRequest *request,
                         EContact *contact)
 {
        gint i;
        const gchar *include_hdr = "PhoneNumbers";
 
        for (i = 0; i < G_N_ELEMENTS (phone_field_map); i++) {
-               if (add_entry (msg, contact, phone_field_map[i].field, phone_field_map[i].element, 
include_hdr))
+               if (add_entry (request, contact, phone_field_map[i].field, phone_field_map[i].element, 
include_hdr))
                        include_hdr = NULL;
        }
 
        if (!include_hdr)
-               e_soap_message_end_element (msg);
+               e_soap_request_end_element (request);
 }
 
 static gboolean
-add_physical_address (ESoapMessage *msg,
+add_physical_address (ESoapRequest *request,
                       EContact *contact,
                       EContactField field,
                       const gchar *entry_name,
@@ -1149,18 +1149,18 @@ add_physical_address (ESoapMessage *msg,
                return FALSE;
 
        if (include_start_hdr)
-               e_soap_message_start_element (msg, "PhysicalAddresses", NULL, NULL);
+               e_soap_request_start_element (request, "PhysicalAddresses", NULL, NULL);
 
-       e_soap_message_start_element (msg, "Entry", NULL, NULL);
+       e_soap_request_start_element (request, "Entry", NULL, NULL);
 
-       e_soap_message_add_attribute (msg, "Key", entry_name, NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "Street", NULL, contact_addr->street);
-       e_ews_message_write_string_parameter (msg, "City", NULL, contact_addr->locality);
-       e_ews_message_write_string_parameter (msg, "State", NULL, contact_addr->region);
-       e_ews_message_write_string_parameter (msg, "CountryOrRegion", NULL, contact_addr->country);
-       e_ews_message_write_string_parameter (msg, "PostalCode", NULL, contact_addr->code);
+       e_soap_request_add_attribute (request, "Key", entry_name, NULL, NULL);
+       e_ews_request_write_string_parameter (request, "Street", NULL, contact_addr->street);
+       e_ews_request_write_string_parameter (request, "City", NULL, contact_addr->locality);
+       e_ews_request_write_string_parameter (request, "State", NULL, contact_addr->region);
+       e_ews_request_write_string_parameter (request, "CountryOrRegion", NULL, contact_addr->country);
+       e_ews_request_write_string_parameter (request, "PostalCode", NULL, contact_addr->code);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
        e_contact_address_free (contact_addr);
 
        return TRUE;
@@ -1168,25 +1168,25 @@ add_physical_address (ESoapMessage *msg,
 
 static void
 ebews_set_address (EBookBackendEws *bbews,
-                  ESoapMessage *msg,
+                  ESoapRequest *request,
                   EContact *contact)
 {
        gboolean include_hdr = TRUE;
 
-       if (add_physical_address (msg, contact, E_CONTACT_ADDRESS_WORK, "Business", include_hdr))
+       if (add_physical_address (request, contact, E_CONTACT_ADDRESS_WORK, "Business", include_hdr))
                include_hdr = FALSE;
-       if (add_physical_address (msg, contact, E_CONTACT_ADDRESS_HOME, "Home", include_hdr))
+       if (add_physical_address (request, contact, E_CONTACT_ADDRESS_HOME, "Home", include_hdr))
                include_hdr = FALSE;
-       if (add_physical_address (msg, contact, E_CONTACT_ADDRESS_OTHER, "Other", include_hdr))
+       if (add_physical_address (request, contact, E_CONTACT_ADDRESS_OTHER, "Other", include_hdr))
                include_hdr = FALSE;
 
        if (!include_hdr)
-               e_soap_message_end_element (msg);
+               e_soap_request_end_element (request);
 }
 
 static void
 ebews_set_ims (EBookBackendEws *bbews,
-              ESoapMessage *message,
+              ESoapRequest *request,
               EContact *contact)
 {
 
@@ -1194,51 +1194,51 @@ ebews_set_ims (EBookBackendEws *bbews,
 
 static void
 ebews_set_notes (EBookBackendEws *bbews,
-                ESoapMessage *msg,
+                ESoapRequest *request,
                 EContact *contact)
 {
        gchar *notes = e_contact_get (contact, E_CONTACT_NOTE);
        if (!notes)
                return;
 
-       e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, notes, "BodyType", "Text");
+       e_ews_request_write_string_parameter_with_attribute (request, "Body", NULL, notes, "BodyType", 
"Text");
 
        g_free (notes);
 }
 
 static void
 ebews_set_emails (EBookBackendEws *bbews,
-                 ESoapMessage *msg,
+                 ESoapRequest *request,
                  EContact *contact)
 {
        const gchar *include_hdr = "EmailAddresses";
 
-       if (add_entry (msg, contact, E_CONTACT_EMAIL_1, "EmailAddress1", include_hdr))
+       if (add_entry (request, contact, E_CONTACT_EMAIL_1, "EmailAddress1", include_hdr))
                include_hdr = NULL;
-       if (add_entry (msg, contact, E_CONTACT_EMAIL_2, "EmailAddress2", include_hdr))
+       if (add_entry (request, contact, E_CONTACT_EMAIL_2, "EmailAddress2", include_hdr))
                include_hdr = NULL;
-       if (add_entry (msg, contact, E_CONTACT_EMAIL_3, "EmailAddress3", include_hdr))
+       if (add_entry (request, contact, E_CONTACT_EMAIL_3, "EmailAddress3", include_hdr))
                include_hdr = NULL;
 
        if (!include_hdr)
-               e_soap_message_end_element (msg);
+               e_soap_request_end_element (request);
 }
 
 static void
-convert_contact_property_to_updatexml (ESoapMessage *msg,
+convert_contact_property_to_updatexml (ESoapRequest *request,
                                        const gchar *name,
                                        const gchar *value,
                                        const gchar *prefix,
                                        const gchar *attr_name,
                                        const gchar *attr_value)
 {
-       e_ews_message_start_set_item_field (msg, name, prefix, "Contact");
-       e_ews_message_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_start_set_item_field (request, name, prefix, "Contact");
+       e_ews_request_write_string_parameter_with_attribute (request, name, NULL, value, attr_name, 
attr_value);
+       e_ews_request_end_set_item_field (request);
 }
 
 static void
-convert_indexed_contact_property_to_updatexml (ESoapMessage *message,
+convert_indexed_contact_property_to_updatexml (ESoapRequest *request,
                                                const gchar *name,
                                                const gchar *value,
                                                const gchar *prefix,
@@ -1249,20 +1249,20 @@ convert_indexed_contact_property_to_updatexml (ESoapMessage *message,
 
        if (!value || !*value)
                delete_field = TRUE;
-       e_ews_message_start_set_indexed_item_field (message, name , prefix, "Contact", key, delete_field);
+       e_ews_request_start_set_indexed_item_field (message, name , prefix, "Contact", key, delete_field);
 
        if (!delete_field)
        {
-               e_soap_message_start_element (message, element_name, NULL, NULL);
-               e_ews_message_write_string_parameter_with_attribute (message, "Entry", NULL, value, "Key", 
key);
-               e_soap_message_end_element (message);
+               e_soap_request_start_element (message, element_name, NULL, NULL);
+               e_ews_request_write_string_parameter_with_attribute (message, "Entry", NULL, value, "Key", 
key);
+               e_soap_request_end_element (message);
        }
-       e_ews_message_end_set_indexed_item_field (message, delete_field);
+       e_ews_request_end_set_indexed_item_field (message, delete_field);
 }
 
 static void
 ebews_set_full_name_changes (EBookBackendEws *bbews,
-                            ESoapMessage *message,
+                            ESoapRequest *request,
                             EContact *new,
                             EContact *old,
                             gchar **out_new_change_key,
@@ -1299,7 +1299,7 @@ ebews_set_full_name_changes (EBookBackendEws *bbews,
 }
 
 static void
-ebews_set_date_value_changes (ESoapMessage *message,
+ebews_set_date_value_changes (ESoapRequest *request,
                              EContact *new,
                              EContact *old,
                              EContactField field,
@@ -1324,7 +1324,7 @@ ebews_set_date_value_changes (ESoapMessage *message,
 
                        g_free (value);
                } else {
-                       e_ews_message_add_delete_item_field (message, element_name, "contacts");
+                       e_ews_request_add_delete_item_field (message, element_name, "contacts");
                }
        }
 
@@ -1334,7 +1334,7 @@ ebews_set_date_value_changes (ESoapMessage *message,
 
 static void
 ebews_set_birth_date_changes (EBookBackendEws *bbews,
-                             ESoapMessage *message,
+                             ESoapRequest *request,
                              EContact *new,
                              EContact *old,
                              gchar **out_new_change_key,
@@ -1346,7 +1346,7 @@ ebews_set_birth_date_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_anniversary_changes (EBookBackendEws *bbews,
-                              ESoapMessage *message,
+                              ESoapRequest *request,
                               EContact *new,
                               EContact *old,
                               gchar **out_new_change_key,
@@ -1472,7 +1472,7 @@ ebb_ews_photo_changed (EBookMetaBackend *meta_backend,
 
 static void
 ebews_set_photo_changes (EBookBackendEws *bbews,
-                        ESoapMessage *message,
+                        ESoapRequest *request,
                         EContact *new,
                         EContact *old,
                         gchar **out_new_change_key,
@@ -1579,7 +1579,7 @@ ebews_set_photo_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_phone_number_changes (EBookBackendEws *bbews,
-                               ESoapMessage *message,
+                               ESoapRequest *request,
                                EContact *new,
                                EContact *old,
                                gchar **out_new_change_key,
@@ -1605,7 +1605,7 @@ ebews_set_phone_number_changes (EBookBackendEws *bbews,
 }
 
 static void
-convert_indexed_contact_property_to_updatexml_physical_address (ESoapMessage *message,
+convert_indexed_contact_property_to_updatexml_physical_address (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 const gchar *uri_element,
                                                                 const gchar *value,
@@ -1621,24 +1621,24 @@ convert_indexed_contact_property_to_updatexml_physical_address (ESoapMessage *me
 
        fielduri = g_strconcat (name, ":", uri_element, NULL);
 
-       e_ews_message_start_set_indexed_item_field (message, fielduri , prefix, "Contact", key, delete_field);
+       e_ews_request_start_set_indexed_item_field (message, fielduri , prefix, "Contact", key, delete_field);
 
        if (!delete_field)
        {
-               e_soap_message_start_element (message, element_name, NULL, NULL);
+               e_soap_request_start_element (message, element_name, NULL, NULL);
 
-               e_soap_message_start_element (message, "Entry", NULL, NULL);
-               e_soap_message_add_attribute (message, "Key", key, NULL, NULL);
-               e_ews_message_write_string_parameter (message, uri_element, NULL, value);
-               e_soap_message_end_element (message);
+               e_soap_request_start_element (message, "Entry", NULL, NULL);
+               e_soap_request_add_attribute (message, "Key", key, NULL, NULL);
+               e_ews_request_write_string_parameter (message, uri_element, NULL, value);
+               e_soap_request_end_element (message);
 
-               e_soap_message_end_element (message);
+               e_soap_request_end_element (message);
        }
-       e_ews_message_end_set_indexed_item_field (message, delete_field);
+       e_ews_request_end_set_indexed_item_field (message, delete_field);
 }
 
 static void
-compare_address (ESoapMessage *message,
+compare_address (ESoapRequest *request,
                  EContact *new,
                  EContact *old,
                  EContactField field,
@@ -1679,7 +1679,7 @@ compare_address (ESoapMessage *message,
 
 static void
 ebews_set_address_changes (EBookBackendEws *bbews,
-                          ESoapMessage *message,
+                          ESoapRequest *request,
                           EContact *new,
                           EContact *old,
                           gchar **out_new_change_key,
@@ -1696,7 +1696,7 @@ ebews_set_address_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_im_changes (EBookBackendEws *bbews,
-                     ESoapMessage *message,
+                     ESoapRequest *request,
                      EContact *new,
                      EContact *old,
                      gchar **out_new_change_key,
@@ -1708,7 +1708,7 @@ ebews_set_im_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_notes_changes (EBookBackendEws *bbews,
-                        ESoapMessage *message,
+                        ESoapRequest *request,
                         EContact *new,
                         EContact *old,
                         gchar **out_new_change_key,
@@ -1734,7 +1734,7 @@ ebews_set_notes_changes (EBookBackendEws *bbews,
 
 static void
 ebews_set_email_changes (EBookBackendEws *bbews,
-                        ESoapMessage *message,
+                        ESoapRequest *request,
                         EContact *new,
                         EContact *old,
                         gchar **out_new_change_key,
@@ -1784,7 +1784,7 @@ ebews_populate_givenname (EBookBackendEws *bbews,
 
 static void
 ebews_set_givenname (EBookBackendEws *bbews,
-                    ESoapMessage *message,
+                    ESoapRequest *request,
                     EContact *contact)
 {
        /* Does nothing, the "GivenName" is filled by the "FullName" code */
@@ -1792,7 +1792,7 @@ ebews_set_givenname (EBookBackendEws *bbews,
 
 static void
 ebews_set_givenname_changes (EBookBackendEws *bbews,
-                            ESoapMessage *message,
+                            ESoapRequest *request,
                             EContact *new,
                             EContact *old,
                             gchar **out_new_change_key,
@@ -1837,7 +1837,7 @@ ebews_populate_categories (EBookBackendEws *bbews,
 
 static void
 ebews_set_categories (EBookBackendEws *bbews,
-                     ESoapMessage *message,
+                     ESoapRequest *request,
                      EContact *contact)
 {
        GList *values;
@@ -1846,13 +1846,13 @@ ebews_set_categories (EBookBackendEws *bbews,
        if (values) {
                GList *link;
 
-               e_soap_message_start_element (message, "Categories", NULL, NULL);
+               e_soap_request_start_element (message, "Categories", NULL, NULL);
                for (link = values; link; link = g_list_next (link)) {
                        const gchar *category = link->data;
                        if (category && *category)
-                               e_ews_message_write_string_parameter (message, "String", NULL, category);
+                               e_ews_request_write_string_parameter (message, "String", NULL, category);
                }
-               e_soap_message_end_element (message);
+               e_soap_request_end_element (message);
        }
 
        g_list_free_full (values, g_free);
@@ -1860,7 +1860,7 @@ ebews_set_categories (EBookBackendEws *bbews,
 
 static void
 ebews_set_categories_changes (EBookBackendEws *bbews,
-                             ESoapMessage *message,
+                             ESoapRequest *request,
                              EContact *new,
                              EContact *old,
                              gchar **out_new_change_key,
@@ -1880,27 +1880,27 @@ ebews_set_categories_changes (EBookBackendEws *bbews,
 
                values = e_contact_get (new, E_CONTACT_CATEGORY_LIST);
                if (values) {
-                       e_soap_message_start_element (message, "SetItemField", NULL, NULL);
+                       e_soap_request_start_element (message, "SetItemField", NULL, NULL);
 
-                       e_soap_message_start_element (message, "FieldURI", NULL, NULL);
-                       e_soap_message_add_attribute (message, "FieldURI", "item:Categories", NULL, NULL);
-                       e_soap_message_end_element (message);
+                       e_soap_request_start_element (message, "FieldURI", NULL, NULL);
+                       e_soap_request_add_attribute (message, "FieldURI", "item:Categories", NULL, NULL);
+                       e_soap_request_end_element (message);
 
-                       e_soap_message_start_element (message, "Contact", NULL, NULL);
-                       e_soap_message_start_element (message, "Categories", NULL, NULL);
+                       e_soap_request_start_element (message, "Contact", NULL, NULL);
+                       e_soap_request_start_element (message, "Categories", NULL, NULL);
 
                        for (link = values; link; link = g_list_next (link)) {
                                const gchar *category = link->data;
 
                                if (category && *category)
-                                       e_ews_message_write_string_parameter (message, "String", NULL, 
category);
+                                       e_ews_request_write_string_parameter (message, "String", NULL, 
category);
                        }
 
-                       e_soap_message_end_element (message); /* Categories */
-                       e_soap_message_end_element (message); /* Contact */
-                       e_soap_message_end_element (message); /* SetItemField */
+                       e_soap_request_end_element (message); /* Categories */
+                       e_soap_request_end_element (message); /* Contact */
+                       e_soap_request_end_element (message); /* SetItemField */
                } else {
-                       e_ews_message_add_delete_item_field (message, "Categories", "item");
+                       e_ews_request_add_delete_item_field (message, "Categories", "item");
                }
 
                g_list_free_full (values, g_free);
@@ -1917,8 +1917,8 @@ static const struct field_element_mapping {
        /* set function for simple string type values */
        const gchar * (*get_simple_prop_func) (EEwsItem *item);
        void (*populate_contact_func)(EBookBackendEws *bbews, EContact *contact, EEwsItem *item, GCancellable 
*cancellable, GError **error);
-       void (*set_value_in_soap_message) (EBookBackendEws *bbews, ESoapMessage *message, EContact *contact);
-       void (*set_changes) (EBookBackendEws *bbews, ESoapMessage *message, EContact *new, EContact *old, 
gchar **out_new_change_key, GCancellable *cancellable, GError **error);
+       void (*set_value_in_soap_message) (EBookBackendEws *bbews, ESoapRequest *request, EContact *contact);
+       void (*set_changes) (EBookBackendEws *bbews, ESoapRequest *request, EContact *new, EContact *old, 
gchar **out_new_change_key, GCancellable *cancellable, GError **error);
 
 } mappings[] = {
        /* The order should be maintained for create contacts to work */
@@ -1957,12 +1957,12 @@ static const struct field_element_mapping {
 };
 
 static void
-ebb_ews_write_dl_members (ESoapMessage *msg,
+ebb_ews_write_dl_members (ESoapRequest *request,
                          EContact *contact)
 {
        GSList *emails, *l;
 
-       e_soap_message_start_element (msg, "Members", NULL, NULL);
+       e_soap_request_start_element (request, "Members", NULL, NULL);
 
        emails = e_contact_get (contact, E_CONTACT_EMAIL);
        for (l = emails; l; l = l->next) {
@@ -1976,19 +1976,19 @@ ebb_ews_write_dl_members (ESoapMessage *msg,
                        const gchar *name = NULL, *email = NULL;
 
                        if (camel_internet_address_get (addr, 0, &name, &email) && email) {
-                               e_soap_message_start_element (msg, "Member", NULL, NULL);
-                               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-                               e_ews_message_write_string_parameter (msg, "Name", NULL, name ? name : email);
-                               e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, email);
-                               e_soap_message_end_element (msg); /* Mailbox */
-                               e_soap_message_end_element (msg); /* Member */
+                               e_soap_request_start_element (request, "Member", NULL, NULL);
+                               e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+                               e_ews_request_write_string_parameter (request, "Name", NULL, name ? name : 
email);
+                               e_ews_request_write_string_parameter (request, "EmailAddress", NULL, email);
+                               e_soap_request_end_element (request); /* Mailbox */
+                               e_soap_request_end_element (request); /* Member */
                        }
                }
                g_object_unref (addr);
        }
 
        g_slist_free_full (emails, g_free);
-       e_soap_message_end_element (msg); /* Members */
+       e_soap_request_end_element (request); /* Members */
 }
 
 typedef struct _CreateItemsData
@@ -1998,7 +1998,7 @@ typedef struct _CreateItemsData
 } CreateItemsData;
 
 static gboolean
-ebb_ews_convert_dl_to_xml_cb (ESoapMessage *msg,
+ebb_ews_convert_dl_to_xml_cb (ESoapRequest *request,
                              gpointer user_data,
                              GError **error)
 {
@@ -2008,21 +2008,21 @@ ebb_ews_convert_dl_to_xml_cb (ESoapMessage *msg,
        GList *values;
 
        /* Prepare DistributionList node in the SOAP message */
-       e_soap_message_start_element (msg, "DistributionList", NULL, NULL);
+       e_soap_request_start_element (request, "DistributionList", NULL, NULL);
 
        attribute = e_vcard_get_attribute (E_VCARD (contact), EVC_FN);
        values = e_vcard_attribute_get_values (attribute);
-       e_ews_message_write_string_parameter (msg, "DisplayName", NULL, values->data);
+       e_ews_request_write_string_parameter (request, "DisplayName", NULL, values->data);
 
-       ebb_ews_write_dl_members (msg, contact);
+       ebb_ews_write_dl_members (request, contact);
 
-       e_soap_message_end_element (msg); /* DistributionList */
+       e_soap_request_end_element (request); /* DistributionList */
 
        return TRUE;
 }
 
 static gboolean
-ebb_ews_convert_contact_to_xml_cb (ESoapMessage *msg,
+ebb_ews_convert_contact_to_xml_cb (ESoapRequest *request,
                                   gpointer user_data,
                                   GError **error)
 {
@@ -2031,7 +2031,7 @@ ebb_ews_convert_contact_to_xml_cb (ESoapMessage *msg,
        gint i, element_type;
 
        /* Prepare Contact node in the SOAP message */
-       e_soap_message_start_element (msg, "Contact", NULL, NULL);
+       e_soap_request_start_element (request, "Contact", NULL, NULL);
 
        for (i = 0; i < G_N_ELEMENTS (mappings); i++) {
                element_type = mappings[i].element_type;
@@ -2045,14 +2045,14 @@ ebb_ews_convert_contact_to_xml_cb (ESoapMessage *msg,
 
                        val = e_contact_get (contact, mappings[i].field_id);
                        if (val && *val)
-                               e_ews_message_write_string_parameter (msg, mappings[i].element_name, NULL, 
val);
+                               e_ews_request_write_string_parameter (request, mappings[i].element_name, 
NULL, val);
                        g_free (val);
                } else
-                       mappings[i].set_value_in_soap_message (cid->bbews, msg, contact);
+                       mappings[i].set_value_in_soap_message (cid->bbews, request, contact);
        }
 
        /* end of "Contact" */
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
        return TRUE;
 }
@@ -2068,7 +2068,7 @@ typedef struct _ConvertData {
 } ConvertData;
 
 static gboolean
-ebb_ews_convert_dl_to_updatexml_cb (ESoapMessage *msg,
+ebb_ews_convert_dl_to_updatexml_cb (ESoapRequest *request,
                                    gpointer user_data,
                                    GError **error)
 {
@@ -2083,14 +2083,14 @@ ebb_ews_convert_dl_to_updatexml_cb (ESoapMessage *msg,
                        change_key = e_contact_get (old_contact, E_CONTACT_REV);
        }
 
-       e_ews_message_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
+       e_ews_request_start_item_change (request, E_EWS_ITEMCHANGE_TYPE_ITEM,
                e_contact_get_const (old_contact, E_CONTACT_UID),
                cd->change_key ? cd->change_key : change_key,
                0);
-       e_ews_message_start_set_item_field (msg, "Members", "distributionlist", "DistributionList");
-       ebb_ews_write_dl_members (msg, new_contact);
-       e_ews_message_end_set_item_field (msg);
-       e_ews_message_end_item_change (msg);
+       e_ews_request_start_set_item_field (request, "Members", "distributionlist", "DistributionList");
+       ebb_ews_write_dl_members (request, new_contact);
+       e_ews_request_end_set_item_field (request);
+       e_ews_request_end_item_change (request);
 
        g_free (change_key);
 
@@ -2098,7 +2098,7 @@ ebb_ews_convert_dl_to_updatexml_cb (ESoapMessage *msg,
 }
 
 static gboolean
-ebb_ews_convert_contact_to_updatexml_cb (ESoapMessage *msg,
+ebb_ews_convert_contact_to_updatexml_cb (ESoapRequest *request,
                                         gpointer user_data,
                                         GError **error)
 {
@@ -2134,7 +2134,7 @@ ebb_ews_convert_contact_to_updatexml_cb (ESoapMessage *msg,
                        change_key = e_contact_get (old_contact, E_CONTACT_REV);
        }
 
-       e_ews_message_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
+       e_ews_request_start_item_change (request, E_EWS_ITEMCHANGE_TYPE_ITEM,
                e_contact_get_const (old_contact, E_CONTACT_UID),
                cd->change_key ? cd->change_key : change_key,
                0);
@@ -2147,7 +2147,7 @@ ebb_ews_convert_contact_to_updatexml_cb (ESoapMessage *msg,
                        value =  e_contact_get (new_contact, mappings[i].field_id);
                        old_value =  e_contact_get (old_contact, mappings[i].field_id);
                        if (g_strcmp0 (value, old_value) != 0)
-                               convert_contact_property_to_updatexml (msg, mappings[i].element_name, value, 
"contacts", NULL, NULL);
+                               convert_contact_property_to_updatexml (request, mappings[i].element_name, 
value, "contacts", NULL, NULL);
                        if (value)
                                g_free (value);
                        if (old_value)
@@ -2158,7 +2158,7 @@ ebb_ews_convert_contact_to_updatexml_cb (ESoapMessage *msg,
                        if (mappings[i].field_id == E_CONTACT_UID)
                                continue;
 
-                       mappings[i].set_changes (cd->bbews, msg, new_contact, old_contact, &new_change_key, 
cd->cancellable, cd->error);
+                       mappings[i].set_changes (cd->bbews, request, new_contact, old_contact, 
&new_change_key, cd->cancellable, cd->error);
 
                        if (new_change_key) {
                                g_free (cd->change_key);
@@ -2167,7 +2167,7 @@ ebb_ews_convert_contact_to_updatexml_cb (ESoapMessage *msg,
                }
        }
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (request);
 
        g_free (change_key);
 
diff --git a/src/EWS/calendar/e-cal-backend-ews-utils.c b/src/EWS/calendar/e-cal-backend-ews-utils.c
index 5ea8a218..f2386930 100644
--- a/src/EWS/calendar/e-cal-backend-ews-utils.c
+++ b/src/EWS/calendar/e-cal-backend-ews-utils.c
@@ -31,7 +31,7 @@
 
 #include "common/e-ews-calendar-utils.h"
 #include "common/e-ews-connection.h"
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 #include "common/e-ews-item-change.h"
 
 #include "e-cal-backend-ews-utils.h"
@@ -329,7 +329,7 @@ ews_get_alarm (ECalComponent *comp)
 }
 
 void
-ews_set_alarm (ESoapMessage *msg,
+ews_set_alarm (ESoapRequest *request,
                ECalComponent *comp,
               ETimezoneCache *timezone_cache,
               ICalComponent *vcalendar,
@@ -346,7 +346,7 @@ ews_set_alarm (ESoapMessage *msg,
 
        alarm = e_cal_component_get_alarm (comp, (const gchar *) (alarm_uids->data));
 
-       e_ews_message_write_string_parameter (msg, "ReminderIsSet", NULL, "true");
+       e_ews_request_write_string_parameter (msg, "ReminderIsSet", NULL, "true");
        action = e_cal_component_alarm_get_action (alarm);
        if (action == E_CAL_COMPONENT_ALARM_DISPLAY) {
                ECalComponentAlarmTrigger *trigger;
@@ -355,7 +355,7 @@ ews_set_alarm (ESoapMessage *msg,
                trigger = e_cal_component_alarm_get_trigger (alarm);
                if (trigger && e_cal_component_alarm_trigger_get_kind (trigger) == 
E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START) {
                        dur_int = (i_cal_duration_as_int (e_cal_component_alarm_trigger_get_duration 
(trigger)) / SECS_IN_MINUTE) * -1;
-                       e_ews_message_write_int_parameter (msg, "ReminderMinutesBeforeStart", NULL, dur_int);
+                       e_ews_request_write_int_parameter (msg, "ReminderMinutesBeforeStart", NULL, dur_int);
                        if (with_due_by) {
                                ICalTime *dtstart;
 
@@ -363,7 +363,7 @@ ews_set_alarm (ESoapMessage *msg,
                                        I_CAL_DTSTART_PROPERTY, i_cal_property_get_dtstart);
 
                                if (dtstart && !i_cal_time_is_null_time (dtstart)) {
-                                       e_ews_message_write_time_parameter (msg, "ReminderDueBy", NULL,
+                                       e_ews_request_write_time_parameter (msg, "ReminderDueBy", NULL,
                                                i_cal_time_as_timet_with_zone (dtstart, 
i_cal_timezone_get_utc_timezone ()));
                                }
 
@@ -376,7 +376,7 @@ ews_set_alarm (ESoapMessage *msg,
 }
 
 static void
-ewscal_set_date (ESoapMessage *msg,
+ewscal_set_date (ESoapRequest *request,
                  const gchar *name,
                  ICalTime *itt)
 {
@@ -386,7 +386,7 @@ ewscal_set_date (ESoapMessage *msg,
                "%04d-%02d-%02d",
                i_cal_time_get_year (itt), i_cal_time_get_month (itt), i_cal_time_get_day (itt));
 
-       e_ews_message_write_string_parameter (msg, name, NULL, str);
+       e_ews_request_write_string_parameter (msg, name, NULL, str);
        g_free (str);
 }
 
@@ -432,23 +432,23 @@ static const gchar *weekindex_to_ical (gint index) {
 }
 
 static void
-ewscal_add_rrule (ESoapMessage *msg,
+ewscal_add_rrule (ESoapRequest *request,
                  ICalProperty *prop)
 {
        ICalRecurrence *recur = i_cal_property_get_rrule (prop);
 
-       e_soap_message_start_element (msg, "RelativeYearlyRecurrence", NULL, NULL);
+       e_soap_request_start_element (msg, "RelativeYearlyRecurrence", NULL, NULL);
 
-       e_ews_message_write_string_parameter (msg, "DaysOfWeek", NULL, number_to_weekday 
(i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (recur, 0))));
-       e_ews_message_write_string_parameter (msg, "DayOfWeekIndex", NULL, weekindex_to_ical 
(i_cal_recurrence_day_position (i_cal_recurrence_get_by_day (recur, 0))));
-       e_ews_message_write_string_parameter (msg, "Month", NULL, number_to_month 
(i_cal_recurrence_get_by_month (recur, 0)));
+       e_ews_request_write_string_parameter (msg, "DaysOfWeek", NULL, number_to_weekday 
(i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (recur, 0))));
+       e_ews_request_write_string_parameter (msg, "DayOfWeekIndex", NULL, weekindex_to_ical 
(i_cal_recurrence_day_position (i_cal_recurrence_get_by_day (recur, 0))));
+       e_ews_request_write_string_parameter (msg, "Month", NULL, number_to_month 
(i_cal_recurrence_get_by_month (recur, 0)));
 
-       e_soap_message_end_element (msg); /* "RelativeYearlyRecurrence" */
+       e_soap_request_end_element (msg); /* "RelativeYearlyRecurrence" */
        g_clear_object (&recur);
 }
 
 static void
-ewscal_add_timechange (ESoapMessage *msg,
+ewscal_add_timechange (ESoapRequest *request,
                       ICalComponent *comp,
                       gint baseoffs)
 {
@@ -461,7 +461,7 @@ ewscal_add_timechange (ESoapMessage *msg,
        prop = i_cal_component_get_first_property (comp, I_CAL_TZNAME_PROPERTY);
        if (prop) {
                tzname = i_cal_property_get_tzname (prop);
-               e_soap_message_add_attribute (msg, "TimeZoneName", tzname, NULL, NULL);
+               e_soap_request_add_attribute (msg, "TimeZoneName", tzname, NULL, NULL);
                g_object_unref (prop);
        }
 
@@ -474,7 +474,7 @@ ewscal_add_timechange (ESoapMessage *msg,
                utcoffs -= baseoffs;
                duration = i_cal_duration_new_from_int (utcoffs);
                offset = i_cal_duration_as_ical_string (duration);
-               e_ews_message_write_string_parameter (msg, "Offset", NULL, offset);
+               e_ews_request_write_string_parameter (msg, "Offset", NULL, offset);
 
                g_clear_object (&duration);
                g_object_unref (prop);
@@ -491,14 +491,14 @@ ewscal_add_timechange (ESoapMessage *msg,
        if (prop) {
                dtstart = i_cal_property_get_dtstart (prop);
                snprintf (buffer, 16, "%02d:%02d:%02d", i_cal_time_get_hour (dtstart), i_cal_time_get_minute 
(dtstart), i_cal_time_get_second (dtstart));
-               e_ews_message_write_string_parameter (msg, "Time", NULL, buffer);
+               e_ews_request_write_string_parameter (msg, "Time", NULL, buffer);
                g_clear_object (&dtstart);
                g_object_unref (prop);
        }
 }
 
 static void
-ewscal_set_absolute_date_transitions (ESoapMessage *msg,
+ewscal_set_absolute_date_transitions (ESoapRequest *request,
                                      GSList *absolute_date_transitions)
 {
        GSList *l;
@@ -509,20 +509,20 @@ ewscal_set_absolute_date_transitions (ESoapMessage *msg,
        for (l = absolute_date_transitions; l != NULL; l = l->next) {
                EEwsCalendarAbsoluteDateTransition *adt = l->data;
 
-               e_soap_message_start_element (msg, "AbsoluteDateTransition", NULL, NULL);
+               e_soap_request_start_element (msg, "AbsoluteDateTransition", NULL, NULL);
 
-               e_ews_message_write_string_parameter_with_attribute (
+               e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "To", NULL, adt->to->value,
                        "Kind", adt->to->kind);
-               e_ews_message_write_string_parameter (msg, "DateTime", NULL, adt->date_time);
+               e_ews_request_write_string_parameter (msg, "DateTime", NULL, adt->date_time);
 
-               e_soap_message_end_element (msg); /* "AbsoluteDateTransition" */
+               e_soap_request_end_element (msg); /* "AbsoluteDateTransition" */
        }
 }
 
 static void
-ewscal_set_recurring_day_transitions (ESoapMessage *msg,
+ewscal_set_recurring_day_transitions (ESoapRequest *request,
                                      GSList *recurring_day_transitions)
 {
        GSList *l;
@@ -533,23 +533,23 @@ ewscal_set_recurring_day_transitions (ESoapMessage *msg,
        for (l = recurring_day_transitions; l != NULL; l = l->next) {
                EEwsCalendarRecurringDayTransition *rdt = l->data;
 
-               e_soap_message_start_element (msg, "RecurringDayTransition", NULL, NULL);
+               e_soap_request_start_element (msg, "RecurringDayTransition", NULL, NULL);
 
-               e_ews_message_write_string_parameter_with_attribute (
+               e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "To", NULL, rdt->to->value,
                        "Kind", rdt->to->kind);
-               e_ews_message_write_string_parameter (msg, "TimeOffset", NULL, rdt->time_offset);
-               e_ews_message_write_string_parameter (msg, "Month", NULL, rdt->month);
-               e_ews_message_write_string_parameter (msg, "DayOfWeek", NULL, rdt->day_of_week);
-               e_ews_message_write_string_parameter (msg, "Occurrence", NULL, rdt->occurrence);
+               e_ews_request_write_string_parameter (msg, "TimeOffset", NULL, rdt->time_offset);
+               e_ews_request_write_string_parameter (msg, "Month", NULL, rdt->month);
+               e_ews_request_write_string_parameter (msg, "DayOfWeek", NULL, rdt->day_of_week);
+               e_ews_request_write_string_parameter (msg, "Occurrence", NULL, rdt->occurrence);
 
-               e_soap_message_end_element (msg); /* "RecurringDayTransition" */
+               e_soap_request_end_element (msg); /* "RecurringDayTransition" */
        }
 }
 
 static void
-ewscal_set_recurring_date_transitions (ESoapMessage *msg,
+ewscal_set_recurring_date_transitions (ESoapRequest *request,
                                       GSList *recurring_date_transitions)
 {
        GSList *l;
@@ -560,22 +560,22 @@ ewscal_set_recurring_date_transitions (ESoapMessage *msg,
        for (l = recurring_date_transitions; l != NULL; l = l->next) {
                EEwsCalendarRecurringDateTransition *rdt = l->data;
 
-               e_soap_message_start_element (msg, "RecurringDateTransition", NULL, NULL);
+               e_soap_request_start_element (msg, "RecurringDateTransition", NULL, NULL);
 
-               e_ews_message_write_string_parameter_with_attribute (
+               e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "To", NULL, rdt->to->value,
                        "Kind", rdt->to->kind);
-               e_ews_message_write_string_parameter (msg, "TimeOffset", NULL, rdt->time_offset);
-               e_ews_message_write_string_parameter (msg, "Month", NULL, rdt->month);
-               e_ews_message_write_string_parameter (msg, "Day", NULL, rdt->day);
+               e_ews_request_write_string_parameter (msg, "TimeOffset", NULL, rdt->time_offset);
+               e_ews_request_write_string_parameter (msg, "Month", NULL, rdt->month);
+               e_ews_request_write_string_parameter (msg, "Day", NULL, rdt->day);
 
-               e_soap_message_end_element (msg); /* "RecurringDateTransition" */
+               e_soap_request_end_element (msg); /* "RecurringDateTransition" */
        }
 }
 
 void
-ewscal_set_timezone (ESoapMessage *msg,
+ewscal_set_timezone (ESoapRequest *request,
                     const gchar *name,
                     EEwsCalendarTimeZoneDefinition *tzd)
 {
@@ -584,63 +584,63 @@ ewscal_set_timezone (ESoapMessage *msg,
        if (name == NULL || tzd == NULL)
                return;
 
-       e_soap_message_start_element (msg, name, NULL, NULL);
-       e_soap_message_add_attribute (msg, "Id", tzd->id, NULL, NULL);
-       e_soap_message_add_attribute (msg, "Name", tzd->name, NULL, NULL);
+       e_soap_request_start_element (msg, name, NULL, NULL);
+       e_soap_request_add_attribute (msg, "Id", tzd->id, NULL, NULL);
+       e_soap_request_add_attribute (msg, "Name", tzd->name, NULL, NULL);
 
-       e_soap_message_start_element (msg, "Periods", NULL, NULL);
+       e_soap_request_start_element (msg, "Periods", NULL, NULL);
        for (l = tzd->periods; l != NULL; l = l->next) {
                EEwsCalendarPeriod *period = l->data;
 
-               e_soap_message_start_element (msg, "Period", NULL, NULL);
-               e_soap_message_add_attribute (msg, "Bias", period->bias, NULL, NULL);
-               e_soap_message_add_attribute (msg, "Name", period->name, NULL, NULL);
-               e_soap_message_add_attribute (msg, "Id", period->id, NULL, NULL);
-               e_soap_message_end_element (msg); /* "Period" */
+               e_soap_request_start_element (msg, "Period", NULL, NULL);
+               e_soap_request_add_attribute (msg, "Bias", period->bias, NULL, NULL);
+               e_soap_request_add_attribute (msg, "Name", period->name, NULL, NULL);
+               e_soap_request_add_attribute (msg, "Id", period->id, NULL, NULL);
+               e_soap_request_end_element (msg); /* "Period" */
        }
-       e_soap_message_end_element (msg); /* "Periods" */
+       e_soap_request_end_element (msg); /* "Periods" */
 
-       e_soap_message_start_element (msg, "TransitionsGroups", NULL, NULL);
+       e_soap_request_start_element (msg, "TransitionsGroups", NULL, NULL);
        for (l = tzd->transitions_groups; l != NULL; l = l->next) {
                EEwsCalendarTransitionsGroup *tg = l->data;
 
-               e_soap_message_start_element (msg, "TransitionsGroup", NULL, NULL);
-               e_soap_message_add_attribute (msg, "Id", tg->id, NULL, NULL);
+               e_soap_request_start_element (msg, "TransitionsGroup", NULL, NULL);
+               e_soap_request_add_attribute (msg, "Id", tg->id, NULL, NULL);
 
                if (tg->transition != NULL) {
-                       e_soap_message_start_element (msg, "Transition", NULL, NULL);
-                       e_ews_message_write_string_parameter_with_attribute (
+                       e_soap_request_start_element (msg, "Transition", NULL, NULL);
+                       e_ews_request_write_string_parameter_with_attribute (
                                msg,
                                "To", NULL, tg->transition->value,
                                "Kind", tg->transition->kind);
-                       e_soap_message_end_element (msg); /* "Transition" */
+                       e_soap_request_end_element (msg); /* "Transition" */
                }
 
                ewscal_set_absolute_date_transitions (msg, tg->absolute_date_transitions);
                ewscal_set_recurring_day_transitions (msg, tg->recurring_day_transitions);
                ewscal_set_recurring_date_transitions (msg, tg->recurring_date_transitions);
 
-               e_soap_message_end_element (msg); /* "TransitionsGroup" */
+               e_soap_request_end_element (msg); /* "TransitionsGroup" */
        }
-       e_soap_message_end_element (msg); /* "TransitionsGroups" */
+       e_soap_request_end_element (msg); /* "TransitionsGroups" */
 
-       e_soap_message_start_element (msg, "Transitions", NULL, NULL);
-       e_soap_message_start_element (msg, "Transition", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (
+       e_soap_request_start_element (msg, "Transitions", NULL, NULL);
+       e_soap_request_start_element (msg, "Transition", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (
                msg,
                "To", NULL, tzd->transitions->transition->value,
                "Kind", tzd->transitions->transition->kind);
-       e_soap_message_end_element (msg); /* "Transition" */
+       e_soap_request_end_element (msg); /* "Transition" */
        ewscal_set_absolute_date_transitions (msg, tzd->transitions->absolute_date_transitions);
        ewscal_set_recurring_day_transitions (msg, tzd->transitions->recurring_day_transitions);
        ewscal_set_recurring_date_transitions (msg, tzd->transitions->recurring_date_transitions);
-       e_soap_message_end_element (msg); /* "Transitions" */
+       e_soap_request_end_element (msg); /* "Transitions" */
 
-       e_soap_message_end_element (msg); /* "StartTimeZone" */
+       e_soap_request_end_element (msg); /* "StartTimeZone" */
 }
 
 void
-ewscal_set_meeting_timezone (ESoapMessage *msg,
+ewscal_set_meeting_timezone (ESoapRequest *request,
                             ICalTimezone *icaltz,
                             ICalComponent *icomp)
 {
@@ -688,8 +688,8 @@ ewscal_set_meeting_timezone (ESoapMessage *msg,
        if (!location)
                location = i_cal_timezone_get_tznames (icaltz);
 
-       e_soap_message_start_element (msg, "MeetingTimeZone", NULL, NULL);
-       e_soap_message_add_attribute (msg, "TimeZoneName", location, NULL, NULL);
+       e_soap_request_start_element (msg, "MeetingTimeZone", NULL, NULL);
+       e_soap_request_add_attribute (msg, "TimeZoneName", location, NULL, NULL);
 
        /* Fetch the timezone offsets for the standard (or only) zone.
         * Negate it, because Exchange does it backwards */
@@ -710,7 +710,7 @@ ewscal_set_meeting_timezone (ESoapMessage *msg,
         * zone to zero. So try to avoid problems by doing the same. */
        duration = i_cal_duration_new_from_int (std_utcoffs);
        offset = i_cal_duration_as_ical_string (duration);
-       e_ews_message_write_string_parameter (msg, "BaseOffset", NULL, offset);
+       e_ews_request_write_string_parameter (msg, "BaseOffset", NULL, offset);
        g_clear_object (&duration);
        free (offset);
 
@@ -719,16 +719,16 @@ ewscal_set_meeting_timezone (ESoapMessage *msg,
         * one. */
        if (xdaylight) {
                /* Standard */
-               e_soap_message_start_element (msg, "Standard", NULL, NULL);
+               e_soap_request_start_element (msg, "Standard", NULL, NULL);
                ewscal_add_timechange (msg, xstd, std_utcoffs);
-               e_soap_message_end_element (msg); /* "Standard" */
+               e_soap_request_end_element (msg); /* "Standard" */
 
                /* DayLight */
-               e_soap_message_start_element (msg, "Daylight", NULL, NULL);
+               e_soap_request_start_element (msg, "Daylight", NULL, NULL);
                ewscal_add_timechange (msg, xdaylight, std_utcoffs);
-               e_soap_message_end_element (msg); /* "Daylight" */
+               e_soap_request_end_element (msg); /* "Daylight" */
        }
-       e_soap_message_end_element (msg); /* "MeetingTimeZone" */
+       e_soap_request_end_element (msg); /* "MeetingTimeZone" */
 
        g_clear_object (&comp);
        g_clear_object (&xstd);
@@ -736,7 +736,7 @@ ewscal_set_meeting_timezone (ESoapMessage *msg,
 }
 
 void
-ewscal_set_reccurence (ESoapMessage *msg,
+ewscal_set_reccurence (ESoapRequest *request,
                       ICalProperty *rrule,
                       ICalTime *dtstart)
 {
@@ -750,21 +750,21 @@ ewscal_set_reccurence (ESoapMessage *msg,
        if (!recur)
                return;
 
-       e_soap_message_start_element (msg, "Recurrence", NULL, NULL);
+       e_soap_request_start_element (msg, "Recurrence", NULL, NULL);
 
        switch (i_cal_recurrence_get_freq (recur)) {
                case I_CAL_DAILY_RECURRENCE:
-                       e_soap_message_start_element (msg, "DailyRecurrence", NULL, NULL);
+                       e_soap_request_start_element (msg, "DailyRecurrence", NULL, NULL);
                        snprintf (buffer, 32, "%d", i_cal_recurrence_get_interval (recur));
-                       e_ews_message_write_string_parameter (msg, "Interval", NULL, buffer);
-                       e_soap_message_end_element (msg); /* "DailyRecurrence" */
+                       e_ews_request_write_string_parameter (msg, "Interval", NULL, buffer);
+                       e_soap_request_end_element (msg); /* "DailyRecurrence" */
                        break;
 
                case I_CAL_WEEKLY_RECURRENCE:
-                       e_soap_message_start_element (msg, "WeeklyRecurrence", NULL, NULL);
+                       e_soap_request_start_element (msg, "WeeklyRecurrence", NULL, NULL);
 
                        snprintf (buffer, 32, "%d", i_cal_recurrence_get_interval (recur));
-                       e_ews_message_write_string_parameter (msg, "Interval", NULL, buffer);
+                       e_ews_request_write_string_parameter (msg, "Interval", NULL, buffer);
 
                        len = snprintf (
                                buffer, 256, "%s",
@@ -774,39 +774,39 @@ ewscal_set_reccurence (ESoapMessage *msg,
                                        buffer + len, 256 - len, " %s",
                                        number_to_weekday (i_cal_recurrence_day_day_of_week 
(i_cal_recurrence_get_by_day (recur, i))));
                        }
-                       e_ews_message_write_string_parameter (msg, "DaysOfWeek", NULL, buffer);
+                       e_ews_request_write_string_parameter (msg, "DaysOfWeek", NULL, buffer);
 
-                       e_soap_message_end_element (msg); /* "WeeklyRecurrence" */
+                       e_soap_request_end_element (msg); /* "WeeklyRecurrence" */
                        break;
 
                case I_CAL_MONTHLY_RECURRENCE:
                        if (i_cal_recurrence_get_by_month_day (recur, 0) == I_CAL_RECURRENCE_ARRAY_MAX) {
-                               e_soap_message_start_element (msg, "RelativeMonthlyRecurrence", NULL, NULL);
+                               e_soap_request_start_element (msg, "RelativeMonthlyRecurrence", NULL, NULL);
 
                                /* For now this is what got implemented since this is the only
                                 relative monthly recurrence evolution can set.
                                 TODO: extend the code with all possible monthly recurrence settings */
                                snprintf (buffer, 32, "%d", i_cal_recurrence_get_interval (recur));
-                               e_ews_message_write_string_parameter (msg, "Interval", NULL, buffer);
+                               e_ews_request_write_string_parameter (msg, "Interval", NULL, buffer);
 
-                               e_ews_message_write_string_parameter (
+                               e_ews_request_write_string_parameter (
                                        msg, "DaysOfWeek", NULL,
                                        number_to_weekday (i_cal_recurrence_day_day_of_week 
(i_cal_recurrence_get_by_day (recur, 0))));
 
-                               e_ews_message_write_string_parameter (msg, "DayOfWeekIndex", NULL, 
weekindex_to_ical (
+                               e_ews_request_write_string_parameter (msg, "DayOfWeekIndex", NULL, 
weekindex_to_ical (
                                        i_cal_recurrence_get_by_set_pos (recur, 0) == 5 ? -1 : 
i_cal_recurrence_get_by_set_pos (recur, 0)));
 
-                               e_soap_message_end_element (msg); /* "RelativeMonthlyRecurrence" */
+                               e_soap_request_end_element (msg); /* "RelativeMonthlyRecurrence" */
                        } else {
-                               e_soap_message_start_element (msg, "AbsoluteMonthlyRecurrence", NULL, NULL);
+                               e_soap_request_start_element (msg, "AbsoluteMonthlyRecurrence", NULL, NULL);
 
                                snprintf (buffer, 256, "%d", i_cal_recurrence_get_interval (recur));
-                               e_ews_message_write_string_parameter (msg, "Interval", NULL, buffer);
+                               e_ews_request_write_string_parameter (msg, "Interval", NULL, buffer);
 
                                snprintf (buffer, 256, "%d", i_cal_recurrence_get_by_month_day (recur, 0) == 
-1 ? 31 : i_cal_recurrence_get_by_month_day (recur, 0));
-                               e_ews_message_write_string_parameter (msg, "DayOfMonth", NULL, buffer);
+                               e_ews_request_write_string_parameter (msg, "DayOfMonth", NULL, buffer);
 
-                               e_soap_message_end_element (msg); /* "AbsoluteMonthlyRecurrence" */
+                               e_soap_request_end_element (msg); /* "AbsoluteMonthlyRecurrence" */
                        }
                        break;
 
@@ -818,7 +818,7 @@ ewscal_set_reccurence (ESoapMessage *msg,
                        } else
                        #endif
                        {
-                               e_soap_message_start_element (msg, "AbsoluteYearlyRecurrence", NULL, NULL);
+                               e_soap_request_start_element (msg, "AbsoluteYearlyRecurrence", NULL, NULL);
 
                                /* work according to RFC5545 §3.3.10
                                 * dtstart is the default, give preference to by_month & by_month_day if they 
are set
@@ -828,20 +828,20 @@ ewscal_set_reccurence (ESoapMessage *msg,
                                } else {
                                        snprintf (buffer, 256, "%d", i_cal_time_get_day (dtstart));
                                }
-                               e_ews_message_write_string_parameter (msg, "DayOfMonth", NULL, buffer);
+                               e_ews_request_write_string_parameter (msg, "DayOfMonth", NULL, buffer);
 
                                if (i_cal_recurrence_get_by_month (recur, 0) != I_CAL_RECURRENCE_ARRAY_MAX) {
                                        snprintf (buffer, 256, "%d", i_cal_recurrence_get_by_month_day 
(recur, 0));
-                                       e_ews_message_write_string_parameter (
+                                       e_ews_request_write_string_parameter (
                                                msg, "Month", NULL,
                                                number_to_month (i_cal_recurrence_get_by_month (recur, 0)));
                                } else {
-                                       e_ews_message_write_string_parameter (
+                                       e_ews_request_write_string_parameter (
                                                msg, "Month", NULL,
                                                number_to_month (i_cal_time_get_month (dtstart)));
                                }
 
-                               e_soap_message_end_element (msg); /* "AbsoluteYearlyRecurrence" */
+                               e_soap_request_end_element (msg); /* "AbsoluteYearlyRecurrence" */
 
                        }
                        break;
@@ -856,32 +856,32 @@ ewscal_set_reccurence (ESoapMessage *msg,
        }
 
        if (i_cal_recurrence_get_count (recur) > 0) {
-               e_soap_message_start_element (msg, "NumberedRecurrence", NULL, NULL);
+               e_soap_request_start_element (msg, "NumberedRecurrence", NULL, NULL);
                ewscal_set_date (msg, "StartDate", dtstart);
                snprintf (buffer, 32, "%d", i_cal_recurrence_get_count (recur));
-               e_ews_message_write_string_parameter (msg, "NumberOfOccurrences", NULL, buffer);
-               e_soap_message_end_element (msg); /* "NumberedRecurrence" */
+               e_ews_request_write_string_parameter (msg, "NumberOfOccurrences", NULL, buffer);
+               e_soap_request_end_element (msg); /* "NumberedRecurrence" */
        } else {
                ICalTime *until;
 
                until = i_cal_recurrence_get_until (recur);
 
                if (until && !i_cal_time_is_null_time (until)) {
-                       e_soap_message_start_element (msg, "EndDateRecurrence", NULL, NULL);
+                       e_soap_request_start_element (msg, "EndDateRecurrence", NULL, NULL);
                        ewscal_set_date (msg, "StartDate", dtstart);
                        ewscal_set_date (msg, "EndDate", until);
-                       e_soap_message_end_element (msg); /* "EndDateRecurrence" */
+                       e_soap_request_end_element (msg); /* "EndDateRecurrence" */
                } else {
-                       e_soap_message_start_element (msg, "NoEndRecurrence", NULL, NULL);
+                       e_soap_request_start_element (msg, "NoEndRecurrence", NULL, NULL);
                        ewscal_set_date (msg, "StartDate", dtstart);
-                       e_soap_message_end_element (msg); /* "NoEndRecurrence" */
+                       e_soap_request_end_element (msg); /* "NoEndRecurrence" */
                }
 
                g_clear_object (&until);
        }
 
 exit:
-       e_soap_message_end_element (msg); /* "Recurrence" */
+       e_soap_request_end_element (msg); /* "Recurrence" */
        g_object_unref (recur);
 }
 
@@ -932,7 +932,7 @@ icomponent_get_datetime (ICalComponent *comp,
 }
 
 void
-ewscal_set_reccurence_exceptions (ESoapMessage *msg,
+ewscal_set_reccurence_exceptions (ESoapRequest *request,
                                  ICalComponent *comp)
 {
        ICalProperty *exdate;
@@ -942,21 +942,21 @@ ewscal_set_reccurence_exceptions (ESoapMessage *msg,
        if (!exdate)
                return;
 
-       e_soap_message_start_element (msg, "DeletedOccurrences", NULL, NULL);
+       e_soap_request_start_element (msg, "DeletedOccurrences", NULL, NULL);
 
        for (; exdate; g_object_unref (exdate), exdate = i_cal_component_get_next_property (comp, 
I_CAL_EXDATE_PROPERTY)) {
                ICalTime *exdatetime = icomponent_get_datetime (comp, exdate);
 
-               e_soap_message_start_element (msg, "DeletedOccurrence", NULL, NULL);
+               e_soap_request_start_element (msg, "DeletedOccurrence", NULL, NULL);
 
                ewscal_set_date (msg, "Start", exdatetime);
 
-               e_soap_message_end_element (msg); /* "DeletedOccurrence" */
+               e_soap_request_end_element (msg); /* "DeletedOccurrence" */
 
                g_clear_object (&exdatetime);
        }
 
-       e_soap_message_end_element (msg); /* "DeletedOccurrences" */
+       e_soap_request_end_element (msg); /* "DeletedOccurrences" */
 }
 
 /*
@@ -1016,29 +1016,29 @@ e_ews_clean_icomponent (ICalComponent *icomp)
 }
 
 static void
-add_attendees_list_to_message (ESoapMessage *msg,
+add_attendees_list_to_message (ESoapRequest *request,
                                const gchar *listname,
                                GSList *list)
 {
        GSList *item;
 
-       e_soap_message_start_element (msg, listname, NULL, NULL);
+       e_soap_request_start_element (msg, listname, NULL, NULL);
 
        for (item = list; item != NULL; item = item->next) {
-               e_soap_message_start_element (msg, "Attendee", NULL, NULL);
-               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
+               e_soap_request_start_element (msg, "Attendee", NULL, NULL);
+               e_soap_request_start_element (msg, "Mailbox", NULL, NULL);
 
-               e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, item->data);
+               e_ews_request_write_string_parameter (msg, "EmailAddress", NULL, item->data);
 
-               e_soap_message_end_element (msg); /* "Mailbox" */
-               e_soap_message_end_element (msg); /* "Attendee" */
+               e_soap_request_end_element (msg); /* "Mailbox" */
+               e_soap_request_end_element (msg); /* "Attendee" */
        }
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (msg);
 }
 
 static void
-convert_sensitivity_calcomp_to_xml (ESoapMessage *msg,
+convert_sensitivity_calcomp_to_xml (ESoapRequest *request,
                                    ICalComponent *icomp)
 {
        ICalProperty *prop;
@@ -1050,18 +1050,18 @@ convert_sensitivity_calcomp_to_xml (ESoapMessage *msg,
        if (prop) {
                ICalProperty_Class classify = i_cal_property_get_class (prop);
                if (classify == I_CAL_CLASS_PUBLIC) {
-                       e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Normal");
+                       e_ews_request_write_string_parameter (msg, "Sensitivity", NULL, "Normal");
                } else if (classify == I_CAL_CLASS_PRIVATE) {
-                       e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Private");
+                       e_ews_request_write_string_parameter (msg, "Sensitivity", NULL, "Private");
                } else if (classify == I_CAL_CLASS_CONFIDENTIAL) {
-                       e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Personal");
+                       e_ews_request_write_string_parameter (msg, "Sensitivity", NULL, "Personal");
                }
                g_object_unref (prop);
        }
 }
 
 static void
-convert_categories_calcomp_to_xml (ESoapMessage *msg,
+convert_categories_calcomp_to_xml (ESoapRequest *request,
                                   ECalComponent *comp,
                                   ICalComponent *icomp)
 {
@@ -1096,7 +1096,7 @@ convert_categories_calcomp_to_xml (ESoapMessage *msg,
        }
 
        if (citer) {
-               e_soap_message_start_element (msg, "Categories", NULL, NULL);
+               e_soap_request_start_element (msg, "Categories", NULL, NULL);
 
                for (citer = categ_list; citer; citer = g_slist_next (citer)) {
                        const gchar *category = citer->data;
@@ -1104,10 +1104,10 @@ convert_categories_calcomp_to_xml (ESoapMessage *msg,
                        if (!category || !*category)
                                continue;
 
-                       e_ews_message_write_string_parameter (msg, "String", NULL, category);
+                       e_ews_request_write_string_parameter (msg, "String", NULL, category);
                }
 
-               e_soap_message_end_element (msg); /* Categories */
+               e_soap_request_end_element (msg); /* Categories */
        }
 
        g_slist_free_full (categ_list, g_free);
@@ -1132,7 +1132,7 @@ check_is_all_day_event (const ICalTime *dtstart,
 }
 
 static gboolean
-convert_vevent_calcomp_to_xml (ESoapMessage *msg,
+convert_vevent_calcomp_to_xml (ESoapRequest *request,
                                gpointer user_data,
                               GError **error)
 {
@@ -1154,19 +1154,19 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
        /* FORMAT OF A SAMPLE SOAP MESSAGE: http://msdn.microsoft.com/en-us/library/aa564690.aspx */
 
        /* Prepare CalendarItem node in the SOAP message */
-       e_soap_message_start_element (msg, "CalendarItem", NULL, NULL);
+       e_soap_request_start_element (msg, "CalendarItem", NULL, NULL);
 
        /* subject */
        value = i_cal_component_get_summary (icomp);
        if (value)
-               e_ews_message_write_string_parameter (msg, "Subject", NULL, value);
+               e_ews_request_write_string_parameter (msg, "Subject", NULL, value);
 
        convert_sensitivity_calcomp_to_xml (msg, icomp);
 
        /* description */
        value = i_cal_component_get_description (icomp);
        if (value)
-               e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, value, "BodyType", 
"Text");
+               e_ews_request_write_string_parameter_with_attribute (msg, "Body", NULL, value, "BodyType", 
"Text");
 
        convert_categories_calcomp_to_xml (msg, comp, icomp);
 
@@ -1175,7 +1175,7 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
        if (has_alarms)
                ews_set_alarm (msg, comp, convert_data->timezone_cache, convert_data->vcalendar, FALSE);
        else
-               e_ews_message_write_string_parameter (msg, "ReminderIsSet", NULL, "false");
+               e_ews_request_write_string_parameter (msg, "ReminderIsSet", NULL, "false");
 
        /* start time, end time and meeting time zone */
        dtstart = e_cal_backend_ews_get_datetime_with_zone (convert_data->timezone_cache, 
convert_data->vcalendar, icomp, I_CAL_DTSTART_PROPERTY, i_cal_property_get_dtstart);
@@ -1193,13 +1193,13 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
        satisfies = e_ews_connection_satisfies_server_version (convert_data->connection, E_EWS_EXCHANGE_2010);
        if (satisfies && ical_location_start != NULL && ical_location_end != NULL) {
                /* set iana timezone info as an extended property */
-               e_ews_message_add_extended_property_distinguished_name_string (
+               e_ews_request_add_extended_property_distinguished_name_string (
                        msg,
                        "PublicStrings",
                        "EvolutionEWSStartTimeZone",
                        ical_location_start);
 
-               e_ews_message_add_extended_property_distinguished_name_string (
+               e_ews_request_add_extended_property_distinguished_name_string (
                        msg,
                        "PublicStrings",
                        "EvolutionEWSEndTimeZone",
@@ -1221,25 +1221,25 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
 
        /* All day event ? */
        if (is_all_day_event)
-               e_ews_message_write_string_parameter (msg, "IsAllDayEvent", NULL, "true");
+               e_ews_request_write_string_parameter (msg, "IsAllDayEvent", NULL, "true");
 
        /*freebusy*/
        prop = i_cal_component_get_first_property (icomp, I_CAL_TRANSP_PROPERTY);
        if (!prop || i_cal_property_get_transp (prop) == I_CAL_TRANSP_TRANSPARENT)
-               e_ews_message_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Free");
+               e_ews_request_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Free");
        else
-               e_ews_message_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Busy");
+               e_ews_request_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Busy");
        g_clear_object (&prop);
 
        /* location */
        value = i_cal_component_get_location (icomp);
        if (value)
-               e_ews_message_write_string_parameter (msg, "Location", NULL, value);
+               e_ews_request_write_string_parameter (msg, "Location", NULL, value);
 
        /* collect attendees */
        e_ews_collect_attendees (icomp, &required, &optional, &resource, &rsvp_requested);
 
-       e_ews_message_write_string_parameter (msg, "IsResponseRequested", NULL, rsvp_requested ? "true" : 
"false");
+       e_ews_request_write_string_parameter (msg, "IsResponseRequested", NULL, rsvp_requested ? "true" : 
"false");
 
        if (required != NULL) {
                add_attendees_list_to_message (msg, "RequiredAttendees", required);
@@ -1287,12 +1287,12 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
                g_slist_free (msdn_locations);
                g_slist_free_full (tzds, (GDestroyNotify) e_ews_calendar_time_zone_definition_free);
        } else {
-               e_ews_message_replace_server_version (msg, E_EWS_EXCHANGE_2007_SP1);
+               e_ews_request_replace_server_version (msg, E_EWS_EXCHANGE_2007_SP1);
 
                ewscal_set_meeting_timezone (msg, tzid_start, icomp);
        }
 
-       e_soap_message_end_element (msg); /* "CalendarItem" */
+       e_soap_request_end_element (msg); /* "CalendarItem" */
 
        g_clear_object (&dtstart);
        g_clear_object (&dtend);
@@ -1314,7 +1314,7 @@ ews_priority_to_string (gint priority)
 }
 
 static gboolean
-convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
+convert_vtodo_calcomp_to_xml (ESoapRequest *request,
                               gpointer user_data,
                              GError **error)
 {
@@ -1327,13 +1327,13 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
        gboolean success;
        /* gboolean has_alarms; */
 
-       e_soap_message_start_element (msg, "Task", NULL, NULL);
+       e_soap_request_start_element (msg, "Task", NULL, NULL);
 
-       e_ews_message_write_string_parameter (msg, "Subject", NULL, i_cal_component_get_summary (icomp));
+       e_ews_request_write_string_parameter (msg, "Subject", NULL, i_cal_component_get_summary (icomp));
 
        convert_sensitivity_calcomp_to_xml (msg, icomp);
 
-       e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, 
i_cal_component_get_description (icomp), "BodyType", "Text");
+       e_ews_request_write_string_parameter_with_attribute (msg, "Body", NULL, 
i_cal_component_get_description (icomp), "BodyType", "Text");
 
        convert_categories_calcomp_to_xml (msg, NULL, icomp);
 
@@ -1342,7 +1342,7 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
                gint priority;
 
                priority = i_cal_property_get_priority (prop);
-               e_ews_message_write_string_parameter (msg, "Importance", NULL, ews_priority_to_string 
(priority));
+               e_ews_request_write_string_parameter (msg, "Importance", NULL, ews_priority_to_string 
(priority));
                g_object_unref (prop);
        }
 
@@ -1358,7 +1358,7 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
        if (prop) {
                value = i_cal_property_get_percentcomplete (prop);
                snprintf (buffer, 16, "%d", value);
-               e_ews_message_write_string_parameter (msg, "PercentComplete", NULL, buffer);
+               e_ews_request_write_string_parameter (msg, "PercentComplete", NULL, buffer);
                g_object_unref (prop);
        }
 
@@ -1376,10 +1376,10 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
        if (prop) {
                switch (i_cal_property_get_status (prop)) {
                case I_CAL_STATUS_INPROCESS:
-                       e_ews_message_write_string_parameter (msg, "Status", NULL, "InProgress");
+                       e_ews_request_write_string_parameter (msg, "Status", NULL, "InProgress");
                        break;
                case I_CAL_STATUS_COMPLETED:
-                       e_ews_message_write_string_parameter (msg, "Status", NULL, "Completed");
+                       e_ews_request_write_string_parameter (msg, "Status", NULL, "Completed");
                        break;
                default:
                        break;
@@ -1401,15 +1401,15 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
        }
 
        if (!has_alarms)
-               e_ews_message_write_string_parameter (msg, "ReminderIsSet", NULL, "false"); */
+               e_ews_request_write_string_parameter (msg, "ReminderIsSet", NULL, "false"); */
 
-       e_soap_message_end_element (msg); /* "Task" */
+       e_soap_request_end_element (msg); /* "Task" */
 
        return success;
 }
 
 static gboolean
-convert_vjournal_calcomp_to_xml (ESoapMessage *msg,
+convert_vjournal_calcomp_to_xml (ESoapRequest *request,
                                 gpointer user_data,
                                 GError **error)
 {
@@ -1417,27 +1417,27 @@ convert_vjournal_calcomp_to_xml (ESoapMessage *msg,
        ICalComponent *icomp = convert_data->icomp;
        const gchar *text;
 
-       e_soap_message_start_element (msg, "Message", NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "ItemClass", NULL, "IPM.StickyNote");
+       e_soap_request_start_element (msg, "Message", NULL, NULL);
+       e_ews_request_write_string_parameter (msg, "ItemClass", NULL, "IPM.StickyNote");
 
-       e_ews_message_write_string_parameter (msg, "Subject", NULL, i_cal_component_get_summary (icomp));
+       e_ews_request_write_string_parameter (msg, "Subject", NULL, i_cal_component_get_summary (icomp));
 
        convert_sensitivity_calcomp_to_xml (msg, icomp);
 
        text = i_cal_component_get_description (icomp);
        if (!text || !*text)
                text = i_cal_component_get_summary (icomp);
-       e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, text, "BodyType", "Text");
+       e_ews_request_write_string_parameter_with_attribute (msg, "Body", NULL, text, "BodyType", "Text");
 
        convert_categories_calcomp_to_xml (msg, NULL, icomp);
 
-       e_soap_message_end_element (msg); /* Message */
+       e_soap_request_end_element (msg); /* Message */
 
        return TRUE;
 }
 
 gboolean
-e_cal_backend_ews_convert_calcomp_to_xml (ESoapMessage *msg,
+e_cal_backend_ews_convert_calcomp_to_xml (ESoapRequest *request,
                                          gpointer user_data,
                                          GError **error)
 {
@@ -1464,7 +1464,7 @@ e_cal_backend_ews_convert_calcomp_to_xml (ESoapMessage *msg,
 
 static void
 convert_component_categories_to_updatexml (ECalComponent *comp,
-                                          ESoapMessage *msg,
+                                          ESoapRequest *request,
                                           const gchar *base_elem_name)
 {
        GSList *categ_list, *citer;
@@ -1475,8 +1475,8 @@ convert_component_categories_to_updatexml (ECalComponent *comp,
 
        categ_list = e_cal_component_get_categories_list (comp);
 
-       e_ews_message_start_set_item_field (msg, "Categories", "item", base_elem_name);
-       e_soap_message_start_element (msg, "Categories", NULL, NULL);
+       e_ews_request_start_set_item_field (msg, "Categories", "item", base_elem_name);
+       e_soap_request_start_element (msg, "Categories", NULL, NULL);
 
        for (citer = categ_list; citer; citer = g_slist_next (citer)) {
                const gchar *category = citer->data;
@@ -1484,30 +1484,30 @@ convert_component_categories_to_updatexml (ECalComponent *comp,
                if (!category || !*category)
                        continue;
 
-               e_ews_message_write_string_parameter (msg, "String", NULL, category);
+               e_ews_request_write_string_parameter (msg, "String", NULL, category);
        }
 
-       e_soap_message_end_element (msg); /* Categories */
-       e_ews_message_end_set_item_field (msg);
+       e_soap_request_end_element (msg); /* Categories */
+       e_ews_request_end_set_item_field (msg);
 
        g_slist_free_full (categ_list, g_free);
 }
 
 static void
-convert_vevent_property_to_updatexml (ESoapMessage *msg,
+convert_vevent_property_to_updatexml (ESoapRequest *request,
                                       const gchar *name,
                                       const gchar *value,
                                       const gchar *prefix,
                                       const gchar *attr_name,
                                       const gchar *attr_value)
 {
-       e_ews_message_start_set_item_field (msg, name, prefix, "CalendarItem");
-       e_ews_message_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_start_set_item_field (msg, name, prefix, "CalendarItem");
+       e_ews_request_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
+       e_ews_request_end_set_item_field (msg);
 }
 
 static gboolean
-convert_vevent_component_to_updatexml (ESoapMessage *msg,
+convert_vevent_component_to_updatexml (ESoapRequest *request,
                                        gpointer user_data,
                                       GError **error)
 {
@@ -1530,14 +1530,14 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
        gboolean satisfies, rsvp_requested = TRUE, is_all_day_event = FALSE;
 
        if (convert_data->change_type == E_EWS_ITEMCHANGE_TYPE_OCCURRENCEITEM && convert_data->index > 0) {
-               e_ews_message_start_item_change (
+               e_ews_request_start_item_change (
                        msg,
                        convert_data->change_type,
                        convert_data->item_id,
                        convert_data->change_key,
                        convert_data->index);
        } else {
-               e_ews_message_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
+               e_ews_request_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
                        convert_data->item_id, convert_data->change_key, 0);
        }
 
@@ -1620,7 +1620,7 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 
        org_email_address = e_ews_collect_organizer (icomp);
        if (org_email_address && convert_data->user_email && g_ascii_strcasecmp (org_email_address, 
convert_data->user_email)) {
-               e_ews_message_end_item_change (msg);
+               e_ews_request_end_item_change (msg);
                return TRUE;
        }
 
@@ -1682,7 +1682,7 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                        dt_end_changed = TRUE;
 
                if ((dt_start_changed || dt_start_changed_timezone_name) && ical_location_start != NULL)
-                       e_ews_message_add_set_item_field_extended_distinguished_name_string (
+                       e_ews_request_add_set_item_field_extended_distinguished_name_string (
                                msg,
                                NULL,
                                "CalendarItem",
@@ -1691,7 +1691,7 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                                ical_location_start);
 
                if ((dt_end_changed || dt_end_changed_timezone_name) && ical_location_end != NULL)
-                       e_ews_message_add_set_item_field_extended_distinguished_name_string (
+                       e_ews_request_add_set_item_field_extended_distinguished_name_string (
                                msg,
                                NULL,
                                "CalendarItem",
@@ -1706,15 +1706,15 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                is_all_day_event = check_is_all_day_event (dtstart, tzid_start, dtend, tzid_end);
 
        if (dt_start_changed) {
-               e_ews_message_start_set_item_field (msg, "Start", "calendar","CalendarItem");
+               e_ews_request_start_set_item_field (msg, "Start", "calendar","CalendarItem");
                e_ews_cal_utils_set_time (msg, "Start", dtstart, is_all_day_event && i_cal_time_is_date 
(dtstart));
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
 
        if (dt_end_changed) {
-               e_ews_message_start_set_item_field (msg, "End", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "End", "calendar", "CalendarItem");
                e_ews_cal_utils_set_time (msg, "End", dtend, is_all_day_event && i_cal_time_is_date (dtend));
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
 
        /*Check for All Day Event*/
@@ -1730,28 +1730,28 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
        convert_vevent_property_to_updatexml (msg, "IsResponseRequested", rsvp_requested ? "true" : "false", 
"calendar", NULL, NULL);
 
        if (required != NULL) {
-               e_ews_message_start_set_item_field (msg, "RequiredAttendees", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "RequiredAttendees", "calendar", "CalendarItem");
 
                add_attendees_list_to_message (msg, "RequiredAttendees", required);
                g_slist_free (required);
 
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
        if (optional != NULL) {
-               e_ews_message_start_set_item_field (msg, "OptionalAttendees", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "OptionalAttendees", "calendar", "CalendarItem");
 
                add_attendees_list_to_message (msg, "OptionalAttendees", optional);
                g_slist_free (optional);
 
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
        if (resource != NULL) {
-               e_ews_message_start_set_item_field (msg, "Resources", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "Resources", "calendar", "CalendarItem");
 
                add_attendees_list_to_message (msg, "Resources", resource);
                g_slist_free (resource);
 
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
 
        /* Recurrence */
@@ -1768,9 +1768,9 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                rrule_value = i_cal_property_get_value_as_string (prop);
 
        if (prop && g_strcmp0 (rrule_value, rrule_old_value)) {
-               e_ews_message_start_set_item_field (msg, "Recurrence", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "Recurrence", "calendar", "CalendarItem");
                ewscal_set_reccurence (msg, prop, dtstart);
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
        g_clear_object (&prop);
        g_free (rrule_value);
@@ -1798,9 +1798,9 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 
                                tmp = tzds;
                                if (tzid_start != NULL) {
-                                       e_ews_message_start_set_item_field (msg, "StartTimeZone", "calendar", 
"CalendarItem");
+                                       e_ews_request_start_set_item_field (msg, "StartTimeZone", "calendar", 
"CalendarItem");
                                        ewscal_set_timezone (msg, "StartTimeZone", tmp->data);
-                                       e_ews_message_end_set_item_field (msg);
+                                       e_ews_request_end_set_item_field (msg);
 
                                        /*
                                         * Exchange server is smart enough to return the list of
@@ -1811,9 +1811,9 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                                }
 
                                if (tzid_end != NULL) {
-                                       e_ews_message_start_set_item_field (msg, "EndTimeZone", "calendar", 
"CalendarItem");
+                                       e_ews_request_start_set_item_field (msg, "EndTimeZone", "calendar", 
"CalendarItem");
                                        ewscal_set_timezone (msg, "EndTimeZone", tmp->data);
-                                       e_ews_message_end_set_item_field (msg);
+                                       e_ews_request_end_set_item_field (msg);
                                }
                        }
 
@@ -1821,14 +1821,14 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
                        g_slist_free_full (tzds, (GDestroyNotify) e_ews_calendar_time_zone_definition_free);
                }
        } else if (dt_changed) {
-               e_ews_message_replace_server_version (msg, E_EWS_EXCHANGE_2007_SP1);
+               e_ews_request_replace_server_version (msg, E_EWS_EXCHANGE_2007_SP1);
 
-               e_ews_message_start_set_item_field (msg, "MeetingTimeZone", "calendar", "CalendarItem");
+               e_ews_request_start_set_item_field (msg, "MeetingTimeZone", "calendar", "CalendarItem");
                ewscal_set_meeting_timezone (msg, tzid_start ? tzid_start : convert_data->default_zone, 
icomp);
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
        }
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (msg);
 
        g_clear_object (&dtstart);
        g_clear_object (&dtend);
@@ -1839,20 +1839,20 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 }
 
 static void
-convert_vtodo_property_to_updatexml (ESoapMessage *msg,
+convert_vtodo_property_to_updatexml (ESoapRequest *request,
                                      const gchar *name,
                                      const gchar *value,
                                      const gchar *prefix,
                                      const gchar *attr_name,
                                      const gchar *attr_value)
 {
-       e_ews_message_start_set_item_field (msg, name, prefix, "Task");
-       e_ews_message_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_start_set_item_field (msg, name, prefix, "Task");
+       e_ews_request_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
+       e_ews_request_end_set_item_field (msg);
 }
 
 static gboolean
-convert_vtodo_component_to_updatexml (ESoapMessage *msg,
+convert_vtodo_component_to_updatexml (ESoapRequest *request,
                                       gpointer user_data,
                                      GError **error)
 {
@@ -1864,7 +1864,7 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
        gchar buffer[16];
        gboolean success = TRUE;
 
-       e_ews_message_start_item_change (
+       e_ews_request_start_item_change (
                msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
                convert_data->item_id, convert_data->change_key, 0);
 
@@ -1888,22 +1888,22 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
        prop = i_cal_component_get_first_property (icomp, I_CAL_DUE_PROPERTY);
        if (prop) {
                dt = e_cal_backend_ews_get_datetime_with_zone (convert_data->timezone_cache, 
convert_data->vcalendar, icomp, I_CAL_DUE_PROPERTY, i_cal_property_get_due);
-               e_ews_message_start_set_item_field (msg, "DueDate", "task", "Task");
+               e_ews_request_start_set_item_field (msg, "DueDate", "task", "Task");
                e_ews_cal_utils_set_time (msg, "DueDate", dt, TRUE);
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
                g_object_unref (prop);
                g_clear_object (&dt);
        } else {
-               e_ews_message_add_delete_item_field (msg, "DueDate", "task");
+               e_ews_request_add_delete_item_field (msg, "DueDate", "task");
        }
 
        prop = i_cal_component_get_first_property (icomp, I_CAL_PERCENTCOMPLETE_PROPERTY);
        if (prop) {
                value = i_cal_property_get_percentcomplete (prop);
                snprintf (buffer, 16, "%d", value);
-               e_ews_message_start_set_item_field (msg, "PercentComplete", "task", "Task");
-               e_ews_message_write_string_parameter (msg, "PercentComplete", NULL, buffer);
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_start_set_item_field (msg, "PercentComplete", "task", "Task");
+               e_ews_request_write_string_parameter (msg, "PercentComplete", NULL, buffer);
+               e_ews_request_end_set_item_field (msg);
                g_object_unref (prop);
        }
 
@@ -1911,23 +1911,23 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
        value = i_cal_component_count_properties (e_cal_component_get_icalcomponent (convert_data->old_comp), 
I_CAL_RRULE_PROPERTY);
        if (i_cal_component_count_properties (icomp, I_CAL_RRULE_PROPERTY) > 0 ||
            (e_cal_util_component_has_x_property (icomp, X_EWS_TASK_REGENERATION) && value <= 0)) {
-               e_ews_message_start_set_item_field (msg, "Recurrence", "task", "Task");
+               e_ews_request_start_set_item_field (msg, "Recurrence", "task", "Task");
                success = success && e_ews_cal_utils_set_recurrence (msg, icomp, FALSE, error);
-               e_ews_message_end_set_item_field (msg); /* Recurrence */
+               e_ews_request_end_set_item_field (msg); /* Recurrence */
        } else if (value > 0) {
-               e_ews_message_add_delete_item_field (msg, "Recurrence", "task");
+               e_ews_request_add_delete_item_field (msg, "Recurrence", "task");
        }
 
        prop = i_cal_component_get_first_property (icomp, I_CAL_DTSTART_PROPERTY);
        if (prop) {
                dt = e_cal_backend_ews_get_datetime_with_zone (convert_data->timezone_cache, 
convert_data->vcalendar, icomp, I_CAL_DTSTART_PROPERTY, i_cal_property_get_dtstart);
-               e_ews_message_start_set_item_field (msg, "StartDate", "task", "Task");
+               e_ews_request_start_set_item_field (msg, "StartDate", "task", "Task");
                e_ews_cal_utils_set_time (msg, "StartDate", dt, TRUE);
-               e_ews_message_end_set_item_field (msg);
+               e_ews_request_end_set_item_field (msg);
                g_object_unref (prop);
                g_clear_object (&dt);
        } else {
-               e_ews_message_add_delete_item_field (msg, "StartDate", "task");
+               e_ews_request_add_delete_item_field (msg, "StartDate", "task");
        }
 
        prop = i_cal_component_get_first_property (icomp, I_CAL_STATUS_PROPERTY);
@@ -1961,26 +1961,26 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
                g_object_unref (prop);
        }
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (msg);
 
        return success;
 }
 
 static void
-convert_vjournal_property_to_updatexml (ESoapMessage *msg,
+convert_vjournal_property_to_updatexml (ESoapRequest *request,
                                        const gchar *name,
                                        const gchar *value,
                                        const gchar *prefix,
                                        const gchar *attr_name,
                                        const gchar *attr_value)
 {
-       e_ews_message_start_set_item_field (msg, name, prefix, "Message");
-       e_ews_message_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_start_set_item_field (msg, name, prefix, "Message");
+       e_ews_request_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
+       e_ews_request_end_set_item_field (msg);
 }
 
 static gboolean
-convert_vjournal_component_to_updatexml (ESoapMessage *msg,
+convert_vjournal_component_to_updatexml (ESoapRequest *request,
                                         gpointer user_data,
                                         GError **error)
 {
@@ -1989,7 +1989,7 @@ convert_vjournal_component_to_updatexml (ESoapMessage *msg,
        ICalProperty *prop;
        const gchar *text;
 
-       e_ews_message_start_item_change (
+       e_ews_request_start_item_change (
                msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
                convert_data->item_id, convert_data->change_key, 0);
 
@@ -2018,13 +2018,13 @@ convert_vjournal_component_to_updatexml (ESoapMessage *msg,
        /* Categories */
        convert_component_categories_to_updatexml (convert_data->comp, msg, "Message");
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (msg);
 
        return TRUE;
 }
 
 gboolean
-e_cal_backend_ews_convert_component_to_updatexml (ESoapMessage *msg,
+e_cal_backend_ews_convert_component_to_updatexml (ESoapRequest *request,
                                                  gpointer user_data,
                                                  GError **error)
 {
@@ -2114,52 +2114,52 @@ e_cal_backend_ews_rid_to_index (ICalTimezone *timezone,
 }
 
 gboolean
-e_cal_backend_ews_clear_reminder_is_set (ESoapMessage *msg,
+e_cal_backend_ews_clear_reminder_is_set (ESoapRequest *request,
                                         gpointer user_data,
                                         GError **error)
 {
        EwsCalendarConvertData *convert_data = user_data;
 
-       e_ews_message_start_item_change (
+       e_ews_request_start_item_change (
                msg,
                convert_data->change_type,
                convert_data->item_id,
                convert_data->change_key,
                convert_data->index);
 
-       e_ews_message_start_set_item_field (msg, "ReminderIsSet","item", "CalendarItem");
+       e_ews_request_start_set_item_field (msg, "ReminderIsSet","item", "CalendarItem");
 
-       e_ews_message_write_string_parameter (msg, "ReminderIsSet", NULL, "false");
+       e_ews_request_write_string_parameter (msg, "ReminderIsSet", NULL, "false");
 
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_end_set_item_field (msg);
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (msg);
 
        return TRUE;
 }
 
 gboolean
-e_cal_backend_ews_prepare_set_free_busy_status (ESoapMessage *msg,
+e_cal_backend_ews_prepare_set_free_busy_status (ESoapRequest *request,
                                                gpointer user_data,
                                                GError **error)
 {
        EwsCalendarConvertData *data = user_data;
 
-       e_ews_message_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM, data->item_id, data->change_key, 0);
+       e_ews_request_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM, data->item_id, data->change_key, 0);
 
-       e_ews_message_start_set_item_field (msg, "LegacyFreeBusyStatus", "calendar", "CalendarItem");
+       e_ews_request_start_set_item_field (msg, "LegacyFreeBusyStatus", "calendar", "CalendarItem");
 
-       e_ews_message_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Free");
+       e_ews_request_write_string_parameter (msg, "LegacyFreeBusyStatus", NULL, "Free");
 
-       e_ews_message_end_set_item_field (msg);
+       e_ews_request_end_set_item_field (msg);
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (msg);
 
        return TRUE;
 }
 
 gboolean
-e_cal_backend_ews_prepare_accept_item_request (ESoapMessage *msg,
+e_cal_backend_ews_prepare_accept_item_request (ESoapRequest *request,
                                               gpointer user_data,
                                               GError **error)
 {
@@ -2173,19 +2173,19 @@ e_cal_backend_ews_prepare_accept_item_request (ESoapMessage *msg,
         * Prepare AcceptItem node in the SOAP message */
 
        if (response_type && !g_ascii_strcasecmp (response_type, "ACCEPTED"))
-               e_soap_message_start_element (msg, "AcceptItem", NULL, NULL);
+               e_soap_request_start_element (msg, "AcceptItem", NULL, NULL);
        else if (response_type && !g_ascii_strcasecmp (response_type, "DECLINED"))
-               e_soap_message_start_element (msg, "DeclineItem", NULL, NULL);
+               e_soap_request_start_element (msg, "DeclineItem", NULL, NULL);
        else
-               e_soap_message_start_element (msg, "TentativelyAcceptItem", NULL, NULL);
+               e_soap_request_start_element (msg, "TentativelyAcceptItem", NULL, NULL);
 
-       e_soap_message_start_element (msg, "ReferenceItemId", NULL, NULL);
-       e_soap_message_add_attribute (msg, "Id", data->item_id, NULL, NULL);
-       e_soap_message_add_attribute (msg, "ChangeKey", data->change_key, NULL, NULL);
-       e_soap_message_end_element (msg); /* "ReferenceItemId" */
+       e_soap_request_start_element (msg, "ReferenceItemId", NULL, NULL);
+       e_soap_request_add_attribute (msg, "Id", data->item_id, NULL, NULL);
+       e_soap_request_add_attribute (msg, "ChangeKey", data->change_key, NULL, NULL);
+       e_soap_request_end_element (msg); /* "ReferenceItemId" */
 
        /* end of "AcceptItem" */
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (msg);
 
        return TRUE;
 }
diff --git a/src/EWS/calendar/e-cal-backend-ews-utils.h b/src/EWS/calendar/e-cal-backend-ews-utils.h
index 7b84911c..7b2c13b7 100644
--- a/src/EWS/calendar/e-cal-backend-ews-utils.h
+++ b/src/EWS/calendar/e-cal-backend-ews-utils.h
@@ -41,12 +41,12 @@ typedef struct {
 const gchar *e_ews_collect_organizer (ICalComponent *comp);
 void e_ews_collect_attendees (ICalComponent *comp, GSList **required, GSList **optional, GSList **resource, 
gboolean *out_rsvp_requested);
 
-void ewscal_set_timezone (ESoapMessage *msg, const gchar *name, EEwsCalendarTimeZoneDefinition *tzd);
-void ewscal_set_meeting_timezone (ESoapMessage *msg, ICalTimezone *icaltz, ICalComponent *icomp);
-void ewscal_set_reccurence (ESoapMessage *msg, ICalProperty *rrule, ICalTime *dtstart);
-void ewscal_set_reccurence_exceptions (ESoapMessage *msg, ICalComponent *comp);
+void ewscal_set_timezone (ESoapRequest *request, const gchar *name, EEwsCalendarTimeZoneDefinition *tzd);
+void ewscal_set_meeting_timezone (ESoapRequest *request, ICalTimezone *icaltz, ICalComponent *icomp);
+void ewscal_set_reccurence (ESoapRequest *request, ICalProperty *rrule, ICalTime *dtstart);
+void ewscal_set_reccurence_exceptions (ESoapRequest *request, ICalComponent *comp);
 gchar *e_ews_extract_attachment_id_from_uri (const gchar *uri);
-void ews_set_alarm (ESoapMessage *msg, ECalComponent *comp, ETimezoneCache *timezone_cache, ICalComponent 
*vcalendar, gboolean with_due_by);
+void ews_set_alarm (ESoapRequest *request, ECalComponent *comp, ETimezoneCache *timezone_cache, 
ICalComponent *vcalendar, gboolean with_due_by);
 gint ews_get_alarm (ECalComponent *comp);
 void e_ews_clean_icomponent (ICalComponent *icomp);
 
@@ -55,11 +55,11 @@ const gchar *e_cal_backend_ews_tz_util_get_ical_equivalent (const gchar *msdn_tz
 void e_cal_backend_ews_populate_windows_zones (void);
 void e_cal_backend_ews_unref_windows_zones (void);
 
-gboolean e_cal_backend_ews_convert_calcomp_to_xml (ESoapMessage *msg, gpointer user_data, GError **error);
-gboolean e_cal_backend_ews_convert_component_to_updatexml (ESoapMessage *msg, gpointer user_data, GError 
**error);
-gboolean e_cal_backend_ews_clear_reminder_is_set (ESoapMessage *msg, gpointer user_data, GError **error);
-gboolean e_cal_backend_ews_prepare_set_free_busy_status (ESoapMessage *msg,gpointer user_data, GError 
**error);
-gboolean e_cal_backend_ews_prepare_accept_item_request (ESoapMessage *msg, gpointer user_data, GError 
**error);
+gboolean e_cal_backend_ews_convert_calcomp_to_xml (ESoapRequest *request, gpointer user_data, GError 
**error);
+gboolean e_cal_backend_ews_convert_component_to_updatexml (ESoapRequest *request, gpointer user_data, GError 
**error);
+gboolean e_cal_backend_ews_clear_reminder_is_set (ESoapRequest *request, gpointer user_data, GError **error);
+gboolean e_cal_backend_ews_prepare_set_free_busy_status (ESoapRequest *request,gpointer user_data, GError 
**error);
+gboolean e_cal_backend_ews_prepare_accept_item_request (ESoapRequest *request, gpointer user_data, GError 
**error);
 
 guint e_cal_backend_ews_rid_to_index (ICalTimezone *timezone, const gchar *rid, ICalComponent *comp, GError 
**error);
 
diff --git a/src/EWS/camel/camel-ews-folder.c b/src/EWS/camel/camel-ews-folder.c
index 126fb36a..66087cf3 100644
--- a/src/EWS/camel/camel-ews-folder.c
+++ b/src/EWS/camel/camel-ews-folder.c
@@ -27,7 +27,7 @@ which needs to be better organized via functions */
 #include "common/e-ews-camel-common.h"
 #include "common/e-ews-connection.h"
 #include "common/e-ews-item-change.h"
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 
 #include "camel-ews-folder.h"
 #include "camel-ews-private.h"
@@ -831,7 +831,7 @@ camel_ews_folder_get_message (CamelFolder *folder,
        g_free (mime_dir);
 
        /* The mime_content actually contains the *filename*, due to the
-        * streaming hack in ESoapMessage */
+        * streaming hack in ESoapResponse */
        mime_content = e_ews_item_get_mime_content (items->data);
        if (!mime_content)
                goto exit;
@@ -1263,7 +1263,7 @@ ews_folder_search_free (CamelFolder *folder,
 /********************* folder functions*************************/
 
 static gboolean
-msg_update_flags (ESoapMessage *msg,
+msg_update_flags (ESoapRequest *request,
                   gpointer user_data,
                  GError **error)
 {
@@ -1291,7 +1291,7 @@ msg_update_flags (ESoapMessage *msg,
                mi_flags = camel_message_info_get_flags (mi);
                flags_changed = camel_ews_message_info_get_server_flags (emi) ^ mi_flags;
 
-               e_ews_message_start_item_change (
+               e_ews_request_start_item_change (
                        msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
                        camel_message_info_get_uid (mi), camel_ews_message_info_get_change_key (emi), 0);
                if (flags_changed & CAMEL_MESSAGE_FLAGGED) {
@@ -1302,33 +1302,33 @@ msg_update_flags (ESoapMessage *msg,
                        else
                                flag = "Normal";
 
-                       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+                       e_soap_request_start_element (msg, "SetItemField", NULL, NULL);
 
-                       e_soap_message_start_element (msg, "FieldURI", NULL, NULL);
-                       e_soap_message_add_attribute (msg, "FieldURI", "item:Importance", NULL, NULL);
-                       e_soap_message_end_element (msg);
+                       e_soap_request_start_element (msg, "FieldURI", NULL, NULL);
+                       e_soap_request_add_attribute (msg, "FieldURI", "item:Importance", NULL, NULL);
+                       e_soap_request_end_element (msg);
 
-                       e_soap_message_start_element (msg, "Message", NULL, NULL);
+                       e_soap_request_start_element (msg, "Message", NULL, NULL);
 
-                       e_ews_message_write_string_parameter (msg, "Importance", NULL, flag);
+                       e_ews_request_write_string_parameter (msg, "Importance", NULL, flag);
 
-                       e_soap_message_end_element (msg); /* Message */
-                       e_soap_message_end_element (msg); /* SetItemField */
+                       e_soap_request_end_element (msg); /* Message */
+                       e_soap_request_end_element (msg); /* SetItemField */
                }
 
                if (flags_changed & CAMEL_MESSAGE_SEEN) {
-                       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+                       e_soap_request_start_element (msg, "SetItemField", NULL, NULL);
 
-                       e_soap_message_start_element (msg, "FieldURI", NULL, NULL);
-                       e_soap_message_add_attribute (msg, "FieldURI", "message:IsRead", NULL, NULL);
-                       e_soap_message_end_element (msg);
+                       e_soap_request_start_element (msg, "FieldURI", NULL, NULL);
+                       e_soap_request_add_attribute (msg, "FieldURI", "message:IsRead", NULL, NULL);
+                       e_soap_request_end_element (msg);
 
-                       e_soap_message_start_element (msg, "Message", NULL, NULL);
-                       e_ews_message_write_string_parameter (msg, "IsRead", NULL,
+                       e_soap_request_start_element (msg, "Message", NULL, NULL);
+                       e_ews_request_write_string_parameter (msg, "IsRead", NULL,
                                (mi_flags & CAMEL_MESSAGE_SEEN) ? "true" : "false");
 
-                       e_soap_message_end_element (msg); /* Message */
-                       e_soap_message_end_element (msg); /* SetItemField */
+                       e_soap_request_end_element (msg); /* Message */
+                       e_soap_request_end_element (msg); /* SetItemField */
                }
                /* Ick Ick Ick. Why in hell is there a field in the database for the Icon
                 * *anyway*? Why isn't there a better place for forwarded/answered status? */
@@ -1340,7 +1340,7 @@ msg_update_flags (ESoapMessage *msg,
                        if (mi_flags & CAMEL_MESSAGE_FORWARDED)
                                icon = 0x106;
 
-                       e_ews_message_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x1080, 
icon);
+                       e_ews_request_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x1080, 
icon);
                }
 
                /* now update the Categories */
@@ -1348,33 +1348,33 @@ msg_update_flags (ESoapMessage *msg,
                if (user_flags) {
                        GSList *link;
 
-                       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+                       e_soap_request_start_element (msg, "SetItemField", NULL, NULL);
 
-                       e_soap_message_start_element (msg, "FieldURI", NULL, NULL);
-                       e_soap_message_add_attribute (msg, "FieldURI", "item:Categories", NULL, NULL);
-                       e_soap_message_end_element (msg);
+                       e_soap_request_start_element (msg, "FieldURI", NULL, NULL);
+                       e_soap_request_add_attribute (msg, "FieldURI", "item:Categories", NULL, NULL);
+                       e_soap_request_end_element (msg);
 
-                       e_soap_message_start_element (msg, "Message", NULL, NULL);
-                       e_soap_message_start_element (msg, "Categories", NULL, NULL);
+                       e_soap_request_start_element (msg, "Message", NULL, NULL);
+                       e_soap_request_start_element (msg, "Categories", NULL, NULL);
 
                        for (link = user_flags; link; link = g_slist_next (link)) {
                                const gchar *user_flag = link->data;
 
-                               e_ews_message_write_string_parameter (msg, "String", NULL, user_flag);
+                               e_ews_request_write_string_parameter (msg, "String", NULL, user_flag);
                        }
 
-                       e_soap_message_end_element (msg); /* Categories */
-                       e_soap_message_end_element (msg); /* Message */
-                       e_soap_message_end_element (msg); /* SetItemField */
+                       e_soap_request_end_element (msg); /* Categories */
+                       e_soap_request_end_element (msg); /* Message */
+                       e_soap_request_end_element (msg); /* SetItemField */
                } else {
-                       e_ews_message_add_delete_item_field (msg, "Categories", "item");
+                       e_ews_request_add_delete_item_field (msg, "Categories", "item");
                }
 
                g_slist_free_full (user_flags, g_free);
 
                ews_utils_update_followup_flags (msg, mi);
 
-               e_ews_message_end_item_change (msg);
+               e_ews_request_end_item_change (msg);
 
                camel_message_info_set_folder_flagged (mi, FALSE);
 
@@ -1388,7 +1388,7 @@ msg_update_flags (ESoapMessage *msg,
 }
 
 static gboolean
-ews_suppress_read_receipt (ESoapMessage *msg,
+ews_suppress_read_receipt (ESoapRequest *request,
                           gpointer user_data,
                           GError **error)
 {
@@ -1411,12 +1411,12 @@ ews_suppress_read_receipt (ESoapMessage *msg,
 
                /* There was requested a read-receipt, but it is handled by evolution-ews,
                   thus prevent an automatic send of it by the server */
-               e_soap_message_start_element (msg, "SuppressReadReceipt", NULL, NULL);
-               e_soap_message_start_element (msg, "ReferenceItemId", NULL, NULL);
-               e_soap_message_add_attribute (msg, "Id", camel_message_info_get_uid (mi), NULL, NULL);
-               e_soap_message_add_attribute (msg, "ChangeKey", camel_ews_message_info_get_change_key 
(CAMEL_EWS_MESSAGE_INFO (mi)), NULL, NULL);
-               e_soap_message_end_element (msg); /* "ReferenceItemId" */
-               e_soap_message_end_element (msg); /* SuppressReadReceipt */
+               e_soap_request_start_element (msg, "SuppressReadReceipt", NULL, NULL);
+               e_soap_request_start_element (msg, "ReferenceItemId", NULL, NULL);
+               e_soap_request_add_attribute (msg, "Id", camel_message_info_get_uid (mi), NULL, NULL);
+               e_soap_request_add_attribute (msg, "ChangeKey", camel_ews_message_info_get_change_key 
(CAMEL_EWS_MESSAGE_INFO (mi)), NULL, NULL);
+               e_soap_request_end_element (msg); /* "ReferenceItemId" */
+               e_soap_request_end_element (msg); /* SuppressReadReceipt */
 
                camel_message_info_set_flags (mi, CAMEL_EWS_MESSAGE_MSGFLAG_RN_PENDING, 0);
 
diff --git a/src/EWS/camel/camel-ews-store.c b/src/EWS/camel/camel-ews-store.c
index 205ea02b..24c1b623 100644
--- a/src/EWS/camel/camel-ews-store.c
+++ b/src/EWS/camel/camel-ews-store.c
@@ -22,7 +22,7 @@
 
 #include "common/camel-ews-settings.h"
 #include "common/e-ews-item-change.h"
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 #include "common/e-ews-oof-settings.h"
 
 #include "camel-ews-folder.h"
@@ -3152,27 +3152,27 @@ struct _rename_cb_data {
 };
 
 static gboolean
-rename_folder_cb (ESoapMessage *msg,
+rename_folder_cb (ESoapRequest *request,
                   gpointer user_data,
                  GError **error)
 {
        struct _rename_cb_data *rename_data = user_data;
 
-       e_ews_message_start_item_change (
-               msg, E_EWS_ITEMCHANGE_TYPE_FOLDER,
+       e_ews_request_start_item_change (
+               request, E_EWS_ITEMCHANGE_TYPE_FOLDER,
                rename_data->folder_id, rename_data->change_key, 0);
-       e_soap_message_start_element (msg, "SetFolderField", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (
-               msg, "FieldURI", NULL, NULL,
+       e_soap_request_start_element (request, "SetFolderField", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (
+               request, "FieldURI", NULL, NULL,
                "FieldURI", "folder:DisplayName");
 
-       e_soap_message_start_element (msg, "Folder", NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "DisplayName", NULL, rename_data->display_name);
-       e_soap_message_end_element (msg); /* Folder */
+       e_soap_request_start_element (request, "Folder", NULL, NULL);
+       e_ews_request_write_string_parameter (request, "DisplayName", NULL, rename_data->display_name);
+       e_soap_request_end_element (request); /* Folder */
 
-       e_soap_message_end_element (msg); /* SetFolderField */
+       e_soap_request_end_element (request); /* SetFolderField */
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (request);
 
        return TRUE;
 }
diff --git a/src/EWS/camel/camel-ews-utils.c b/src/EWS/camel/camel-ews-utils.c
index 736efd2d..eefd56d1 100644
--- a/src/EWS/camel/camel-ews-utils.c
+++ b/src/EWS/camel/camel-ews-utils.c
@@ -20,7 +20,7 @@
 #include "common/camel-ews-settings.h"
 #include "common/e-ews-camel-common.h"
 #include "common/e-ews-item-change.h"
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 
 #include "camel-ews-utils.h"
 
@@ -518,7 +518,7 @@ camel_ews_utils_decode_category_name (const gchar *flag)
 /* free with g_slist_free_full (flags, g_free);
    the lists' members are values for the String xml element. */
 GSList *
-ews_utils_gather_server_user_flags (ESoapMessage *msg,
+ews_utils_gather_server_user_flags (ESoapRequest *request,
                                    CamelMessageInfo *mi)
 {
        GSList *out_user_flags = NULL;
@@ -1291,7 +1291,7 @@ camel_ews_utils_get_host_name (CamelSettings *settings)
 }
 
 void
-ews_utils_update_followup_flags (ESoapMessage *msg,
+ews_utils_update_followup_flags (ESoapRequest *request,
                                 CamelMessageInfo *mi)
 {
        const gchar *followup, *completed, *dueby;
@@ -1315,66 +1315,66 @@ ews_utils_update_followup_flags (ESoapMessage *msg,
 
        if (followup) {
                /* PidTagFlagStatus */
-               e_ews_message_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x1090,
+               e_ews_request_add_set_item_field_extended_tag_int (request, NULL, "Message", 0x1090,
                        completed_tt != (time_t) 0 ? 0x01 /* followupComplete */: 0x02 /* followupFlagged */);
 
                /* PidLidFlagRequest */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_string (msg, NULL, "Message", 
"Common", 0x8530, followup);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_string (request, NULL, "Message", 
"Common", 0x8530, followup);
 
                /* PidTagToDoItemFlags */
-               e_ews_message_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x0e2b, 1);
+               e_ews_request_add_set_item_field_extended_tag_int (request, NULL, "Message", 0x0e2b, 1);
 
                if (completed_tt == (time_t) 0 && dueby_tt == (time_t) 0) {
                        time_t now_tt = time (NULL);
 
                        /* PidLidTaskStatus */
-                       e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, 
"Message", "Task", 0x8101, 0);
+                       e_ews_request_add_set_item_field_extended_distinguished_tag_int (request, NULL, 
"Message", "Task", 0x8101, 0);
 
                        /* PidLidPercentComplete */
-                       e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, 
"Message", "Task", 0x8102, 0.0);
+                       e_ews_request_add_set_item_field_extended_distinguished_tag_double (request, NULL, 
"Message", "Task", 0x8102, 0.0);
 
                        /* PidLidTaskStartDate */
-                       e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, 
"Message", "Task", 0x8104, now_tt);
+                       e_ews_request_add_set_item_field_extended_distinguished_tag_time (request, NULL, 
"Message", "Task", 0x8104, now_tt);
 
                        /* PidLidTaskComplete */
-                       e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, 
"Message", "Task", 0x811c, FALSE);
+                       e_ews_request_add_set_item_field_extended_distinguished_tag_boolean (request, NULL, 
"Message", "Task", 0x811c, FALSE);
                }
        } else {
                /* PidTagFlagStatus */
-               e_ews_message_add_delete_item_field_extended_tag (msg, 0x1090, E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_tag (request, 0x1090, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidTagFlagCompleteTime */
-               e_ews_message_add_delete_item_field_extended_tag (msg, 0x1091, E_EWS_MESSAGE_DATA_TYPE_TIME);
+               e_ews_request_add_delete_item_field_extended_tag (request, 0x1091, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
 
                /* PidTagToDoItemFlags */
-               e_ews_message_add_delete_item_field_extended_tag (msg, 0x0e2b, E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_tag (request, 0x0e2b, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidTagFollowupIcon */
-               e_ews_message_add_delete_item_field_extended_tag (msg, 0x1095, E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_tag (request, 0x1095, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidLidFlagRequest */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Common", 0x8530, 
E_EWS_MESSAGE_DATA_TYPE_STRING);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Common", 0x8530, 
E_EWS_MESSAGE_DATA_TYPE_STRING);
 
                /* PidLidFlagString */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Common", 0x85c0, 
E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Common", 0x85c0, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidLidTaskStatus */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8101, 
E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x8101, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidLidPercentComplete */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8102, 
E_EWS_MESSAGE_DATA_TYPE_DOUBLE);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x8102, 
E_EWS_MESSAGE_DATA_TYPE_DOUBLE);
 
                /* PidLidTaskStartDate */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8104, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x8104, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
 
                /* PidLidTaskDueDate */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8105, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x8105, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
 
                /* PidLidTaskDateCompleted */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x810f, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x810f, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
 
                /* PidLidTaskComplete */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x811c, 
E_EWS_MESSAGE_DATA_TYPE_BOOLEAN);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x811c, 
E_EWS_MESSAGE_DATA_TYPE_BOOLEAN);
        }
 
        if (followup && completed_tt != (time_t) 0) {
@@ -1382,22 +1382,22 @@ ews_utils_update_followup_flags (ESoapMessage *msg,
                completed_tt = completed_tt - (completed_tt % 60);
 
                /* PidTagFlagCompleteTime */
-               e_ews_message_add_set_item_field_extended_tag_time (msg, NULL, "Message", 0x1091, 
completed_tt);
+               e_ews_request_add_set_item_field_extended_tag_time (request, NULL, "Message", 0x1091, 
completed_tt);
 
                /* PidTagFollowupIcon */
-               e_ews_message_add_delete_item_field_extended_tag (msg, 0x1095, E_EWS_MESSAGE_DATA_TYPE_INT);
+               e_ews_request_add_delete_item_field_extended_tag (request, 0x1095, 
E_EWS_MESSAGE_DATA_TYPE_INT);
 
                /* PidLidTaskDateCompleted */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", 
"Task", 0x810f, completed_tt);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_time (request, NULL, "Message", 
"Task", 0x810f, completed_tt);
 
                /* PidLidTaskStatus */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, "Message", 
"Task", 0x8101, 2);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_int (request, NULL, "Message", 
"Task", 0x8101, 2);
 
                /* PidLidPercentComplete */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, "Message", 
"Task", 0x8102, 1.0);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_double (request, NULL, "Message", 
"Task", 0x8102, 1.0);
 
                /* PidLidTaskComplete */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, "Message", 
"Task", 0x811c, TRUE);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_boolean (request, NULL, 
"Message", "Task", 0x811c, TRUE);
        }
 
        if (followup && dueby_tt != (time_t) 0 && completed_tt == (time_t) 0) {
@@ -1407,22 +1407,22 @@ ews_utils_update_followup_flags (ESoapMessage *msg,
                        now_tt = dueby_tt - 1;
 
                /* PidLidTaskStatus */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, "Message", 
"Task", 0x8101, 0);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_int (request, NULL, "Message", 
"Task", 0x8101, 0);
 
                /* PidLidPercentComplete */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, "Message", 
"Task", 0x8102, 0.0);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_double (request, NULL, "Message", 
"Task", 0x8102, 0.0);
 
                /* PidLidTaskStartDate */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", 
"Task", 0x8104, now_tt);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_time (request, NULL, "Message", 
"Task", 0x8104, now_tt);
 
                /* PidLidTaskDueDate */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", 
"Task", 0x8105, dueby_tt);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_time (request, NULL, "Message", 
"Task", 0x8105, dueby_tt);
 
                /* PidLidTaskComplete */
-               e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, "Message", 
"Task", 0x811c, FALSE);
+               e_ews_request_add_set_item_field_extended_distinguished_tag_boolean (request, NULL, 
"Message", "Task", 0x811c, FALSE);
        } else if (followup && dueby_tt == (time_t) 0) {
                /* PidLidTaskDueDate */
-               e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8105, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
+               e_ews_request_add_delete_item_field_extended_distinguished_tag (request, "Task", 0x8105, 
E_EWS_MESSAGE_DATA_TYPE_TIME);
        }
 }
 gboolean
diff --git a/src/EWS/camel/camel-ews-utils.h b/src/EWS/camel/camel-ews-utils.h
index db0e6a17..067db64f 100644
--- a/src/EWS/camel/camel-ews-utils.h
+++ b/src/EWS/camel/camel-ews-utils.h
@@ -66,9 +66,9 @@ void          camel_ews_utils_sync_updated_items
                                                 CamelFolderChangeInfo *change_info,
                                                 GCancellable *cancellable);
 GSList *       ews_utils_gather_server_user_flags
-                                               (ESoapMessage *msg,
+                                               (ESoapRequest *request,
                                                 CamelMessageInfo *mi);
-void           ews_utils_update_followup_flags (ESoapMessage *msg,
+void           ews_utils_update_followup_flags (ESoapRequest *request,
                                                 CamelMessageInfo *mi);
 gchar *                camel_ews_utils_get_host_name   (CamelSettings *settings);
 gboolean       camel_ews_utils_delete_folders_from_summary_recursive
diff --git a/src/EWS/common/CMakeLists.txt b/src/EWS/common/CMakeLists.txt
index 40ba90f8..0cf975b3 100644
--- a/src/EWS/common/CMakeLists.txt
+++ b/src/EWS/common/CMakeLists.txt
@@ -9,7 +9,7 @@ set(SOURCES
        e-ews-calendar-utils.h
        e-ews-camel-common.c
        e-ews-camel-common.h
-       e-ews-connection.c
+       #e-ews-connection.c                     
        e-ews-connection.h
        e-ews-connection-utils.c
        e-ews-connection-utils.h
@@ -21,19 +21,19 @@ set(SOURCES
        e-ews-item.h
        e-ews-item-change.c
        e-ews-item-change.h
-       e-ews-message.c
-       e-ews-message.h
        e-ews-notification.c
        e-ews-notification.h
        e-ews-oof-settings.c
        e-ews-query-to-restriction.c
        e-ews-query-to-restriction.h
+       e-ews-request.c
+       e-ews-request.h
        e-oauth2-service-office365.c
        e-oauth2-service-office365.h
        e-soup-auth-negotiate.c
        e-soup-auth-negotiate.h
-       e-soap-message.c
-       e-soap-message.h
+       e-soap-request.c
+       e-soap-request.h
        e-soap-response.c
        e-soap-response.h
        e-source-ews-folder.c
diff --git a/src/EWS/common/e-ews-calendar-utils.c b/src/EWS/common/e-ews-calendar-utils.c
index 864f5a80..49a900d2 100644
--- a/src/EWS/common/e-ews-calendar-utils.c
+++ b/src/EWS/common/e-ews-calendar-utils.c
@@ -10,7 +10,7 @@
 #include <libecal/libecal.h>
 #include <calendar/gui/calendar-config.h>
 
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 #include "ews-errors.h"
 
 #include "e-ews-calendar-utils.h"
@@ -200,7 +200,7 @@ number_to_weekday (gint num)
 }
 
 static void
-ewscal_add_availability_rrule (ESoapMessage *msg,
+ewscal_add_availability_rrule (ESoapRequest *request,
                                ICalProperty *prop)
 {
        ICalRecurrence *recur = i_cal_property_get_rrule (prop);
@@ -215,39 +215,39 @@ ewscal_add_availability_rrule (ESoapMessage *msg,
 
        /* expected value is 1..5, inclusive */
        snprintf (buffer, 16, "%d", dayorder);
-       e_ews_message_write_string_parameter (msg, "DayOrder", NULL, buffer);
+       e_ews_request_write_string_parameter (request, "DayOrder", NULL, buffer);
 
        snprintf (buffer, 16, "%d", i_cal_recurrence_get_by_month (recur, 0));
-       e_ews_message_write_string_parameter (msg, "Month", NULL, buffer);
+       e_ews_request_write_string_parameter (request, "Month", NULL, buffer);
 
-       e_ews_message_write_string_parameter (msg, "DayOfWeek", NULL, number_to_weekday 
(i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (recur, 0))));
+       e_ews_request_write_string_parameter (request, "DayOfWeek", NULL, number_to_weekday 
(i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (recur, 0))));
 
        g_clear_object (&recur);
 }
 
 static void
-ewscal_add_availability_default_timechange (ESoapMessage *msg)
+ewscal_add_availability_default_timechange (ESoapRequest *request)
 {
 
-       e_soap_message_start_element (msg, "StandardTime", NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "Bias", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "Time", NULL, "00:00:00");
-       e_ews_message_write_string_parameter (msg, "DayOrder", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "Month", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "DayOfWeek", NULL, "Sunday");
-       e_soap_message_end_element (msg);
-
-       e_soap_message_start_element (msg, "DaylightTime", NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "Bias", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "Time", NULL, "00:00:00");
-       e_ews_message_write_string_parameter (msg, "DayOrder", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "Month", NULL, "0");
-       e_ews_message_write_string_parameter (msg, "DayOfWeek", NULL, "Sunday");
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "StandardTime", NULL, NULL);
+       e_ews_request_write_string_parameter (request, "Bias", NULL, "0");
+       e_ews_request_write_string_parameter (request, "Time", NULL, "00:00:00");
+       e_ews_request_write_string_parameter (request, "DayOrder", NULL, "0");
+       e_ews_request_write_string_parameter (request, "Month", NULL, "0");
+       e_ews_request_write_string_parameter (request, "DayOfWeek", NULL, "Sunday");
+       e_soap_request_end_element (request);
+
+       e_soap_request_start_element (request, "DaylightTime", NULL, NULL);
+       e_ews_request_write_string_parameter (request, "Bias", NULL, "0");
+       e_ews_request_write_string_parameter (request, "Time", NULL, "00:00:00");
+       e_ews_request_write_string_parameter (request, "DayOrder", NULL, "0");
+       e_ews_request_write_string_parameter (request, "Month", NULL, "0");
+       e_ews_request_write_string_parameter (request, "DayOfWeek", NULL, "Sunday");
+       e_soap_request_end_element (request);
 }
 
 static void
-ewscal_add_availability_timechange (ESoapMessage *msg,
+ewscal_add_availability_timechange (ESoapRequest *request,
                                     ICalComponent *comp,
                                     gint baseoffs)
 {
@@ -262,7 +262,7 @@ ewscal_add_availability_timechange (ESoapMessage *msg,
                utcoffs = -i_cal_property_get_tzoffsetto (prop) / 60;
                utcoffs -= baseoffs;
                snprintf (buffer, 16, "%d", utcoffs);
-               e_ews_message_write_string_parameter (msg, "Bias", NULL, buffer);
+               e_ews_request_write_string_parameter (request, "Bias", NULL, buffer);
                g_object_unref (prop);
        }
 
@@ -270,20 +270,20 @@ ewscal_add_availability_timechange (ESoapMessage *msg,
        if (prop) {
                dtstart = i_cal_property_get_dtstart (prop);
                snprintf (buffer, 16, "%02d:%02d:%02d", i_cal_time_get_hour (dtstart), i_cal_time_get_minute 
(dtstart), i_cal_time_get_second (dtstart));
-               e_ews_message_write_string_parameter (msg, "Time", NULL, buffer);
+               e_ews_request_write_string_parameter (request, "Time", NULL, buffer);
                g_object_unref (dtstart);
                g_object_unref (prop);
        }
 
        prop = i_cal_component_get_first_property (comp, I_CAL_RRULE_PROPERTY);
        if (prop) {
-               ewscal_add_availability_rrule (msg, prop);
+               ewscal_add_availability_rrule (request, prop);
                g_object_unref (prop);
        }
 }
 
 static void
-ewscal_set_availability_timezone (ESoapMessage *msg,
+ewscal_set_availability_timezone (ESoapRequest *request,
                                   ICalTimezone *icaltz)
 {
        ICalComponent *comp;
@@ -305,7 +305,7 @@ ewscal_set_availability_timezone (ESoapMessage *msg,
        }
 
        /*TimeZone is the root element of GetUserAvailabilityRequest*/
-       e_soap_message_start_element (msg, "TimeZone", NULL, NULL);
+       e_soap_request_start_element (request, "TimeZone", NULL, NULL);
 
        /* Fetch the timezone offsets for the standard (or only) zone.
         * Negate it, because Exchange does it backwards */
@@ -327,24 +327,24 @@ ewscal_set_availability_timezone (ESoapMessage *msg,
         * to the offset of the Standard zone, and the Offset in the Standard
         * zone to zero. So try to avoid problems by doing the same. */
        offset = g_strdup_printf ("%d", std_utcoffs);
-       e_ews_message_write_string_parameter (msg, "Bias", NULL, offset);
+       e_ews_request_write_string_parameter (request, "Bias", NULL, offset);
        g_free (offset);
 
        if (xdaylight) {
                /* Standard */
-               e_soap_message_start_element (msg, "StandardTime", NULL, NULL);
-               ewscal_add_availability_timechange (msg, xstd, std_utcoffs);
-               e_soap_message_end_element (msg); /* "StandardTime" */
+               e_soap_request_start_element (request, "StandardTime", NULL, NULL);
+               ewscal_add_availability_timechange (request, xstd, std_utcoffs);
+               e_soap_request_end_element (request); /* "StandardTime" */
 
                /* DayLight */
-               e_soap_message_start_element (msg, "DaylightTime", NULL, NULL);
-               ewscal_add_availability_timechange (msg, xdaylight, std_utcoffs);
-               e_soap_message_end_element (msg); /* "DaylightTime" */
+               e_soap_request_start_element (request, "DaylightTime", NULL, NULL);
+               ewscal_add_availability_timechange (request, xdaylight, std_utcoffs);
+               e_soap_request_end_element (request); /* "DaylightTime" */
        } else
                /* Set default values*/
-               ewscal_add_availability_default_timechange (msg);
+               ewscal_add_availability_default_timechange (request);
 
-       e_soap_message_end_element (msg); /* "TimeZone" */
+       e_soap_request_end_element (request); /* "TimeZone" */
 
        g_clear_object (&comp);
        g_clear_object (&xstd);
@@ -352,7 +352,7 @@ ewscal_set_availability_timezone (ESoapMessage *msg,
 }
 
 gboolean
-e_ews_cal_utils_prepare_free_busy_request (ESoapMessage *msg,
+e_ews_cal_utils_prepare_free_busy_request (ESoapRequest *request,
                                           gpointer user_data,
                                           GError **error)
 {
@@ -363,50 +363,50 @@ e_ews_cal_utils_prepare_free_busy_request (ESoapMessage *msg,
 
        g_return_val_if_fail (fbdata != NULL, FALSE);
 
-       ewscal_set_availability_timezone (msg, utc_zone);
+       ewscal_set_availability_timezone (request, utc_zone);
 
-       e_soap_message_start_element (msg, "MailboxDataArray", "messages", NULL);
+       e_soap_request_start_element (request, "MailboxDataArray", "messages", NULL);
 
        for (link = (GSList *) fbdata->user_mails; link; link = g_slist_next (link)) {
                const gchar *mail = link->data;
 
-               e_soap_message_start_element (msg, "MailboxData", NULL, NULL);
+               e_soap_request_start_element (request, "MailboxData", NULL, NULL);
 
-               e_soap_message_start_element (msg, "Email", NULL, NULL);
-               e_ews_message_write_string_parameter (msg, "Address", NULL, mail);
-               e_soap_message_end_element (msg); /* "Email" */
+               e_soap_request_start_element (request, "Email", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "Address", NULL, mail);
+               e_soap_request_end_element (request); /* "Email" */
 
-               e_ews_message_write_string_parameter (msg, "AttendeeType", NULL, "Required");
-               e_ews_message_write_string_parameter (msg, "ExcludeConflicts", NULL, "false");
+               e_ews_request_write_string_parameter (request, "AttendeeType", NULL, "Required");
+               e_ews_request_write_string_parameter (request, "ExcludeConflicts", NULL, "false");
 
-               e_soap_message_end_element (msg); /* "MailboxData" */
+               e_soap_request_end_element (request); /* "MailboxData" */
        }
 
-       e_soap_message_end_element (msg); /* "MailboxDataArray" */
+       e_soap_request_end_element (request); /* "MailboxDataArray" */
 
-       e_soap_message_start_element (msg, "FreeBusyViewOptions", NULL, NULL);
+       e_soap_request_start_element (request, "FreeBusyViewOptions", NULL, NULL);
 
        t_start = i_cal_time_new_from_timet_with_zone (fbdata->period_start, 0, utc_zone);
        t_end = i_cal_time_new_from_timet_with_zone (fbdata->period_end, 0, utc_zone);
 
-       e_soap_message_start_element (msg, "TimeWindow", NULL, NULL);
-       e_ews_cal_utils_set_time (msg, "StartTime", t_start, FALSE);
-       e_ews_cal_utils_set_time (msg, "EndTime", t_end, FALSE);
-       e_soap_message_end_element (msg); /* "TimeWindow" */
+       e_soap_request_start_element (request, "TimeWindow", NULL, NULL);
+       e_ews_cal_utils_set_time (request, "StartTime", t_start, FALSE);
+       e_ews_cal_utils_set_time (request, "EndTime", t_end, FALSE);
+       e_soap_request_end_element (request); /* "TimeWindow" */
 
        g_clear_object (&t_start);
        g_clear_object (&t_end);
 
-       e_ews_message_write_string_parameter (msg, "MergedFreeBusyIntervalInMinutes", NULL, "60");
-       e_ews_message_write_string_parameter (msg, "RequestedView", NULL, "DetailedMerged");
+       e_ews_request_write_string_parameter (request, "MergedFreeBusyIntervalInMinutes", NULL, "60");
+       e_ews_request_write_string_parameter (request, "RequestedView", NULL, "DetailedMerged");
 
-       e_soap_message_end_element (msg); /* "FreeBusyViewOptions" */
+       e_soap_request_end_element (request); /* "FreeBusyViewOptions" */
 
        return TRUE;
 }
 
 void
-e_ews_cal_utils_set_time (ESoapMessage *msg,
+e_ews_cal_utils_set_time (ESoapRequest *request,
                          const gchar *name,
                          ICalTime *tt,
                          gboolean with_timezone)
@@ -459,7 +459,7 @@ e_ews_cal_utils_set_time (ESoapMessage *msg,
                i_cal_time_get_second (tt),
                tz_ident ? tz_ident : "");
 
-       e_ews_message_write_string_parameter (msg, name, NULL, str);
+       e_ews_request_write_string_parameter (request, name, NULL, str);
 
        g_clear_object (&local_tt);
        g_free (tz_ident);
@@ -1210,13 +1210,13 @@ e_ews_cal_utils_convert_recurrence (ICalComponent *icomp,
 }
 
 static void
-e_ews_cal_utils_write_days_of_week (ESoapMessage *msg,
+e_ews_cal_utils_write_days_of_week (ESoapRequest *request,
                                    guint32 days_of_week)
 {
        GString *value;
        guint32 weekdays, weekenddays;
 
-       g_return_if_fail (E_IS_SOAP_MESSAGE (msg));
+       g_return_if_fail (E_IS_SOAP_REQUEST (request));
 
        if (days_of_week == E_EWS_RECURRENCE_DAYS_OF_WEEK_UNKNOWN)
                return;
@@ -1269,21 +1269,21 @@ e_ews_cal_utils_write_days_of_week (ESoapMessage *msg,
        }
 
        if (value->len) {
-               e_soap_message_start_element (msg, "DaysOfWeek", NULL, NULL);
-               e_soap_message_write_string (msg, value->str);
-               e_soap_message_end_element (msg); /* DaysOfWeek */
+               e_soap_request_start_element (request, "DaysOfWeek", NULL, NULL);
+               e_soap_request_write_string (request, value->str);
+               e_soap_request_end_element (request); /* DaysOfWeek */
        }
 
        g_string_free (value, TRUE);
 }
 
 static void
-e_ews_cal_utils_write_day_of_week_index (ESoapMessage *msg,
+e_ews_cal_utils_write_day_of_week_index (ESoapRequest *request,
                                         EEwsRecurrenceDayOfWeekIndex day_of_week_index)
 {
        const gchar *value = NULL;
 
-       g_return_if_fail (E_IS_SOAP_MESSAGE (msg));
+       g_return_if_fail (E_IS_SOAP_REQUEST (request));
 
        /* Do not localize, these are values used in XML */
        switch (day_of_week_index) {
@@ -1307,19 +1307,19 @@ e_ews_cal_utils_write_day_of_week_index (ESoapMessage *msg,
        }
 
        if (value) {
-               e_soap_message_start_element (msg, "DayOfWeekIndex", NULL, NULL);
-               e_soap_message_write_string (msg, value);
-               e_soap_message_end_element (msg); /* DayOfWeekIndex */
+               e_soap_request_start_element (request, "DayOfWeekIndex", NULL, NULL);
+               e_soap_request_write_string (request, value);
+               e_soap_request_end_element (request); /* DayOfWeekIndex */
        }
 }
 
 static void
-e_ews_cal_utils_write_month (ESoapMessage *msg,
+e_ews_cal_utils_write_month (ESoapRequest *request,
                             GDateMonth month)
 {
        const gchar *value = NULL;
 
-       g_return_if_fail (E_IS_SOAP_MESSAGE (msg));
+       g_return_if_fail (E_IS_SOAP_REQUEST (request));
 
        /* Do not localize, these are values used in XML */
        switch (month) {
@@ -1364,21 +1364,21 @@ e_ews_cal_utils_write_month (ESoapMessage *msg,
        }
 
        if (value) {
-               e_soap_message_start_element (msg, "Month", NULL, NULL);
-               e_soap_message_write_string (msg, value);
-               e_soap_message_end_element (msg); /* Month */
+               e_soap_request_start_element (request, "Month", NULL, NULL);
+               e_soap_request_write_string (request, value);
+               e_soap_request_end_element (request); /* Month */
        }
 }
 
 static void
-e_ews_cal_util_write_utc_date (ESoapMessage *msg,
+e_ews_cal_util_write_utc_date (ESoapRequest *request,
                               const gchar *name,
                               time_t utc_date)
 {
        ICalTime *itt;
        gchar *value;
 
-       g_return_if_fail (E_IS_SOAP_MESSAGE (msg));
+       g_return_if_fail (E_IS_SOAP_REQUEST (request));
        g_return_if_fail (name != NULL);
 
        itt = i_cal_time_new_from_timet_with_zone (utc_date, 1, i_cal_timezone_get_utc_timezone ());
@@ -1388,9 +1388,9 @@ e_ews_cal_util_write_utc_date (ESoapMessage *msg,
                i_cal_time_get_day (itt));
        g_clear_object (&itt);
 
-       e_soap_message_start_element (msg, name, NULL, NULL);
-       e_soap_message_write_string (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, name, NULL, NULL);
+       e_soap_request_write_string (request, value);
+       e_soap_request_end_element (request);
 
        g_free (value);
 }
@@ -1398,14 +1398,14 @@ e_ews_cal_util_write_utc_date (ESoapMessage *msg,
 /* Writes 'Recurrence' element into the @msg. Sets the @error only if the RRULE
    cannot be transformed into Recurrence */
 gboolean
-e_ews_cal_utils_set_recurrence (ESoapMessage *msg,
+e_ews_cal_utils_set_recurrence (ESoapRequest *request,
                                ICalComponent *comp,
                                gboolean server_satisfies_2013,
                                GError **error)
 {
        EEwsRecurrence recur;
 
-       g_return_val_if_fail (E_IS_SOAP_MESSAGE (msg), FALSE);
+       g_return_val_if_fail (E_IS_SOAP_REQUEST (request), FALSE);
        g_return_val_if_fail (comp != NULL, FALSE);
 
        memset (&recur, 0, sizeof (EEwsRecurrence));
@@ -1421,52 +1421,52 @@ e_ews_cal_utils_set_recurrence (ESoapMessage *msg,
                return TRUE;
        }
 
-       e_soap_message_start_element (msg, "Recurrence", NULL, NULL);
+       e_soap_request_start_element (request, "Recurrence", NULL, NULL);
 
        switch (recur.type) {
        case E_EWS_RECURRENCE_UNKNOWN:
                g_warn_if_reached ();
                break;
        case E_EWS_RECURRENCE_RELATIVE_YEARLY:
-               e_soap_message_start_element (msg, "RelativeYearlyRecurrence", NULL, NULL);
-               e_ews_cal_utils_write_days_of_week (msg, recur.recur.relative_yearly.days_of_week);
-               e_ews_cal_utils_write_day_of_week_index (msg, recur.recur.relative_yearly.day_of_week_index);
-               e_ews_cal_utils_write_month (msg, recur.recur.relative_yearly.month);
-               e_soap_message_end_element (msg); /* RelativeYearlyRecurrence */
+               e_soap_request_start_element (request, "RelativeYearlyRecurrence", NULL, NULL);
+               e_ews_cal_utils_write_days_of_week (request, recur.recur.relative_yearly.days_of_week);
+               e_ews_cal_utils_write_day_of_week_index (request, 
recur.recur.relative_yearly.day_of_week_index);
+               e_ews_cal_utils_write_month (request, recur.recur.relative_yearly.month);
+               e_soap_request_end_element (request); /* RelativeYearlyRecurrence */
                break;
        case E_EWS_RECURRENCE_ABSOLUTE_YEARLY:
-               e_soap_message_start_element (msg, "AbsoluteYearlyRecurrence", NULL, NULL);
-               e_soap_message_start_element (msg, "DayOfMonth", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.absolute_yearly.day_of_month);
-               e_soap_message_end_element (msg); /* DayOfMonth */
-               e_ews_cal_utils_write_month (msg, recur.recur.absolute_yearly.month);
-               e_soap_message_end_element (msg); /* AbsoluteYearlyRecurrence */
+               e_soap_request_start_element (request, "AbsoluteYearlyRecurrence", NULL, NULL);
+               e_soap_request_start_element (request, "DayOfMonth", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.absolute_yearly.day_of_month);
+               e_soap_request_end_element (request); /* DayOfMonth */
+               e_ews_cal_utils_write_month (request, recur.recur.absolute_yearly.month);
+               e_soap_request_end_element (request); /* AbsoluteYearlyRecurrence */
                break;
        case E_EWS_RECURRENCE_RELATIVE_MONTHLY:
-               e_soap_message_start_element (msg, "RelativeMonthlyRecurrence", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.relative_monthly.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_ews_cal_utils_write_days_of_week (msg, recur.recur.relative_monthly.days_of_week);
-               e_ews_cal_utils_write_day_of_week_index (msg, recur.recur.relative_monthly.day_of_week_index);
-               e_soap_message_end_element (msg); /* RelativeMonthlyRecurrence */
+               e_soap_request_start_element (request, "RelativeMonthlyRecurrence", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.relative_monthly.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_ews_cal_utils_write_days_of_week (request, recur.recur.relative_monthly.days_of_week);
+               e_ews_cal_utils_write_day_of_week_index (request, 
recur.recur.relative_monthly.day_of_week_index);
+               e_soap_request_end_element (request); /* RelativeMonthlyRecurrence */
                break;
        case E_EWS_RECURRENCE_ABSOLUTE_MONTHLY:
-               e_soap_message_start_element (msg, "AbsoluteMonthlyRecurrence", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.absolute_monthly.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_start_element (msg, "DayOfMonth", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.absolute_monthly.day_of_month);
-               e_soap_message_end_element (msg); /* DayOfMonth */
-               e_soap_message_end_element (msg); /* AbsoluteMonthlyRecurrence */
+               e_soap_request_start_element (request, "AbsoluteMonthlyRecurrence", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.absolute_monthly.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_start_element (request, "DayOfMonth", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.absolute_monthly.day_of_month);
+               e_soap_request_end_element (request); /* DayOfMonth */
+               e_soap_request_end_element (request); /* AbsoluteMonthlyRecurrence */
                break;
        case E_EWS_RECURRENCE_WEEKLY:
-               e_soap_message_start_element (msg, "WeeklyRecurrence", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.weekly.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_ews_cal_utils_write_days_of_week (msg, recur.recur.weekly.days_of_week);
+               e_soap_request_start_element (request, "WeeklyRecurrence", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.weekly.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_ews_cal_utils_write_days_of_week (request, recur.recur.weekly.days_of_week);
                if (server_satisfies_2013) {
                        const gchar *value = NULL;
 
@@ -1497,47 +1497,47 @@ e_ews_cal_utils_set_recurrence (ESoapMessage *msg,
                        }
 
                        if (value) {
-                               e_soap_message_start_element (msg, "FirstDayOfWeek", NULL, NULL);
-                               e_soap_message_write_string (msg, value);
-                               e_soap_message_end_element (msg); /* FirstDayOfWeek */
+                               e_soap_request_start_element (request, "FirstDayOfWeek", NULL, NULL);
+                               e_soap_request_write_string (request, value);
+                               e_soap_request_end_element (request); /* FirstDayOfWeek */
                        }
                }
-               e_soap_message_end_element (msg); /* WeeklyRecurrence */
+               e_soap_request_end_element (request); /* WeeklyRecurrence */
                break;
        case E_EWS_RECURRENCE_DAILY:
-               e_soap_message_start_element (msg, "DailyRecurrence", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_end_element (msg); /* DailyRecurrence */
+               e_soap_request_start_element (request, "DailyRecurrence", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_end_element (request); /* DailyRecurrence */
                break;
        case E_EWS_RECURRENCE_DAILY_REGENERATION:
-               e_soap_message_start_element (msg, "DailyRegeneration", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_end_element (msg); /* DailyRegeneration */
+               e_soap_request_start_element (request, "DailyRegeneration", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_end_element (request); /* DailyRegeneration */
                break;
        case E_EWS_RECURRENCE_WEEKLY_REGENERATION:
-               e_soap_message_start_element (msg, "WeeklyRegeneration", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_end_element (msg); /* WeeklyRegeneration */
+               e_soap_request_start_element (request, "WeeklyRegeneration", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_end_element (request); /* WeeklyRegeneration */
                break;
        case E_EWS_RECURRENCE_MONTHLY_REGENERATION:
-               e_soap_message_start_element (msg, "MonthlyRegeneration", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_end_element (msg); /* MonthlyRegeneration */
+               e_soap_request_start_element (request, "MonthlyRegeneration", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_end_element (request); /* MonthlyRegeneration */
                break;
        case E_EWS_RECURRENCE_YEARLY_REGENERATION:
-               e_soap_message_start_element (msg, "YearlyRegeneration", NULL, NULL);
-               e_soap_message_start_element (msg, "Interval", NULL, NULL);
-               e_soap_message_write_int (msg, recur.recur.interval);
-               e_soap_message_end_element (msg); /* Interval */
-               e_soap_message_end_element (msg); /* YearlyRegeneration */
+               e_soap_request_start_element (request, "YearlyRegeneration", NULL, NULL);
+               e_soap_request_start_element (request, "Interval", NULL, NULL);
+               e_soap_request_write_int (request, recur.recur.interval);
+               e_soap_request_end_element (request); /* Interval */
+               e_soap_request_end_element (request); /* YearlyRegeneration */
                break;
        }
 
@@ -1546,27 +1546,27 @@ e_ews_cal_utils_set_recurrence (ESoapMessage *msg,
                g_warn_if_reached ();
                break;
        case E_EWS_RECURRENCE_END_NO_END:
-               e_soap_message_start_element (msg, "NoEndRecurrence", NULL, NULL);
-               e_ews_cal_util_write_utc_date (msg, "StartDate", recur.utc_start_date);
-               e_soap_message_end_element (msg); /* NoEndRecurrence */
+               e_soap_request_start_element (request, "NoEndRecurrence", NULL, NULL);
+               e_ews_cal_util_write_utc_date (request, "StartDate", recur.utc_start_date);
+               e_soap_request_end_element (request); /* NoEndRecurrence */
                break;
        case E_EWS_RECURRENCE_END_DATE:
-               e_soap_message_start_element (msg, "EndDateRecurrence", NULL, NULL);
-               e_ews_cal_util_write_utc_date (msg, "StartDate", recur.utc_start_date);
-               e_ews_cal_util_write_utc_date (msg, "EndDate", recur.end.utc_end_date);
-               e_soap_message_end_element (msg); /* EndDateRecurrence */
+               e_soap_request_start_element (request, "EndDateRecurrence", NULL, NULL);
+               e_ews_cal_util_write_utc_date (request, "StartDate", recur.utc_start_date);
+               e_ews_cal_util_write_utc_date (request, "EndDate", recur.end.utc_end_date);
+               e_soap_request_end_element (request); /* EndDateRecurrence */
                break;
        case E_EWS_RECURRENCE_END_NUMBERED:
-               e_soap_message_start_element (msg, "NumberedRecurrence", NULL, NULL);
-               e_ews_cal_util_write_utc_date (msg, "StartDate", recur.utc_start_date);
-               e_soap_message_start_element (msg, "NumberOfOccurrences", NULL, NULL);
-               e_soap_message_write_int (msg, recur.end.number_of_occurrences);
-               e_soap_message_end_element (msg); /* NumberOfOccurrences */
-               e_soap_message_end_element (msg); /* NumberedRecurrence */
+               e_soap_request_start_element (request, "NumberedRecurrence", NULL, NULL);
+               e_ews_cal_util_write_utc_date (request, "StartDate", recur.utc_start_date);
+               e_soap_request_start_element (request, "NumberOfOccurrences", NULL, NULL);
+               e_soap_request_write_int (request, recur.end.number_of_occurrences);
+               e_soap_request_end_element (request); /* NumberOfOccurrences */
+               e_soap_request_end_element (request); /* NumberedRecurrence */
                break;
        }
 
-       e_soap_message_end_element (msg); /* Recurrence */
+       e_soap_request_end_element (request); /* Recurrence */
 
        return TRUE;
 }
diff --git a/src/EWS/common/e-ews-calendar-utils.h b/src/EWS/common/e-ews-calendar-utils.h
index 4b640df9..880cf652 100644
--- a/src/EWS/common/e-ews-calendar-utils.h
+++ b/src/EWS/common/e-ews-calendar-utils.h
@@ -10,7 +10,7 @@
 #include <time.h>
 #include <libecal/libecal.h>
 
-#include "common/e-soap-message.h"
+#include "common/e-soap-request.h"
 #include "common/e-ews-item.h"
 
 G_BEGIN_DECLS
@@ -26,14 +26,14 @@ typedef struct _EEWSFreeBusyData {
 } EEWSFreeBusyData;
 
 gboolean       e_ews_cal_utils_prepare_free_busy_request
-                                               (ESoapMessage *msg,
+                                               (ESoapRequest *request,
                                                 gpointer user_data, /* EEWSFreeBusyData * */
                                                 GError **error);
-void           e_ews_cal_utils_set_time        (ESoapMessage *msg,
+void           e_ews_cal_utils_set_time        (ESoapRequest *request,
                                                 const gchar *name,
                                                 ICalTime *tt,
                                                 gboolean with_timezone);
-gboolean       e_ews_cal_utils_set_recurrence  (ESoapMessage *msg,
+gboolean       e_ews_cal_utils_set_recurrence  (ESoapRequest *request,
                                                 ICalComponent *comp,
                                                 gboolean server_satisfies_2013,
                                                 GError **error);
diff --git a/src/EWS/common/e-ews-camel-common.c b/src/EWS/common/e-ews-camel-common.c
index 16962444..1446eea3 100644
--- a/src/EWS/common/e-ews-camel-common.c
+++ b/src/EWS/common/e-ews-camel-common.c
@@ -9,7 +9,7 @@
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
-#include "common/e-ews-message.h"
+#include "common/e-ews-request.h"
 #include "common/e-ews-item-change.h"
 
 #include "e-ews-camel-common.h"
@@ -63,7 +63,7 @@ filter_recipients (CamelMimeMessage *message,
 }
 
 static void
-write_recipients (ESoapMessage *msg,
+write_recipients (ESoapRequest *request,
                  const gchar *elem_name,
                  GHashTable *recips,
                  gboolean is_resend)
@@ -71,23 +71,23 @@ write_recipients (ESoapMessage *msg,
        GHashTableIter iter;
        gpointer key, value;
 
-       g_return_if_fail (msg != NULL);
+       g_return_if_fail (request != NULL);
        g_return_if_fail (elem_name != NULL);
        g_return_if_fail (recips != NULL);
 
        if (!is_resend && !g_hash_table_size (recips))
                return;
 
-       e_soap_message_start_element (msg, elem_name, NULL, NULL);
+       e_soap_request_start_element (request, elem_name, NULL, NULL);
 
        g_hash_table_iter_init (&iter, recips);
        while (g_hash_table_iter_next (&iter, &key, &value)) {
-               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-               e_ews_message_write_string_parameter_with_attribute (msg, "EmailAddress", NULL, key, NULL, 
NULL);
-               e_soap_message_end_element (msg); /* Mailbox */
+               e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+               e_ews_request_write_string_parameter_with_attribute (request, "EmailAddress", NULL, key, 
NULL, NULL);
+               e_soap_request_end_element (request); /* Mailbox */
        }
 
-       e_soap_message_end_element (msg); /* elem_name */
+       e_soap_request_end_element (request); /* elem_name */
 }
 
 static gboolean
@@ -101,7 +101,7 @@ is_any_address_filled (CamelInternetAddress *addrs)
 #define MAPI_MSGFLAG_UNSENT    0x08
 
 static gboolean
-create_mime_message_cb (ESoapMessage *msg,
+create_mime_message_cb (ESoapRequest *request,
                         gpointer user_data,
                        GError **error)
 {
@@ -132,10 +132,10 @@ create_mime_message_cb (ESoapMessage *msg,
                }
        }
 
-       e_soap_message_start_element (msg, "Message", NULL, NULL);
-       e_soap_message_start_element (msg, "MimeContent", NULL, NULL);
+       e_soap_request_start_element (request, "Message", NULL, NULL);
+       e_soap_request_start_element (request, "MimeContent", NULL, NULL);
 
-       /* This is horrid. We really need to extend ESoapMessage to allow us
+       /* This is horrid. We really need to extend ESoapRequest to allow us
         * to stream this directly rather than storing it in RAM. Which right
         * now we are doing about four times: the GByteArray in the mem stream,
         * then the base64 version, then the xmlDoc, then the soup request. */
@@ -160,28 +160,27 @@ create_mime_message_cb (ESoapMessage *msg,
        g_object_unref (mem);
        g_object_unref (filtered);
 
-       e_soap_message_write_string (msg, base64);
+       e_soap_request_write_string (request, base64);
        g_free (base64);
 
-       e_soap_message_end_element (msg); /* MimeContent */
+       e_soap_request_end_element (request); /* MimeContent */
 
        content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (create_data->message));
        if (content_type && camel_content_type_is (content_type, "multipart", "report") &&
            camel_content_type_param (content_type, "report-type") &&
            g_ascii_strcasecmp (camel_content_type_param (content_type, "report-type"), 
"disposition-notification") == 0) {
                /* it's a disposition notification reply, set ItemClass too */
-               e_soap_message_start_element (msg, "ItemClass", NULL, NULL);
-               e_soap_message_write_string (msg, "REPORT.IPM.NOTE.IPNRN");
-               e_soap_message_end_element (msg); /* ItemClass */
+               e_soap_request_start_element (request, "ItemClass", NULL, NULL);
+               e_soap_request_write_string (request, "REPORT.IPM.NOTE.IPNRN");
+               e_soap_request_end_element (request); /* ItemClass */
        }
 
-       e_ews_message_write_string_parameter_with_attribute (
-                       msg,
-                       "Importance",
-                       NULL,
-                       (message_camel_flags & CAMEL_MESSAGE_FLAGGED) != 0 ? "High" : "Normal",
-                       NULL,
-                       NULL);
+       e_ews_request_write_string_parameter_with_attribute (request,
+               "Importance",
+               NULL,
+               (message_camel_flags & CAMEL_MESSAGE_FLAGGED) != 0 ? "High" : "Normal",
+               NULL,
+               NULL);
 
        /* more MAPI crap.  You can't just set the IsDraft property
         * here you have to use the MAPI MSGFLAG_UNSENT extended
@@ -192,14 +191,14 @@ create_mime_message_cb (ESoapMessage *msg,
        if ((message_camel_flags & CAMEL_MESSAGE_DRAFT) != 0)
                msgflag |= MAPI_MSGFLAG_UNSENT;
 
-       e_ews_message_add_extended_property_tag_int (msg, 0x0e07, msgflag);
+       e_ews_request_add_extended_property_tag_int (request, 0x0e07, msgflag);
 
        if ((message_camel_flags & (CAMEL_MESSAGE_FORWARDED | CAMEL_MESSAGE_ANSWERED)) != 0) {
                gint icon;
 
                icon = (message_camel_flags & CAMEL_MESSAGE_ANSWERED) != 0 ? 0x105 : 0x106;
 
-               e_ews_message_add_extended_property_tag_int (msg, 0x1080, icon);
+               e_ews_request_add_extended_property_tag_int (request, 0x1080, icon);
        }
 
        if (create_data->info) {
@@ -221,15 +220,15 @@ create_mime_message_cb (ESoapMessage *msg,
                        dueby_tt = camel_header_decode_date (dueby, NULL);
 
                /* PidTagFlagStatus */
-               e_ews_message_add_extended_property_tag_int (msg, 0x1090,
+               e_ews_request_add_extended_property_tag_int (request, 0x1090,
                        followup ? (completed_tt != (time_t) 0 ? 0x01 /* followupComplete */: 0x02 /* 
followupFlagged */) : 0x0);
 
                if (followup) {
                        /* PidLidFlagRequest */
-                       e_ews_message_add_extended_property_distinguished_tag_string (msg, "Common", 0x8530, 
followup);
+                       e_ews_request_add_extended_property_distinguished_tag_string (request, "Common", 
0x8530, followup);
 
                        /* PidTagToDoItemFlags */
-                       e_ews_message_add_extended_property_tag_int (msg, 0x0e2b, 1);
+                       e_ews_request_add_extended_property_tag_int (request, 0x0e2b, 1);
                }
 
                if (followup && completed_tt != (time_t) 0) {
@@ -237,33 +236,33 @@ create_mime_message_cb (ESoapMessage *msg,
                        completed_tt = completed_tt - (completed_tt % 60);
 
                        /* PidTagFlagCompleteTime */
-                       e_ews_message_add_extended_property_tag_time (msg, 0x1091, completed_tt);
+                       e_ews_request_add_extended_property_tag_time (request, 0x1091, completed_tt);
 
                        /* PidLidTaskDateCompleted */
-                       e_ews_message_add_extended_property_distinguished_tag_time (msg, "Task", 0x810f, 
completed_tt);
+                       e_ews_request_add_extended_property_distinguished_tag_time (request, "Task", 0x810f, 
completed_tt);
 
                        /* PidLidTaskStatus */
-                       e_ews_message_add_extended_property_distinguished_tag_int (msg, "Task", 0x8101, 2);
+                       e_ews_request_add_extended_property_distinguished_tag_int (request, "Task", 0x8101, 
2);
 
                        /* PidLidPercentComplete */
-                       e_ews_message_add_extended_property_distinguished_tag_double (msg, "Task", 0x8102, 
1.0);
+                       e_ews_request_add_extended_property_distinguished_tag_double (request, "Task", 
0x8102, 1.0);
 
                        /* PidLidTaskComplete */
-                       e_ews_message_add_extended_property_distinguished_tag_boolean (msg, "Task", 0x811c, 
TRUE);
+                       e_ews_request_add_extended_property_distinguished_tag_boolean (request, "Task", 
0x811c, TRUE);
                }
 
                if (followup && dueby_tt != (time_t) 0 && completed_tt == (time_t) 0) {
                        /* PidLidTaskStatus */
-                       e_ews_message_add_extended_property_distinguished_tag_int (msg, "Task", 0x8101, 0);
+                       e_ews_request_add_extended_property_distinguished_tag_int (request, "Task", 0x8101, 
0);
 
                        /* PidLidPercentComplete */
-                       e_ews_message_add_extended_property_distinguished_tag_double (msg, "Task", 0x8102, 
0.0);
+                       e_ews_request_add_extended_property_distinguished_tag_double (request, "Task", 
0x8102, 0.0);
 
                        /* PidLidTaskDueDate */
-                       e_ews_message_add_extended_property_distinguished_tag_time (msg, "Task", 0x8105, 
dueby_tt);
+                       e_ews_request_add_extended_property_distinguished_tag_time (request, "Task", 0x8105, 
dueby_tt);
 
                        /* PidLidTaskComplete */
-                       e_ews_message_add_extended_property_distinguished_tag_boolean (msg, "Task", 0x811c, 
FALSE);
+                       e_ews_request_add_extended_property_distinguished_tag_boolean (request, "Task", 
0x811c, FALSE);
                }
        }
 
@@ -272,13 +271,13 @@ create_mime_message_cb (ESoapMessage *msg,
 
                settings = e_ews_connection_ref_settings (create_data->cnc);
                if (settings) {
-                       e_soap_message_start_element (msg, "Sender", NULL, NULL);
+                       e_soap_request_start_element (request, "Sender", NULL, NULL);
 
-                       e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-                       e_ews_message_write_string_parameter_with_attribute (msg, "EmailAddress", NULL, 
camel_ews_settings_get_email (settings), NULL, NULL);
-                       e_soap_message_end_element (msg); /* Mailbox */
+                       e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+                       e_ews_request_write_string_parameter_with_attribute (request, "EmailAddress", NULL, 
camel_ews_settings_get_email (settings), NULL, NULL);
+                       e_soap_request_end_element (request); /* Mailbox */
 
-                       e_soap_message_end_element (msg); /* Sender */
+                       e_soap_request_end_element (request); /* Sender */
                }
                g_clear_object (&settings);
        }
@@ -297,9 +296,9 @@ create_mime_message_cb (ESoapMessage *msg,
 
                filter_recipients (create_data->message, create_data->recipients, recip_to, recip_cc, 
recip_bcc);
 
-               write_recipients (msg, "ToRecipients", recip_to, is_resend);
-               write_recipients (msg, "CcRecipients", recip_cc, is_resend);
-               write_recipients (msg, "BccRecipients", recip_bcc, is_resend);
+               write_recipients (request, "ToRecipients", recip_to, is_resend);
+               write_recipients (request, "CcRecipients", recip_cc, is_resend);
+               write_recipients (request, "BccRecipients", recip_bcc, is_resend);
 
                g_hash_table_destroy (recip_to);
                g_hash_table_destroy (recip_cc);
@@ -310,19 +309,19 @@ create_mime_message_cb (ESoapMessage *msg,
                const gchar *from_name = NULL, *from_email = NULL;
 
                if (camel_internet_address_get (CAMEL_INTERNET_ADDRESS (create_data->from), 0, &from_name, 
&from_email) && from_email) {
-                       e_soap_message_start_element (msg, "From", NULL, NULL);
+                       e_soap_request_start_element (request, "From", NULL, NULL);
 
-                       e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
+                       e_soap_request_start_element (request, "Mailbox", NULL, NULL);
                        if (from_name && *from_name)
-                               e_ews_message_write_string_parameter_with_attribute (msg, "Name", NULL, 
from_name, NULL, NULL);
-                       e_ews_message_write_string_parameter_with_attribute (msg, "EmailAddress", NULL, 
from_email, NULL, NULL);
-                       e_soap_message_end_element (msg); /* Mailbox */
+                               e_ews_request_write_string_parameter_with_attribute (request, "Name", NULL, 
from_name, NULL, NULL);
+                       e_ews_request_write_string_parameter_with_attribute (request, "EmailAddress", NULL, 
from_email, NULL, NULL);
+                       e_soap_request_end_element (request); /* Mailbox */
 
-                       e_soap_message_end_element (msg); /* From */
+                       e_soap_request_end_element (request); /* From */
                }
        }
 
-       e_ews_message_write_string_parameter_with_attribute (
+       e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "IsRead",
                        NULL,
@@ -330,7 +329,7 @@ create_mime_message_cb (ESoapMessage *msg,
                        NULL,
                        NULL);
 
-       e_soap_message_end_element (msg); /* Message */
+       e_soap_request_end_element (request); /* Message */
 
        g_free (create_data);
 
diff --git a/src/EWS/common/e-ews-connection-utils.c b/src/EWS/common/e-ews-connection-utils.c
index 89cb108e..85bcbb32 100644
--- a/src/EWS/common/e-ews-connection-utils.c
+++ b/src/EWS/common/e-ews-connection-utils.c
@@ -16,6 +16,28 @@
 #include "e-soup-auth-negotiate.h"
 #include "camel-ews-settings.h"
 
+void
+e_ews_connection_utils_set_user_agent_header (SoupMessage *message,
+                                             CamelEwsSettings *settings)
+{
+       g_return_if_fail (SOUP_IS_MESSAGE (message));
+       g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+       if (camel_ews_settings_get_override_user_agent (settings)) {
+               gchar *user_agent;
+
+               user_agent = camel_ews_settings_dup_user_agent (settings);
+
+               if (user_agent && *user_agent) {
+                       soup_message_headers_append (soup_message_get_request_headers (message), 
"User-Agent", user_agent);
+               }
+
+               g_free (user_agent);
+       } else {
+               soup_message_headers_append (soup_message_get_request_headers (message), "User-Agent", 
"Evolution/" VERSION);
+       }
+}
+
 static gpointer
 ews_unref_in_thread_func (gpointer data)
 {
@@ -195,7 +217,7 @@ e_ews_connection_utils_check_x_ms_credential_headers (SoupMessage *message,
                                                      gboolean *out_expired,
                                                      gchar **out_service_url)
 {
-       SoupMessageHedaers *response_headers;
+       SoupMessageHeaders *response_headers;
        gboolean any_found = FALSE;
        const gchar *header;
 
@@ -418,11 +440,10 @@ ews_connection_utils_maybe_prepare_bearer_auth (EEwsConnection *cnc,
                g_warn_if_fail (uri != NULL);
 
                if (!uri) {
-                       soup_message_set_status_full (message, SOUP_STATUS_MALFORMED, "Cannot get host from 
message");
                        return FALSE;
                }
 
-               soup_auth = g_object_new (E_TYPE_SOUP_AUTH_BEARER, SOUP_AUTH_HOST, g_uri_get_host (uri), 
NULL);
+               soup_auth = g_object_new (E_TYPE_SOUP_AUTH_BEARER, NULL);
 
                success = ews_connection_utils_setup_bearer_auth (cnc, session, message, FALSE, 
E_SOUP_AUTH_BEARER (soup_auth), cancellable, &local_error);
                if (success)
diff --git a/src/EWS/common/e-ews-connection-utils.h b/src/EWS/common/e-ews-connection-utils.h
index 95deb9f2..62335b87 100644
--- a/src/EWS/common/e-ews-connection-utils.h
+++ b/src/EWS/common/e-ews-connection-utils.h
@@ -15,6 +15,9 @@ G_BEGIN_DECLS
 #define E_EWS_CONNECTION_UTILS_CHECK_ELEMENT(element_name, expected_name) \
        (e_ews_connection_utils_check_element (G_STRFUNC, (element_name), (expected_name)))
 
+void           e_ews_connection_utils_set_user_agent_header
+                                                       (SoupMessage *message,
+                                                        CamelEwsSettings *settings);
 void           e_ews_connection_utils_unref_in_thread  (gpointer object);
 gboolean       e_ews_connection_utils_check_element    (const gchar *function_name,
                                                         const gchar *element_name,
diff --git a/src/EWS/common/e-ews-connection.c b/src/EWS/common/e-ews-connection.c
index d2469b07..80e84a47 100644
--- a/src/EWS/common/e-ews-connection.c
+++ b/src/EWS/common/e-ews-connection.c
@@ -23,7 +23,7 @@
 
 #include "e-ews-connection.h"
 #include "e-ews-connection-utils.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 #include "e-ews-item-change.h"
 #include "e-ews-debug.h"
 #include "e-ews-notification.h"
@@ -143,7 +143,7 @@ struct _EwsAsyncData {
 };
 
 struct _EwsNode {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        EEwsConnection *cnc;
        GSimpleAsyncResult *simple;
 
@@ -785,7 +785,7 @@ ews_cancel_request (GCancellable *cancellable,
        EwsNode *node = user_data;
        EEwsConnection *cnc = node->cnc;
        GSimpleAsyncResult *simple = node->simple;
-       ESoapMessage *msg = node->msg;
+       ESoapRequest *request = node->msg;
        GSList *found;
 
        QUEUE_LOCK (cnc);
@@ -799,15 +799,15 @@ ews_cancel_request (GCancellable *cancellable,
                G_IO_ERROR_CANCELLED,
                _("Operation Cancelled"));
        if (found) {
-               ews_connection_schedule_cancel_message (cnc, SOUP_MESSAGE (msg));
+               ews_connection_schedule_cancel_message (cnc, SOUP_MESSAGE (request));
        } else {
-               ews_response_cb (cnc->priv->soup_session, SOUP_MESSAGE (msg), node);
+               ews_response_cb (cnc->priv->soup_session, SOUP_MESSAGE (request), node);
        }
 }
 
 void
 e_ews_connection_queue_request (EEwsConnection *cnc,
-                                ESoapMessage *msg,
+                                ESoapRequest *request,
                                 EEwsResponseCallback cb,
                                 gint pri,
                                 GCancellable *cancellable,
@@ -918,7 +918,7 @@ ews_response_cb (SoupSession *session,
        const gchar *persistent_auth;
        gint wait_ms = 0;
 
-       persistent_auth = soup_message_headers_get_one (soup_message_get_response_headers (msg), 
"Persistent-Auth");
+       persistent_auth = soup_message_headers_get_one (soup_message_get_response_headers (request), 
"Persistent-Auth");
        if (persistent_auth && g_ascii_strcasecmp (persistent_auth, "false") == 0) {
                SoupSessionFeature *feature;
 
@@ -940,11 +940,11 @@ ews_response_cb (SoupSession *session,
                        enode->simple, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED,
                        "%s", msg->reason_phrase);
                goto exit;
-       } else if (soup_message_get_status (msg) == SOUP_STATUS_UNAUTHORIZED) {
-               if (soup_message_get_response_headers (msg)) {
+       } else if (soup_message_get_status (request) == SOUP_STATUS_UNAUTHORIZED) {
+               if (soup_message_get_response_headers (request)) {
                        const gchar *diagnostics;
 
-                       diagnostics = soup_message_headers_get_list (soup_message_get_response_headers (msg), 
"X-MS-DIAGNOSTICS");
+                       diagnostics = soup_message_headers_get_list (soup_message_get_response_headers 
(request), "X-MS-DIAGNOSTICS");
                        if (diagnostics && strstr (diagnostics, "invalid_grant")) {
                                g_simple_async_result_set_error (
                                        enode->simple,
@@ -981,7 +981,7 @@ ews_response_cb (SoupSession *session,
                goto exit;
        }
 
-       response = e_soap_message_parse_response ((ESoapMessage *) msg);
+       response = e_soap_request_parse_response ((ESoapMessage *) msg);
 
        if (response == NULL) {
                g_simple_async_result_set_error (
@@ -1025,7 +1025,7 @@ ews_response_cb (SoupSession *session,
 
                if (cancellable)
                        g_object_ref (cancellable);
-               g_object_ref (msg);
+               g_object_ref (request);
 
                flag = e_flag_new ();
                while (wait_ms > 0 && !g_cancellable_is_cancelled (cancellable)) {
@@ -1067,12 +1067,12 @@ ews_response_cb (SoupSession *session,
 
                if (g_cancellable_is_cancelled (cancellable)) {
                        g_clear_object (&cancellable);
-                       g_object_unref (msg);
+                       g_object_unref (request);
                } else {
                        EwsNode *new_node;
 
                        new_node = ews_node_new ();
-                       new_node->msg = E_SOAP_MESSAGE (msg); /* takes ownership */
+                       new_node->msg = E_SOAP_REQUEST (request); /* takes ownership */
                        new_node->pri = enode->pri;
                        new_node->cb = enode->cb;
                        new_node->cnc = enode->cnc;
@@ -3129,7 +3129,7 @@ autodiscover_response_cb (SoupSession *session,
        GSimpleAsyncResult *simple = data;
        struct _autodiscover_data *ad;
        EwsUrls exch_urls, expr_urls;
-       guint status = soup_message_get_status (msg);
+       guint status = soup_message_get_status (request);
        xmlDoc *doc;
        xmlNode *node;
        gchar *str;
@@ -3156,7 +3156,7 @@ autodiscover_response_cb (SoupSession *session,
                gboolean expired = FALSE;
                gchar *service_url = NULL;
 
-               if (e_ews_connection_utils_check_x_ms_credential_headers (msg, NULL, &expired, &service_url) 
&& expired) {
+               if (e_ews_connection_utils_check_x_ms_credential_headers (request, NULL, &expired, 
&service_url) && expired) {
                        e_ews_connection_utils_expired_password_to_error (service_url, &error);
                } else {
                        g_set_error (
@@ -3415,7 +3415,7 @@ post_restarted (SoupMessage *msg,
        /* In violation of RFC2616, libsoup will change a POST request to
         * a GET on receiving a 302 redirect. */
        printf ("Working around libsoup bug with redirect\n");
-       g_object_set (msg, SOUP_MESSAGE_METHOD, "POST", NULL);
+       g_object_set (request, SOUP_MESSAGE_METHOD, "POST", NULL);
 
        soup_message_set_request (
                msg, "text/xml; charset=utf-8", SOUP_MEMORY_COPY,
@@ -3453,12 +3453,10 @@ e_ews_get_msg_for_url (EEwsConnection *cnc,
        }
 
        if (cnc->priv->source)
-               e_soup_ssl_trust_connect (msg, cnc->priv->source);
-
-       e_ews_message_attach_chunk_allocator (msg);
+               e_soup_ssl_trust_connect (request, cnc->priv->source);
 
        settings = e_ews_connection_ref_settings (cnc);
-       e_ews_message_set_user_agent_header (msg, settings);
+       e_ews_connection_utils_set_user_agent_header (request, settings);
        g_clear_object (&settings);
 
        if (buf != NULL) {
@@ -3884,7 +3882,7 @@ struct _oal_req_data {
        /* for dowloading oal file */
        gchar *cache_filename;
        GError *error;
-       EwsProgressFn progress_fn;
+       ESoapResponseProgressFn progress_fn;
        gpointer progress_data;
        gsize response_size;
        gsize received_size;
@@ -4385,7 +4383,7 @@ ews_soup_got_headers (SoupMessage *msg,
        struct _oal_req_data *data = (struct _oal_req_data *) user_data;
        const gchar *size;
 
-       size = soup_message_headers_get_one (soup_message_get_response_headers (msg), "Content-Length");
+       size = soup_message_headers_get_one (soup_message_get_response_headers (request), "Content-Length");
 
        if (size)
                data->response_size = strtol (size, NULL, 10);
@@ -4437,7 +4435,7 @@ ews_soup_got_chunk (SoupMessage *msg,
 gboolean
 e_ews_connection_download_oal_file_sync (EEwsConnection *cnc,
                                          const gchar *cache_filename,
-                                         EwsProgressFn progress_fn,
+                                         ESoapResponseProgressFn progress_fn,
                                          gpointer progress_data,
                                          GCancellable *cancellable,
                                          GError **error)
@@ -4468,7 +4466,7 @@ e_ews_connection_download_oal_file_sync (EEwsConnection *cnc,
 void
 e_ews_connection_download_oal_file (EEwsConnection *cnc,
                                     const gchar *cache_filename,
-                                    EwsProgressFn progress_fn,
+                                    ESoapResponseProgressFn progress_fn,
                                     gpointer progress_data,
                                     GCancellable *cancellable,
                                     GAsyncReadyCallback callback,
@@ -4566,7 +4564,7 @@ e_ews_connection_set_mailbox (EEwsConnection *cnc,
 }
 
 static void
-ews_append_additional_props_to_msg (ESoapMessage *msg,
+ews_append_additional_props_to_msg (ESoapRequest *request,
                                     const EEwsAdditionalProps *add_props)
 {
        GSList *l;
@@ -4574,14 +4572,14 @@ ews_append_additional_props_to_msg (ESoapMessage *msg,
        if (!add_props)
                return;
 
-       e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
+       e_soap_request_start_element (request, "AdditionalProperties", NULL, NULL);
 
        if (add_props->field_uri) {
                gchar **prop = g_strsplit (add_props->field_uri, " ", 0);
                gint i = 0;
 
                while (prop[i]) {
-                       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, 
"FieldURI", prop[i]);
+                       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, 
"FieldURI", prop[i]);
                        i++;
                }
 
@@ -4592,27 +4590,27 @@ ews_append_additional_props_to_msg (ESoapMessage *msg,
                for (l = add_props->extended_furis; l != NULL; l = g_slist_next (l)) {
                        EEwsExtendedFieldURI *ex_furi = l->data;
 
-                       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
+                       e_soap_request_start_element (request, "ExtendedFieldURI", NULL, NULL);
 
                        if (ex_furi->distinguished_prop_set_id)
-                               e_soap_message_add_attribute (msg, "DistinguishedPropertySetId", 
ex_furi->distinguished_prop_set_id, NULL, NULL);
+                               e_soap_request_add_attribute (request, "DistinguishedPropertySetId", 
ex_furi->distinguished_prop_set_id, NULL, NULL);
 
                        if (ex_furi->prop_tag)
-                               e_soap_message_add_attribute (msg, "PropertyTag", ex_furi->prop_tag, NULL, 
NULL);
+                               e_soap_request_add_attribute (request, "PropertyTag", ex_furi->prop_tag, 
NULL, NULL);
 
                        if (ex_furi->prop_set_id)
-                               e_soap_message_add_attribute (msg, "PropertySetId", ex_furi->prop_set_id, 
NULL, NULL);
+                               e_soap_request_add_attribute (request, "PropertySetId", ex_furi->prop_set_id, 
NULL, NULL);
 
                        if (ex_furi->prop_name)
-                               e_soap_message_add_attribute (msg, "PropertyName", ex_furi->prop_name, NULL, 
NULL);
+                               e_soap_request_add_attribute (request, "PropertyName", ex_furi->prop_name, 
NULL, NULL);
 
                        if (ex_furi->prop_id)
-                               e_soap_message_add_attribute (msg, "PropertyId", ex_furi->prop_id, NULL, 
NULL);
+                               e_soap_request_add_attribute (request, "PropertyId", ex_furi->prop_id, NULL, 
NULL);
 
                        if (ex_furi->prop_type)
-                               e_soap_message_add_attribute (msg, "PropertyType", ex_furi->prop_type, NULL, 
NULL);
+                               e_soap_request_add_attribute (request, "PropertyType", ex_furi->prop_type, 
NULL, NULL);
 
-                       e_soap_message_end_element (msg);
+                       e_soap_request_end_element (request);
                }
        }
 
@@ -4620,59 +4618,59 @@ ews_append_additional_props_to_msg (ESoapMessage *msg,
                for (l = add_props->indexed_furis; l != NULL; l = g_slist_next (l)) {
                        EEwsIndexedFieldURI *in_furi = l->data;
 
-                       e_soap_message_start_element (msg, "IndexedFieldURI", NULL, NULL);
+                       e_soap_request_start_element (request, "IndexedFieldURI", NULL, NULL);
 
-                       e_soap_message_add_attribute (msg, "FieldURI", in_furi->field_uri, NULL, NULL);
-                       e_soap_message_add_attribute (msg, "FieldIndex", in_furi->field_index, NULL, NULL);
+                       e_soap_request_add_attribute (request, "FieldURI", in_furi->field_uri, NULL, NULL);
+                       e_soap_request_add_attribute (request, "FieldIndex", in_furi->field_index, NULL, 
NULL);
 
-                       e_soap_message_end_element (msg);
+                       e_soap_request_end_element (request);
                }
        }
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 }
 
 static void
-ews_write_sort_order_to_msg (ESoapMessage *msg,
+ews_write_sort_order_to_msg (ESoapRequest *request,
                              EwsSortOrder *sort_order)
 {
        if (!sort_order)
                return;
 
-       e_soap_message_start_element (msg, "SortOrder", NULL, NULL);
-       e_soap_message_start_element (msg, "FieldOrder", NULL, NULL);
-       e_soap_message_add_attribute (msg, "Order", sort_order->order, NULL, NULL);
+       e_soap_request_start_element (request, "SortOrder", NULL, NULL);
+       e_soap_request_start_element (request, "FieldOrder", NULL, NULL);
+       e_soap_request_add_attribute (request, "Order", sort_order->order, NULL, NULL);
 
        if (sort_order->uri_type == NORMAL_FIELD_URI)
-               e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
(gchar *) sort_order->field_uri);
+               e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, 
"FieldURI", (gchar *) sort_order->field_uri);
        else if (sort_order->uri_type == INDEXED_FIELD_URI) {
                EEwsIndexedFieldURI *in_furi = sort_order->field_uri;
 
-               e_soap_message_start_element (msg, "IndexedFieldURI", NULL, NULL);
-               e_soap_message_add_attribute (msg, "FieldURI", in_furi->field_uri, NULL, NULL);
-               e_soap_message_add_attribute (msg, "FieldIndex", in_furi->field_index, NULL, NULL);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "IndexedFieldURI", NULL, NULL);
+               e_soap_request_add_attribute (request, "FieldURI", in_furi->field_uri, NULL, NULL);
+               e_soap_request_add_attribute (request, "FieldIndex", in_furi->field_index, NULL, NULL);
+               e_soap_request_end_element (request);
        } else if (sort_order->uri_type == EXTENDED_FIELD_URI) {
                EEwsExtendedFieldURI *ex_furi = sort_order->field_uri;
 
-               e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
+               e_soap_request_start_element (request, "ExtendedFieldURI", NULL, NULL);
 
                if (ex_furi->distinguished_prop_set_id)
-                       e_soap_message_add_attribute (msg, "DistinguishedPropertySetId", 
ex_furi->distinguished_prop_set_id, NULL, NULL);
+                       e_soap_request_add_attribute (request, "DistinguishedPropertySetId", 
ex_furi->distinguished_prop_set_id, NULL, NULL);
                if (ex_furi->prop_set_id)
-                       e_soap_message_add_attribute (msg, "PropertySetId", ex_furi->prop_set_id, NULL, NULL);
+                       e_soap_request_add_attribute (request, "PropertySetId", ex_furi->prop_set_id, NULL, 
NULL);
                if (ex_furi->prop_name)
-                       e_soap_message_add_attribute (msg, "PropertyName", ex_furi->prop_name, NULL, NULL);
+                       e_soap_request_add_attribute (request, "PropertyName", ex_furi->prop_name, NULL, 
NULL);
                if (ex_furi->prop_id)
-                       e_soap_message_add_attribute (msg, "PropertyId", ex_furi->prop_id, NULL, NULL);
+                       e_soap_request_add_attribute (request, "PropertyId", ex_furi->prop_id, NULL, NULL);
                if (ex_furi->prop_type)
-                       e_soap_message_add_attribute (msg, "PropertyType", ex_furi->prop_type, NULL, NULL);
+                       e_soap_request_add_attribute (request, "PropertyType", ex_furi->prop_type, NULL, 
NULL);
 
-               e_soap_message_end_element (msg);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_end_element (msg);
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
+       e_soap_request_end_element (request);
 }
 
 /**
@@ -4700,42 +4698,40 @@ e_ews_connection_sync_folder_items (EEwsConnection *cnc,
                                     GAsyncReadyCallback callback,
                                     gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "SyncFolderItems",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
-       e_soap_message_start_element (msg, "ItemShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, default_props);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "SyncFolderItems",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
+       e_soap_request_start_element (request, "ItemShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, default_props);
 
-       ews_append_additional_props_to_msg (msg, add_props);
+       ews_append_additional_props_to_msg (request, add_props);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "SyncFolderId", "messages", NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "FolderId", NULL, NULL, "Id", fid);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "SyncFolderId", "messages", NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", fid);
+       e_soap_request_end_element (request);
 
        if (last_sync_state)
-               e_ews_message_write_string_parameter (msg, "SyncState", "messages", last_sync_state);
+               e_ews_request_write_string_parameter (request, "SyncState", "messages", last_sync_state);
 
        /* Max changes requested */
-       e_ews_message_write_int_parameter (msg, "MaxChangesReturned", "messages", max_entries);
+       e_ews_request_write_int_parameter (request, "MaxChangesReturned", "messages", max_entries);
 
        /* Complete the footer and print the request */
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -4746,7 +4742,7 @@ e_ews_connection_sync_folder_items (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, sync_folder_items_response_cb,
+               cnc, request, sync_folder_items_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -4827,7 +4823,7 @@ e_ews_connection_sync_folder_items_sync (EEwsConnection *cnc,
 }
 
 static void
-ews_append_folder_ids_to_msg (ESoapMessage *msg,
+ews_append_folder_ids_to_msg (ESoapRequest *request,
                               const gchar *email,
                               GSList *folder_ids)
 {
@@ -4836,28 +4832,28 @@ ews_append_folder_ids_to_msg (ESoapMessage *msg,
        for (l = folder_ids; l != NULL; l = g_slist_next (l)) {
                const EwsFolderId *fid = l->data;
 
-               e_ews_folder_id_append_to_msg (msg, email, fid);
+               e_ews_folder_id_append_to_msg (request, email, fid);
        }
 }
 
 static void
-ews_connection_write_only_ids_restriction (ESoapMessage *msg,
+ews_connection_write_only_ids_restriction (ESoapRequest *request,
                                           GPtrArray *only_ids)
 {
        guint ii;
 
-       g_return_if_fail (E_IS_SOAP_MESSAGE (msg));
+       g_return_if_fail (E_IS_SOAP_REQUEST (request));
        g_return_if_fail (only_ids && only_ids->len);
 
        for (ii = 0; ii < only_ids->len; ii++) {
                const gchar *itemid = g_ptr_array_index (only_ids, ii);
 
-               e_soap_message_start_element (msg, "IsEqualTo", NULL, NULL);
-               e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"item:ItemId");
-               e_soap_message_start_element (msg, "FieldURIOrConstant", NULL, NULL);
-               e_ews_message_write_string_parameter_with_attribute (msg, "Constant", NULL, NULL, "Value", 
itemid);
-               e_soap_message_end_element (msg); /* FieldURIOrConstant */
-               e_soap_message_end_element (msg); /* IsEqualTo */
+               e_soap_request_start_element (request, "IsEqualTo", NULL, NULL);
+               e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, 
"FieldURI", "item:ItemId");
+               e_soap_request_start_element (request, "FieldURIOrConstant", NULL, NULL);
+               e_ews_request_write_string_parameter_with_attribute (request, "Constant", NULL, NULL, 
"Value", itemid);
+               e_soap_request_end_element (request); /* FieldURIOrConstant */
+               e_soap_request_end_element (request); /* IsEqualTo */
        }
 }
 
@@ -4892,67 +4888,65 @@ e_ews_connection_find_folder_items (EEwsConnection *cnc,
                                     GAsyncReadyCallback callback,
                                     gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "FindItem",
-                       "Traversal",
-                       "Shallow",
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
-       e_soap_message_start_element (msg, "ItemShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, default_props);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "FindItem",
+               "Traversal",
+               "Shallow",
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
+       e_soap_request_start_element (request, "ItemShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, default_props);
 
-       ews_append_additional_props_to_msg (msg, add_props);
+       ews_append_additional_props_to_msg (request, add_props);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
        /*write restriction message based on query*/
        if (convert_query_cb) {
-               e_soap_message_start_element (msg, "Restriction", "messages", NULL);
+               e_soap_request_start_element (request, "Restriction", "messages", NULL);
 
                if (only_ids && only_ids->len) {
-                       e_soap_message_start_element (msg, "And", "messages", NULL);
-                       e_soap_message_start_element (msg, "Or", "messages", NULL);
-                       ews_connection_write_only_ids_restriction (msg, only_ids);
-                       e_soap_message_end_element (msg); /* Or */
+                       e_soap_request_start_element (request, "And", "messages", NULL);
+                       e_soap_request_start_element (request, "Or", "messages", NULL);
+                       ews_connection_write_only_ids_restriction (request, only_ids);
+                       e_soap_request_end_element (request); /* Or */
                }
 
-               convert_query_cb (msg, query, type);
+               convert_query_cb (request, query, type);
 
                if (only_ids && only_ids->len)
-                       e_soap_message_end_element (msg); /* And */
+                       e_soap_request_end_element (request); /* And */
 
-               e_soap_message_end_element (msg); /* Restriction */
+               e_soap_request_end_element (request); /* Restriction */
        } else if (only_ids && only_ids->len) {
-               e_soap_message_start_element (msg, "Restriction", "messages", NULL);
-               ews_connection_write_only_ids_restriction (msg, only_ids);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "Restriction", "messages", NULL);
+               ews_connection_write_only_ids_restriction (request, only_ids);
+               e_soap_request_end_element (request);
        }
 
        if (sort_order)
-               ews_write_sort_order_to_msg (msg, sort_order);
+               ews_write_sort_order_to_msg (request, sort_order);
 
-       e_soap_message_start_element (msg, "ParentFolderIds", "messages", NULL);
+       e_soap_request_start_element (request, "ParentFolderIds", "messages", NULL);
 
        if (fid->is_distinguished_id)
-               e_ews_message_write_string_parameter_with_attribute (msg, "DistinguishedFolderId", NULL, 
NULL, "Id", fid->id);
+               e_ews_request_write_string_parameter_with_attribute (request, "DistinguishedFolderId", NULL, 
NULL, "Id", fid->id);
        else
-               e_ews_message_write_string_parameter_with_attribute (msg, "FolderId", NULL, NULL, "Id", 
fid->id);
+               e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", 
fid->id);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
        /* Complete the footer and print the request */
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -4963,7 +4957,7 @@ e_ews_connection_find_folder_items (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, find_folder_items_response_cb,
+               cnc, request, find_folder_items_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -5045,37 +5039,35 @@ e_ews_connection_sync_folder_hierarchy (EEwsConnection *cnc,
                                         GAsyncReadyCallback callback,
                                         gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "SyncFolderHierarchy",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "AllProperties");
-       e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
-       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyTag", "4340", NULL, NULL); /* PidTagAttributeHidden */
-       e_soap_message_add_attribute (msg, "PropertyType", "Boolean", NULL, NULL);
-       e_soap_message_end_element (msg); /* ExtendedFieldURI */
-       e_soap_message_end_element (msg); /* AdditionalProperties */
-       e_soap_message_end_element (msg); /* FolderShape */
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "SyncFolderHierarchy",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, "AllProperties");
+       e_soap_request_start_element (request, "AdditionalProperties", NULL, NULL);
+       e_soap_request_start_element (request, "ExtendedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (request, "PropertyTag", "4340", NULL, NULL); /* PidTagAttributeHidden */
+       e_soap_request_add_attribute (request, "PropertyType", "Boolean", NULL, NULL);
+       e_soap_request_end_element (request); /* ExtendedFieldURI */
+       e_soap_request_end_element (request); /* AdditionalProperties */
+       e_soap_request_end_element (request); /* FolderShape */
 
        if (sync_state)
-               e_ews_message_write_string_parameter (msg, "SyncState", "messages", sync_state);
+               e_ews_request_write_string_parameter (request, "SyncState", "messages", sync_state);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -5087,7 +5079,7 @@ e_ews_connection_sync_folder_hierarchy (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, sync_hierarchy_response_cb,
+               cnc, request, sync_hierarchy_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -5233,70 +5225,68 @@ e_ews_connection_get_items (EEwsConnection *cnc,
                             gboolean include_mime,
                             const gchar *mime_directory,
                            EEwsBodyType body_type,
-                            ESoapProgressFn progress_fn,
+                            ESoapResponseProgressFn progress_fn,
                             gpointer progress_data,
                             GCancellable *cancellable,
                             GAsyncReadyCallback callback,
                             gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *l;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetItem",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetItem",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        if (progress_fn && progress_data)
-               e_soap_message_set_progress_fn (msg, progress_fn, progress_data);
+               e_soap_request_set_progress_fn (request, progress_fn, progress_data);
 
-       e_soap_message_start_element (msg, "ItemShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, default_props);
+       e_soap_request_start_element (request, "ItemShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, default_props);
 
        if (include_mime)
-               e_ews_message_write_string_parameter (msg, "IncludeMimeContent", NULL, "true");
+               e_ews_request_write_string_parameter (request, "IncludeMimeContent", NULL, "true");
        else
-               e_ews_message_write_string_parameter (msg, "IncludeMimeContent", NULL, "false");
+               e_ews_request_write_string_parameter (request, "IncludeMimeContent", NULL, "false");
        if (mime_directory)
-               e_soap_message_store_node_data (msg, "MimeContent", mime_directory, TRUE);
+               e_soap_request_store_node_data (request, "MimeContent", mime_directory, TRUE);
 
        switch (body_type) {
        case E_EWS_BODY_TYPE_BEST:
-               e_ews_message_write_string_parameter (msg, "BodyType", NULL, "Best");
+               e_ews_request_write_string_parameter (request, "BodyType", NULL, "Best");
                break;
        case E_EWS_BODY_TYPE_HTML:
-               e_ews_message_write_string_parameter (msg, "BodyType", NULL, "HTML");
+               e_ews_request_write_string_parameter (request, "BodyType", NULL, "HTML");
                break;
        case E_EWS_BODY_TYPE_TEXT:
-               e_ews_message_write_string_parameter (msg, "BodyType", NULL, "Text");
+               e_ews_request_write_string_parameter (request, "BodyType", NULL, "Text");
                break;
        case E_EWS_BODY_TYPE_ANY:
                break;
        }
 
-       ews_append_additional_props_to_msg (msg, add_props);
+       ews_append_additional_props_to_msg (request, add_props);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "ItemIds", "messages", NULL);
+       e_soap_request_start_element (request, "ItemIds", "messages", NULL);
 
        for (l = ids; l != NULL; l = g_slist_next (l))
-               e_ews_message_write_string_parameter_with_attribute (msg, "ItemId", NULL, NULL, "Id", 
l->data);
+               e_ews_request_write_string_parameter_with_attribute (request, "ItemId", NULL, NULL, "Id", 
l->data);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -5307,7 +5297,7 @@ e_ews_connection_get_items (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_items_response_cb,
+               cnc, request, get_items_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -5354,7 +5344,7 @@ e_ews_connection_get_items_sync (EEwsConnection *cnc,
                                  const gchar *mime_directory,
                                 EEwsBodyType body_type,
                                  GSList **items,
-                                 ESoapProgressFn progress_fn,
+                                 ESoapResponseProgressFn progress_fn,
                                  gpointer progress_data,
                                  GCancellable *cancellable,
                                  GError **error)
@@ -5470,43 +5460,39 @@ e_ews_connection_delete_items (EEwsConnection *cnc,
                                GAsyncReadyCallback callback,
                                gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "DeleteItem",
-                       "DeleteType",
-                       ews_delete_type_to_str (delete_type),
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "DeleteItem",
+               "DeleteType",
+               ews_delete_type_to_str (delete_type),
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        if (send_cancels)
-               e_soap_message_add_attribute (
-                       msg, "SendMeetingCancellations",
+               e_soap_request_add_attribute (request, "SendMeetingCancellations",
                        ews_send_cancels_to_str (send_cancels), NULL, NULL);
 
        if (affected_tasks)
-               e_soap_message_add_attribute (
-                       msg, "AffectedTaskOccurrences",
+               e_soap_request_add_attribute (request, "AffectedTaskOccurrences",
                        ews_affected_tasks_to_str (affected_tasks), NULL, NULL);
 
-       e_soap_message_start_element (msg, "ItemIds", "messages", NULL);
+       e_soap_request_start_element (request, "ItemIds", "messages", NULL);
 
        for (iter = ids; iter != NULL; iter = g_slist_next (iter))
-               e_ews_message_write_string_parameter_with_attribute (msg, "ItemId", NULL, NULL, "Id", 
iter->data);
+               e_ews_request_write_string_parameter_with_attribute (request, "ItemId", NULL, NULL, "Id", 
iter->data);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -5517,7 +5503,7 @@ e_ews_connection_delete_items (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, delete_item_response_cb,
+               cnc, request, delete_item_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -5535,56 +5521,52 @@ e_ews_connection_delete_item (EEwsConnection *cnc,
                               GAsyncReadyCallback callback,
                               gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gchar buffer[32];
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "DeleteItem",
-                       "DeleteType",
-                       ews_delete_type_to_str (delete_type),
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "DeleteItem",
+               "DeleteType",
+               ews_delete_type_to_str (delete_type),
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        if (send_cancels)
-               e_soap_message_add_attribute (
-                       msg, "SendMeetingCancellations",
+               e_soap_request_add_attribute (request, "SendMeetingCancellations",
                        ews_send_cancels_to_str (send_cancels), NULL, NULL);
 
        if (affected_tasks != EWS_NONE_OCCURRENCES)
-               e_soap_message_add_attribute (
-                       msg, "AffectedTaskOccurrences",
+               e_soap_request_add_attribute (request, "AffectedTaskOccurrences",
                        ews_affected_tasks_to_str (affected_tasks), NULL, NULL);
 
-       e_soap_message_start_element (msg, "ItemIds", "messages", NULL);
+       e_soap_request_start_element (request, "ItemIds", "messages", NULL);
 
        if (index) {
-               e_soap_message_start_element (msg, "OccurrenceItemId", NULL, NULL);
-               e_soap_message_add_attribute (msg, "RecurringMasterId", item_id->id, NULL, NULL);
+               e_soap_request_start_element (request, "OccurrenceItemId", NULL, NULL);
+               e_soap_request_add_attribute (request, "RecurringMasterId", item_id->id, NULL, NULL);
                if (item_id->change_key)
-                       e_soap_message_add_attribute (msg, "ChangeKey", item_id->change_key, NULL, NULL);
+                       e_soap_request_add_attribute (request, "ChangeKey", item_id->change_key, NULL, NULL);
                snprintf (buffer, 32, "%u", index);
-               e_soap_message_add_attribute (msg, "InstanceIndex", buffer, NULL, NULL);
-               e_soap_message_end_element (msg);
+               e_soap_request_add_attribute (request, "InstanceIndex", buffer, NULL, NULL);
+               e_soap_request_end_element (request);
        } else {
-               e_soap_message_start_element (msg, "ItemId", NULL, NULL);
-               e_soap_message_add_attribute (msg, "Id", item_id->id, NULL, NULL);
+               e_soap_request_start_element (request, "ItemId", NULL, NULL);
+               e_soap_request_add_attribute (request, "Id", item_id->id, NULL, NULL);
                if (item_id->change_key)
-                       e_soap_message_add_attribute (msg, "ChangeKey", item_id->change_key, NULL, NULL);
-               e_soap_message_end_element (msg);
+                       e_soap_request_add_attribute (request, "ChangeKey", item_id->change_key, NULL, NULL);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -5595,7 +5577,7 @@ e_ews_connection_delete_item (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, delete_item_response_cb,
+               cnc, request, delete_item_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -5781,7 +5763,7 @@ xpath_eval (xmlXPathContextPtr ctx,
 }
 
 static gboolean
-element_has_child (ESoapMessage *message,
+element_has_child (ESoapRequest *request,
                   const gchar *path)
 {
        xmlDocPtr doc;
@@ -5791,7 +5773,7 @@ element_has_child (ESoapMessage *message,
        xmlNodePtr node;
        gboolean ret = FALSE;
 
-       doc = e_soap_message_get_xml_doc (message);
+       doc = e_soap_request_get_xml_doc (request);
        xpctx = xmlXPathNewContext (doc);
 
        xmlXPathRegisterNs (
@@ -5843,7 +5825,7 @@ e_ews_connection_update_items (EEwsConnection *cnc,
                                GAsyncReadyCallback callback,
                                gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gboolean success;
@@ -5851,46 +5833,36 @@ e_ews_connection_update_items (EEwsConnection *cnc,
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "UpdateItem",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "UpdateItem",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        if (conflict_res)
-               e_soap_message_add_attribute (
-                       msg, "ConflictResolution",
-                       conflict_res, NULL, NULL);
+               e_soap_request_add_attribute (request, "ConflictResolution", conflict_res, NULL, NULL);
        if (msg_disposition)
-               e_soap_message_add_attribute (
-                       msg, "MessageDisposition",
-                       msg_disposition, NULL, NULL);
+               e_soap_request_add_attribute (request, "MessageDisposition", msg_disposition, NULL, NULL);
        if (send_invites)
-               e_soap_message_add_attribute (
-                       msg, "SendMeetingInvitationsOrCancellations",
-                       send_invites, NULL, NULL);
+               e_soap_request_add_attribute (request, "SendMeetingInvitationsOrCancellations", send_invites, 
NULL, NULL);
 
        if (folder_id) {
-               e_soap_message_start_element (msg, "SavedItemFolderId", "messages", NULL);
-               e_ews_message_write_string_parameter_with_attribute (
-                       msg, "FolderId",
-                       NULL, NULL, "Id", folder_id);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "SavedItemFolderId", "messages", NULL);
+               e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", 
folder_id);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_start_element (msg, "ItemChanges", "messages", NULL);
+       e_soap_request_start_element (request, "ItemChanges", "messages", NULL);
 
-       success = create_cb (msg, create_user_data, &local_error);
+       success = create_cb (request, create_user_data, &local_error);
 
-       e_soap_message_end_element (msg); /* ItemChanges */
+       e_soap_request_end_element (request); /* ItemChanges */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -5904,20 +5876,20 @@ e_ews_connection_update_items (EEwsConnection *cnc,
                if (local_error)
                        g_simple_async_result_take_error (simple, local_error);
                g_simple_async_result_complete_in_idle (simple);
-               g_clear_object (&msg);
+               g_clear_object (&request);
 
        /*
         * We need to check for both namespaces, because, the message is being wrote without use the types
         * namespace. Maybe it is wrong, but the server doesn't complain about that. But this is the reason
         * for the first check. The second one, is related to "how it should be" accord with EWS 
specifications.
         */
-       } else if (!element_has_child (msg, 
"/s:Envelope/s:Body/m:UpdateItem/m:ItemChanges/ItemChange/Updates") &&
-               !element_has_child (msg, 
"/s:Envelope/s:Body/m:UpdateItem/m:ItemChanges/t:ItemChange/t:Updates")) {
+       } else if (!element_has_child (request, 
"/s:Envelope/s:Body/m:UpdateItem/m:ItemChanges/ItemChange/Updates") &&
+               !element_has_child (request, 
"/s:Envelope/s:Body/m:UpdateItem/m:ItemChanges/t:ItemChange/t:Updates")) {
                g_simple_async_result_complete_in_idle (simple);
-               g_clear_object (&msg);
+               g_clear_object (&request);
        } else {
                e_ews_connection_queue_request (
-                       cnc, msg, get_items_response_cb,
+                       cnc, request, get_items_response_cb,
                        pri, cancellable, simple);
        }
 
@@ -6018,7 +5990,7 @@ e_ews_connection_create_items (EEwsConnection *cnc,
                                GAsyncReadyCallback callback,
                                gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gboolean success;
@@ -6026,40 +5998,34 @@ e_ews_connection_create_items (EEwsConnection *cnc,
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "CreateItem",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "CreateItem",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        if (msg_disposition)
-               e_soap_message_add_attribute (
-                       msg, "MessageDisposition",
-                       msg_disposition, NULL, NULL);
+               e_soap_request_add_attribute (request, "MessageDisposition", msg_disposition, NULL, NULL);
        if (send_invites)
-               e_soap_message_add_attribute (
-                       msg, "SendMeetingInvitations",
-                       send_invites, NULL, NULL);
+               e_soap_request_add_attribute (request, "SendMeetingInvitations", send_invites, NULL, NULL);
 
        if (fid) {
-               e_soap_message_start_element (msg, "SavedItemFolderId", "messages", NULL);
-               e_ews_folder_id_append_to_msg (msg, cnc->priv->email, fid);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "SavedItemFolderId", "messages", NULL);
+               e_ews_folder_id_append_to_msg (request, cnc->priv->email, fid);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_start_element (msg, "Items", "messages", NULL);
+       e_soap_request_start_element (request, "Items", "messages", NULL);
 
-       success = create_cb (msg, create_user_data, &local_error);
+       success = create_cb (request, create_user_data, &local_error);
 
-       e_soap_message_end_element (msg); /* Items */
+       e_soap_request_end_element (request); /* Items */
 
-       e_ews_message_write_footer (msg); /* CreateItem */
+       e_ews_request_write_footer (request); /* CreateItem */
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6071,13 +6037,13 @@ e_ews_connection_create_items (EEwsConnection *cnc,
 
        if (success) {
                e_ews_connection_queue_request (
-                       cnc, msg, get_items_response_cb,
+                       cnc, request, get_items_response_cb,
                        pri, cancellable, simple);
        } else {
                if (local_error)
                        g_simple_async_result_take_error (simple, local_error);
                g_simple_async_result_complete_in_idle (simple);
-               g_clear_object (&msg);
+               g_clear_object (&request);
        }
 
        g_object_unref (simple);
@@ -6191,44 +6157,42 @@ e_ews_connection_resolve_names (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "ResolveNames",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "ResolveNames",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_add_attribute (msg, "SearchScope", get_search_scope_str (scope), NULL, NULL);
+       e_soap_request_add_attribute (request, "SearchScope", get_search_scope_str (scope), NULL, NULL);
 
        if (fetch_contact_data) {
-               e_soap_message_add_attribute (msg, "ReturnFullContactData", "true", NULL, NULL);
+               e_soap_request_add_attribute (request, "ReturnFullContactData", "true", NULL, NULL);
 
                if (e_ews_connection_satisfies_server_version (cnc, E_EWS_EXCHANGE_2010_SP2))
-                       e_soap_message_add_attribute (msg, "ContactDataShape", "AllProperties", NULL, NULL);
+                       e_soap_request_add_attribute (request, "ContactDataShape", "AllProperties", NULL, 
NULL);
        } else {
-               e_soap_message_add_attribute (msg, "ReturnFullContactData", "false", NULL, NULL);
+               e_soap_request_add_attribute (request, "ReturnFullContactData", "false", NULL, NULL);
        }
 
        if (parent_folder_ids) {
-               e_soap_message_start_element (msg, "ParentFolderIds", "messages", NULL);
-               ews_append_folder_ids_to_msg (msg, cnc->priv->email, parent_folder_ids);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "ParentFolderIds", "messages", NULL);
+               ews_append_folder_ids_to_msg (request, cnc->priv->email, parent_folder_ids);
+               e_soap_request_end_element (request);
        }
 
-       e_ews_message_write_string_parameter (msg, "UnresolvedEntry", "messages", resolve_name);
+       e_ews_request_write_string_parameter (request, "UnresolvedEntry", "messages", resolve_name);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6239,7 +6203,7 @@ e_ews_connection_resolve_names (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, resolve_names_response_cb,
+               cnc, request, resolve_names_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -6492,40 +6456,38 @@ e_ews_connection_expand_dl (EEwsConnection *cnc,
                             GAsyncReadyCallback callback,
                             gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "ExpandDL",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "ExpandDL",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "Mailbox", "messages", NULL);
+       e_soap_request_start_element (request, "Mailbox", "messages", NULL);
 
        if (mb->item_id) {
-               e_soap_message_start_element (msg, "ItemId", NULL, NULL);
+               e_soap_request_start_element (request, "ItemId", NULL, NULL);
 
-               e_soap_message_add_attribute (msg, "Id", mb->item_id->id, NULL, NULL);
-               e_soap_message_add_attribute (msg, "ChangeKey", mb->item_id->change_key, NULL, NULL);
+               e_soap_request_add_attribute (request, "Id", mb->item_id->id, NULL, NULL);
+               e_soap_request_add_attribute (request, "ChangeKey", mb->item_id->change_key, NULL, NULL);
 
-               e_soap_message_end_element (msg); /* Mailbox */
+               e_soap_request_end_element (request); /* Mailbox */
 
        } else if (mb->email)
-               e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, mb->email);
+               e_ews_request_write_string_parameter (request, "EmailAddress", NULL, mb->email);
 
-       e_soap_message_end_element (msg); /* Mailbox */
+       e_soap_request_end_element (request); /* Mailbox */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6536,7 +6498,7 @@ e_ews_connection_expand_dl (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, expand_dl_response_cb,
+               cnc, request, expand_dl_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -6646,7 +6608,7 @@ e_ews_connection_update_folder (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gboolean success;
@@ -6654,25 +6616,23 @@ e_ews_connection_update_folder (EEwsConnection *cnc,
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "UpdateFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "UpdateFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "FolderChanges", "messages", NULL);
+       e_soap_request_start_element (request, "FolderChanges", "messages", NULL);
 
-       success = create_cb (msg, create_user_data, &local_error);
+       success = create_cb (request, create_user_data, &local_error);
 
-       e_soap_message_end_element (msg); /* FolderChanges */
+       e_soap_request_end_element (request); /* FolderChanges */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6684,13 +6644,13 @@ e_ews_connection_update_folder (EEwsConnection *cnc,
 
        if (success) {
                e_ews_connection_queue_request (
-                       cnc, msg, update_folder_response_cb,
+                       cnc, request, update_folder_response_cb,
                        pri, cancellable, simple);
        } else {
                if (local_error)
                        g_simple_async_result_take_error (simple, local_error);
                g_simple_async_result_complete_in_idle (simple);
-               g_clear_object (&msg);
+               g_clear_object (&request);
        }
 
        g_object_unref (simple);
@@ -6788,43 +6748,35 @@ e_ews_connection_move_folder (EEwsConnection *cnc,
                               GAsyncReadyCallback callback,
                               gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "MoveFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "MoveFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "ToFolderId", "messages", NULL);
+       e_soap_request_start_element (request, "ToFolderId", "messages", NULL);
        if (to_folder)
-               e_ews_message_write_string_parameter_with_attribute (
-                       msg, "FolderId", NULL,
-                       NULL, "Id", to_folder);
+               e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", 
to_folder);
        else
-               e_ews_message_write_string_parameter_with_attribute (
-                       msg, "DistinguishedFolderId", NULL,
-                       NULL, "Id", "msgfolderroot");
+               e_ews_request_write_string_parameter_with_attribute (request, "DistinguishedFolderId", NULL, 
NULL, "Id", "msgfolderroot");
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
-       e_ews_message_write_string_parameter_with_attribute (
-               msg, "FolderId", NULL,
-               NULL, "Id", folder);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", folder);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6835,7 +6787,7 @@ e_ews_connection_move_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, move_folder_response_cb,
+               cnc, request, move_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -6901,37 +6853,35 @@ e_ews_connection_get_folder (EEwsConnection *cnc,
                              GAsyncReadyCallback callback,
                              gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       TRUE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               TRUE);
 
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, folder_shape);
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, folder_shape);
 
-       ews_append_additional_props_to_msg (msg, add_props);
-       e_soap_message_end_element (msg);
+       ews_append_additional_props_to_msg (request, add_props);
+       e_soap_request_end_element (request);
 
        if (folder_ids) {
-               e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
-               ews_append_folder_ids_to_msg (msg, cnc->priv->email, folder_ids);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "FolderIds", "messages", NULL);
+               ews_append_folder_ids_to_msg (request, cnc->priv->email, folder_ids);
+               e_soap_request_end_element (request);
        }
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -6943,7 +6893,7 @@ e_ews_connection_get_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_folder_response_cb,
+               cnc, request, get_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -7022,7 +6972,7 @@ e_ews_connection_create_folder (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const gchar *folder_element;
@@ -7030,37 +6980,33 @@ e_ews_connection_create_folder (EEwsConnection *cnc,
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "CreateFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "CreateFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "ParentFolderId", "messages", NULL);
+       e_soap_request_start_element (request, "ParentFolderId", "messages", NULL);
 
        /* If NULL passed for parent_folder_id, use "msgfolderroot" */
        if (is_distinguished_id || !parent_folder_id) {
-               e_soap_message_start_element (msg, "DistinguishedFolderId", NULL, NULL);
-               e_soap_message_add_attribute (
-                               msg, "Id", parent_folder_id ? parent_folder_id : "msgfolderroot", NULL, NULL);
+               e_soap_request_start_element (request, "DistinguishedFolderId", NULL, NULL);
+               e_soap_request_add_attribute (request, "Id", parent_folder_id ? parent_folder_id : 
"msgfolderroot", NULL, NULL);
                if (is_distinguished_id && cnc->priv->email) {
-                       e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-                       e_ews_message_write_string_parameter(
-                                       msg, "EmailAddress", NULL, cnc->priv->email);
-                       e_soap_message_end_element (msg);
+                       e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+                       e_ews_request_write_string_parameter (request, "EmailAddress", NULL, 
cnc->priv->email);
+                       e_soap_request_end_element (request);
                }
-               e_soap_message_end_element (msg);
+               e_soap_request_end_element (request);
        } else {
-               e_ews_message_write_string_parameter_with_attribute (msg, "FolderId", NULL, NULL, "Id", 
parent_folder_id);
+               e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", 
parent_folder_id);
        }
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
        switch (folder_type) {
                default:
@@ -7092,15 +7038,15 @@ e_ews_connection_create_folder (EEwsConnection *cnc,
                        break;
        }
 
-       e_soap_message_start_element (msg, "Folders", "messages", NULL);
-       e_soap_message_start_element (msg, folder_element, NULL, NULL);
-       e_ews_message_write_string_parameter (msg, "FolderClass", NULL, folder_class);
-       e_ews_message_write_string_parameter (msg, "DisplayName", NULL, folder_name);
+       e_soap_request_start_element (request, "Folders", "messages", NULL);
+       e_soap_request_start_element (request, folder_element, NULL, NULL);
+       e_ews_request_write_string_parameter (request, "FolderClass", NULL, folder_class);
+       e_ews_request_write_string_parameter (request, "DisplayName", NULL, folder_name);
 
-       e_soap_message_end_element (msg);
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -7113,7 +7059,7 @@ e_ews_connection_create_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, create_folder_response_cb,
+               cnc, request, create_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -7191,7 +7137,7 @@ e_ews_connection_move_items (EEwsConnection *cnc,
                              GAsyncReadyCallback callback,
                              gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
@@ -7199,42 +7145,38 @@ e_ews_connection_move_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        if (docopy)
-               msg = e_ews_message_new_with_header (
-                               cnc->priv->settings,
-                               cnc->priv->uri,
-                               cnc->priv->impersonate_user,
-                               "CopyItem",
-                               NULL,
-                               NULL,
-                               cnc->priv->version,
-                               E_EWS_EXCHANGE_2007_SP1,
-                               FALSE,
-                               TRUE);
+               request = e_ews_request_new_with_header (
+                       cnc->priv->uri,
+                       cnc->priv->impersonate_user,
+                       "CopyItem",
+                       NULL,
+                       NULL,
+                       cnc->priv->version,
+                       E_EWS_EXCHANGE_2007_SP1,
+                       FALSE);
        else
-               msg = e_ews_message_new_with_header (
-                               cnc->priv->settings,
-                               cnc->priv->uri,
-                               cnc->priv->impersonate_user,
-                               "MoveItem",
-                               NULL,
-                               NULL,
-                               cnc->priv->version,
-                               E_EWS_EXCHANGE_2007_SP1,
-                               FALSE,
-                               TRUE);
-
-       e_soap_message_start_element (msg, "ToFolderId", "messages", NULL);
-       e_soap_message_start_element (msg, "FolderId", NULL, NULL);
-       e_soap_message_add_attribute (msg, "Id", folder_id, NULL, NULL);
-       e_soap_message_end_element (msg); /* FolderId */
-       e_soap_message_end_element (msg); /* ToFolderId */
-
-       e_soap_message_start_element (msg, "ItemIds", "messages", NULL);
+               request = e_ews_request_new_with_header (
+                       cnc->priv->uri,
+                       cnc->priv->impersonate_user,
+                       "MoveItem",
+                       NULL,
+                       NULL,
+                       cnc->priv->version,
+                       E_EWS_EXCHANGE_2007_SP1,
+                       FALSE);
+
+       e_soap_request_start_element (request, "ToFolderId", "messages", NULL);
+       e_soap_request_start_element (request, "FolderId", NULL, NULL);
+       e_soap_request_add_attribute (request, "Id", folder_id, NULL, NULL);
+       e_soap_request_end_element (request); /* FolderId */
+       e_soap_request_end_element (request); /* ToFolderId */
+
+       e_soap_request_start_element (request, "ItemIds", "messages", NULL);
        for (iter = ids; iter != NULL; iter = g_slist_next (iter))
-               e_ews_message_write_string_parameter_with_attribute (msg, "ItemId", NULL, NULL, "Id", 
iter->data);
-       e_soap_message_end_element (msg); /* ItemIds */
+               e_ews_request_write_string_parameter_with_attribute (request, "ItemId", NULL, NULL, "Id", 
iter->data);
+       e_soap_request_end_element (request); /* ItemIds */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -7245,7 +7187,7 @@ e_ews_connection_move_items (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_items_response_cb,
+               cnc, request, get_items_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -7447,46 +7389,42 @@ e_ews_connection_delete_folder (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "DeleteFolder",
-                       "DeleteType",
-                       delete_type,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "DeleteFolder",
+               "DeleteType",
+               delete_type,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
 
-       e_soap_message_start_element (
-                       msg,
+       e_soap_request_start_element (request,
                        is_distinguished_id ? "DistinguishedFolderId" : "FolderId",
                        NULL,
                        NULL);
-       e_soap_message_add_attribute (msg, "Id", folder_id, NULL, NULL);
+       e_soap_request_add_attribute (request, "Id", folder_id, NULL, NULL);
 
        /* This element is required for delegate access */
        if (is_distinguished_id && cnc->priv->email) {
-               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-               e_ews_message_write_string_parameter(
-                               msg, "EmailAddress", NULL, cnc->priv->email);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "EmailAddress", NULL, cnc->priv->email);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_end_element (msg); /* </DistinguishedFolderId> || </FolderId> */
+       e_soap_request_end_element (request); /* </DistinguishedFolderId> || </FolderId> */
 
-       e_soap_message_end_element (msg); /* </FolderIds> */
+       e_soap_request_end_element (request); /* </FolderIds> */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -7497,7 +7435,7 @@ e_ews_connection_delete_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, delete_folder_response_cb,
+               cnc, request, delete_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -7611,48 +7549,44 @@ e_ews_connection_empty_folder (EEwsConnection *cnc,
                               GAsyncReadyCallback callback,
                               gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "EmptyFolder",
-                       "DeleteType",
-                       delete_type,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2010,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "EmptyFolder",
+               "DeleteType",
+               delete_type,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2010,
+               FALSE);
 
-       e_soap_message_add_attribute (msg, "DeleteSubFolders", delete_subfolders ? "true" : "false", NULL, 
NULL);
+       e_soap_request_add_attribute (request, "DeleteSubFolders", delete_subfolders ? "true" : "false", 
NULL, NULL);
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
 
-       e_soap_message_start_element (
-                       msg,
+       e_soap_request_start_element (request,
                        is_distinguished_id ? "DistinguishedFolderId" : "FolderId",
                        NULL,
                        NULL);
-       e_soap_message_add_attribute (msg, "Id", folder_id, NULL, NULL);
+       e_soap_request_add_attribute (request, "Id", folder_id, NULL, NULL);
 
        /* This element is required for delegate access */
        if (is_distinguished_id && cnc->priv->email) {
-               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-               e_ews_message_write_string_parameter(
-                               msg, "EmailAddress", NULL, cnc->priv->email);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "EmailAddress", NULL, cnc->priv->email);
+               e_soap_request_end_element (request);
        }
 
-       e_soap_message_end_element (msg); /* </DistinguishedFolderId> || </FolderId> */
+       e_soap_request_end_element (request); /* </DistinguishedFolderId> || </FolderId> */
 
-       e_soap_message_end_element (msg); /* </FolderIds> */
+       e_soap_request_end_element (request); /* </FolderIds> */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -7663,7 +7597,7 @@ e_ews_connection_empty_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, empty_folder_response_cb,
+               cnc, request, empty_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -7790,7 +7724,7 @@ create_attachments_response_cb (ESoapResponse *response,
 }
 
 static gboolean
-e_ews_connection_attach_file (ESoapMessage *msg,
+e_ews_connection_attach_file (ESoapRequest *request,
                               EEwsAttachmentInfo *info,
                              gboolean contact_photo,
                              GError **error)
@@ -7842,16 +7776,16 @@ e_ews_connection_attach_file (ESoapMessage *msg,
                        return FALSE;
        }
 
-       e_soap_message_start_element (msg, "FileAttachment", NULL, NULL);
+       e_soap_request_start_element (request, "FileAttachment", NULL, NULL);
 
        prefer_filename = e_ews_attachment_info_get_prefer_filename (info);
-       e_ews_message_write_string_parameter (msg, "Name", NULL, prefer_filename ? prefer_filename : 
filename);
+       e_ews_request_write_string_parameter (request, "Name", NULL, prefer_filename ? prefer_filename : 
filename);
        if (contact_photo)
-               e_ews_message_write_string_parameter (msg, "IsContactPhoto", NULL, "true");
-       e_soap_message_start_element (msg, "Content", NULL, NULL);
-       e_soap_message_write_base64 (msg, content, length);
-       e_soap_message_end_element (msg); /* "Content" */
-       e_soap_message_end_element (msg); /* "FileAttachment" */
+               e_ews_request_write_string_parameter (request, "IsContactPhoto", NULL, "true");
+       e_soap_request_start_element (request, "Content", NULL, NULL);
+       e_soap_request_write_base64 (request, content, length);
+       e_soap_request_end_element (request); /* "Content" */
+       e_soap_request_end_element (request); /* "FileAttachment" */
 
        g_free (filename);
        g_free (buffer);
@@ -7869,7 +7803,7 @@ e_ews_connection_create_attachments (EEwsConnection *cnc,
                                      GAsyncReadyCallback callback,
                                      gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *l;
@@ -7886,29 +7820,27 @@ e_ews_connection_create_attachments (EEwsConnection *cnc,
        g_simple_async_result_set_op_res_gpointer (
                simple, async_data, (GDestroyNotify) async_data_free);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "CreateAttachment",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "CreateAttachment",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "ParentItemId", "messages", NULL);
-       e_soap_message_add_attribute (msg, "Id", parent->id, NULL, NULL);
+       e_soap_request_start_element (request, "ParentItemId", "messages", NULL);
+       e_soap_request_add_attribute (request, "Id", parent->id, NULL, NULL);
        if (parent->change_key)
-               e_soap_message_add_attribute (msg, "ChangeKey", parent->change_key, NULL, NULL);
-       e_soap_message_end_element (msg);
+               e_soap_request_add_attribute (request, "ChangeKey", parent->change_key, NULL, NULL);
+       e_soap_request_end_element (request);
 
        /* start interation over all items to get the attachemnts */
-       e_soap_message_start_element (msg, "Attachments", "messages", NULL);
+       e_soap_request_start_element (request, "Attachments", "messages", NULL);
 
        for (l = files; l != NULL; l = g_slist_next (l))
-               if (!e_ews_connection_attach_file (msg, l->data, is_contact_photo, &local_error)) {
+               if (!e_ews_connection_attach_file (request, l->data, is_contact_photo, &local_error)) {
                        if (local_error != NULL)
                                g_simple_async_result_take_error (simple, local_error);
                        g_simple_async_result_complete_in_idle (simple);
@@ -7917,12 +7849,12 @@ e_ews_connection_create_attachments (EEwsConnection *cnc,
                        return;
                }
 
-       e_soap_message_end_element (msg); /* "Attachments" */
+       e_soap_request_end_element (request); /* "Attachments" */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        e_ews_connection_queue_request (
-               cnc, msg, create_attachments_response_cb,
+               cnc, request, create_attachments_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -8063,35 +7995,33 @@ e_ews_connection_delete_attachments (EEwsConnection *cnc,
                                      GAsyncReadyCallback callback,
                                      gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *l;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "DeleteAttachment",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "DeleteAttachment",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        /* start interation over all items to get the attachemnts */
-       e_soap_message_start_element (msg, "AttachmentIds", "messages", NULL);
+       e_soap_request_start_element (request, "AttachmentIds", "messages", NULL);
 
        for (l = attachments_ids; l != NULL; l = l->next) {
-               e_ews_message_write_string_parameter_with_attribute (msg, "AttachmentId", NULL, NULL, "Id", 
l->data);
+               e_ews_request_write_string_parameter_with_attribute (request, "AttachmentId", NULL, NULL, 
"Id", l->data);
        }
 
-       e_soap_message_end_element (msg); /* "AttachmentIds" */
+       e_soap_request_end_element (request); /* "AttachmentIds" */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -8102,7 +8032,7 @@ e_ews_connection_delete_attachments (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, delete_attachments_response_cb,
+               cnc, request, delete_attachments_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -8248,52 +8178,50 @@ e_ews_connection_get_attachments (EEwsConnection *cnc,
                                   const GSList *ids,
                                   const gchar *cache,
                                   gboolean include_mime,
-                                  ESoapProgressFn progress_fn,
+                                  ESoapResponseProgressFn progress_fn,
                                   gpointer progress_data,
                                   GCancellable *cancellable,
                                   GAsyncReadyCallback callback,
                                   gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *l;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetAttachment",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetAttachment",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
        /* not sure why I need it, need to check */
        if (progress_fn && progress_data)
-               e_soap_message_set_progress_fn (msg, progress_fn, progress_data);
+               e_soap_request_set_progress_fn (request, progress_fn, progress_data);
 
        if (cache)
-               e_soap_message_store_node_data (msg, "MimeContent Content", cache, TRUE);
+               e_soap_request_store_node_data (request, "MimeContent Content", cache, TRUE);
 
        /* wrtie empty attachments shape, need to discover maybe usefull in some cases*/
-       e_soap_message_start_element (msg, "AttachmentShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "IncludeMimeContent", NULL, "true");
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "AttachmentShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "IncludeMimeContent", NULL, "true");
+       e_soap_request_end_element (request);
 
        /* start interation over all items to get the attachemnts */
-       e_soap_message_start_element (msg, "AttachmentIds", "messages", NULL);
+       e_soap_request_start_element (request, "AttachmentIds", "messages", NULL);
 
        for (l = ids; l != NULL; l = g_slist_next (l))
-               e_ews_message_write_string_parameter_with_attribute (msg, "AttachmentId", NULL, NULL, "Id", 
l->data);
+               e_ews_request_write_string_parameter_with_attribute (request, "AttachmentId", NULL, NULL, 
"Id", l->data);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -8306,7 +8234,7 @@ e_ews_connection_get_attachments (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_attachments_response_cb,
+               cnc, request, get_attachments_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -8349,7 +8277,7 @@ e_ews_connection_get_attachments_sync (EEwsConnection *cnc,
                                        const gchar *cache,
                                        gboolean include_mime,
                                        GSList **items,
-                                       ESoapProgressFn progress_fn,
+                                       ESoapResponseProgressFn progress_fn,
                                        gpointer progress_data,
                                        GCancellable *cancellable,
                                        GError **error)
@@ -8555,7 +8483,7 @@ e_ews_connection_get_free_busy (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gboolean success;
@@ -8563,21 +8491,19 @@ e_ews_connection_get_free_busy (EEwsConnection *cnc,
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetUserAvailabilityRequest",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetUserAvailabilityRequest",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       success = free_busy_cb (msg, free_busy_user_data, &local_error);
+       success = free_busy_cb (request, free_busy_user_data, &local_error);
 
-       e_ews_message_write_footer (msg); /*GetUserAvailabilityRequest  */
+       e_ews_request_write_footer (request); /*GetUserAvailabilityRequest  */
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -8589,13 +8515,13 @@ e_ews_connection_get_free_busy (EEwsConnection *cnc,
 
        if (success) {
                e_ews_connection_queue_request (
-                       cnc, msg, get_free_busy_response_cb,
+                       cnc, request, get_free_busy_response_cb,
                        pri, cancellable, simple);
        } else {
                if (local_error)
                        g_simple_async_result_take_error (simple, local_error);
                g_simple_async_result_complete_in_idle (simple);
-               g_clear_object (&msg);
+               g_clear_object (&request);
        }
 
        g_object_unref (simple);
@@ -8841,31 +8767,29 @@ e_ews_connection_get_delegate (EEwsConnection *cnc,
                                GAsyncReadyCallback callback,
                                gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetDelegate",
-                       "IncludePermissions",
-                       include_permissions ? "true" : "false",
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetDelegate",
+               "IncludePermissions",
+               include_permissions ? "true" : "false",
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "Mailbox", "messages", NULL);
+       e_soap_request_start_element (request, "Mailbox", "messages", NULL);
 
-       e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
+       e_ews_request_write_string_parameter (request, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -8876,7 +8800,7 @@ e_ews_connection_get_delegate (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_delegate_response_cb,
+               cnc, request, get_delegate_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -8988,7 +8912,7 @@ update_delegate_response_cb (ESoapResponse *response,
 }
 
 static void
-set_delegate_permission (ESoapMessage *msg,
+set_delegate_permission (ESoapRequest *request,
                          const gchar *elem_name,
                          EwsPermissionLevel perm_level)
 {
@@ -9006,7 +8930,7 @@ set_delegate_permission (ESoapMessage *msg,
        if (!level_name)
                return;
 
-       e_ews_message_write_string_parameter (msg, elem_name, NULL, level_name);
+       e_ews_request_write_string_parameter (request, elem_name, NULL, level_name);
 }
 
 void
@@ -9018,7 +8942,7 @@ e_ews_connection_add_delegate (EEwsConnection *cnc,
                                GAsyncReadyCallback callback,
                                gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
@@ -9026,57 +8950,51 @@ e_ews_connection_add_delegate (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
        g_return_if_fail (delegates != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "AddDelegate",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "AddDelegate",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "Mailbox", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "Mailbox", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "DelegateUsers", "messages", NULL);
+       e_soap_request_start_element (request, "DelegateUsers", "messages", NULL);
        for (iter = delegates; iter; iter = iter->next) {
                const EwsDelegateInfo *di = iter->data;
 
                if (!di)
                        continue;
 
-               e_soap_message_start_element (msg, "DelegateUser", NULL, NULL);
+               e_soap_request_start_element (request, "DelegateUser", NULL, NULL);
 
-               e_soap_message_start_element (msg, "UserId", NULL, NULL);
-               e_ews_message_write_string_parameter (msg, "PrimarySmtpAddress", NULL, 
di->user_id->primary_smtp);
-               e_soap_message_end_element (msg); /* UserId */
+               e_soap_request_start_element (request, "UserId", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "PrimarySmtpAddress", NULL, 
di->user_id->primary_smtp);
+               e_soap_request_end_element (request); /* UserId */
 
-               e_soap_message_start_element (msg, "DelegatePermissions", NULL, NULL);
-               set_delegate_permission (msg, "CalendarFolderPermissionLevel", di->calendar);
-               set_delegate_permission (msg, "TasksFolderPermissionLevel", di->tasks);
-               set_delegate_permission (msg, "InboxFolderPermissionLevel", di->inbox);
-               set_delegate_permission (msg, "ContactsFolderPermissionLevel", di->contacts);
-               set_delegate_permission (msg, "NotesFolderPermissionLevel", di->notes);
-               set_delegate_permission (msg, "JournalFolderPermissionLevel", di->journal);
-               e_soap_message_end_element (msg); /* DelegatePermissions */
+               e_soap_request_start_element (request, "DelegatePermissions", NULL, NULL);
+               set_delegate_permission (request, "CalendarFolderPermissionLevel", di->calendar);
+               set_delegate_permission (request, "TasksFolderPermissionLevel", di->tasks);
+               set_delegate_permission (request, "InboxFolderPermissionLevel", di->inbox);
+               set_delegate_permission (request, "ContactsFolderPermissionLevel", di->contacts);
+               set_delegate_permission (request, "NotesFolderPermissionLevel", di->notes);
+               set_delegate_permission (request, "JournalFolderPermissionLevel", di->journal);
+               e_soap_request_end_element (request); /* DelegatePermissions */
 
-               e_ews_message_write_string_parameter (
-                       msg, "ReceiveCopiesOfMeetingMessages", NULL,
-                       di->meetingcopies ? "true" : "false");
-               e_ews_message_write_string_parameter (
-                       msg, "ViewPrivateItems", NULL,
-                       di->view_priv_items ? "true" : "false");
+               e_ews_request_write_string_parameter (request, "ReceiveCopiesOfMeetingMessages", NULL, 
di->meetingcopies ? "true" : "false");
+               e_ews_request_write_string_parameter (request, "ViewPrivateItems", NULL, di->view_priv_items 
? "true" : "false");
 
-               e_soap_message_end_element (msg); /* DelegateUser */
+               e_soap_request_end_element (request); /* DelegateUser */
        }
 
-       e_soap_message_end_element (msg); /* DelegateUsers */
+       e_soap_request_end_element (request); /* DelegateUsers */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9087,7 +9005,7 @@ e_ews_connection_add_delegate (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, update_delegate_response_cb,
+               cnc, request, update_delegate_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9150,7 +9068,7 @@ e_ews_connection_remove_delegate (EEwsConnection *cnc,
                                   GAsyncReadyCallback callback,
                                   gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
@@ -9158,37 +9076,35 @@ e_ews_connection_remove_delegate (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
        g_return_if_fail (delegate_ids != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "RemoveDelegate",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "RemoveDelegate",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "Mailbox", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "Mailbox", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "UserIds", "messages", NULL);
+       e_soap_request_start_element (request, "UserIds", "messages", NULL);
        for (iter = delegate_ids; iter; iter = iter->next) {
                const EwsUserId *user_id = iter->data;
 
                if (!user_id)
                        continue;
 
-               e_soap_message_start_element (msg, "UserId", NULL, NULL);
-               e_ews_message_write_string_parameter (msg, "PrimarySmtpAddress", NULL, user_id->primary_smtp);
-               e_soap_message_end_element (msg); /* UserId */
+               e_soap_request_start_element (request, "UserId", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "PrimarySmtpAddress", NULL, 
user_id->primary_smtp);
+               e_soap_request_end_element (request); /* UserId */
        }
 
-       e_soap_message_end_element (msg); /* UserIds */
+       e_soap_request_end_element (request); /* UserIds */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9199,7 +9115,7 @@ e_ews_connection_remove_delegate (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, update_delegate_response_cb,
+               cnc, request, update_delegate_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9263,72 +9179,65 @@ e_ews_connection_update_delegate (EEwsConnection *cnc,
                                   GAsyncReadyCallback callback,
                                   gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "UpdateDelegate",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "UpdateDelegate",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "Mailbox", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "Mailbox", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "EmailAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
+       e_soap_request_end_element (request);
 
        if (delegates) {
-               e_soap_message_start_element (msg, "DelegateUsers", "messages", NULL);
+               e_soap_request_start_element (request, "DelegateUsers", "messages", NULL);
                for (iter = delegates; iter; iter = iter->next) {
                        const EwsDelegateInfo *di = iter->data;
 
                        if (!di)
                                continue;
 
-                       e_soap_message_start_element (msg, "DelegateUser", NULL, NULL);
-
-                       e_soap_message_start_element (msg, "UserId", NULL, NULL);
-                       e_ews_message_write_string_parameter (msg, "PrimarySmtpAddress", NULL, 
di->user_id->primary_smtp);
-                       e_soap_message_end_element (msg); /* UserId */
-
-                       e_soap_message_start_element (msg, "DelegatePermissions", NULL, NULL);
-                       set_delegate_permission (msg, "CalendarFolderPermissionLevel", di->calendar);
-                       set_delegate_permission (msg, "TasksFolderPermissionLevel", di->tasks);
-                       set_delegate_permission (msg, "InboxFolderPermissionLevel", di->inbox);
-                       set_delegate_permission (msg, "ContactsFolderPermissionLevel", di->contacts);
-                       set_delegate_permission (msg, "NotesFolderPermissionLevel", di->notes);
-                       set_delegate_permission (msg, "JournalFolderPermissionLevel", di->journal);
-                       e_soap_message_end_element (msg); /* DelegatePermissions */
-
-                       e_ews_message_write_string_parameter (
-                               msg, "ReceiveCopiesOfMeetingMessages", NULL,
-                               di->meetingcopies ? "true" : "false");
-                       e_ews_message_write_string_parameter (
-                               msg, "ViewPrivateItems", NULL,
-                               di->view_priv_items ? "true" : "false");
-
-                       e_soap_message_end_element (msg); /* DelegateUser */
+                       e_soap_request_start_element (request, "DelegateUser", NULL, NULL);
+
+                       e_soap_request_start_element (request, "UserId", NULL, NULL);
+                       e_ews_request_write_string_parameter (request, "PrimarySmtpAddress", NULL, 
di->user_id->primary_smtp);
+                       e_soap_request_end_element (request); /* UserId */
+
+                       e_soap_request_start_element (request, "DelegatePermissions", NULL, NULL);
+                       set_delegate_permission (request, "CalendarFolderPermissionLevel", di->calendar);
+                       set_delegate_permission (request, "TasksFolderPermissionLevel", di->tasks);
+                       set_delegate_permission (request, "InboxFolderPermissionLevel", di->inbox);
+                       set_delegate_permission (request, "ContactsFolderPermissionLevel", di->contacts);
+                       set_delegate_permission (request, "NotesFolderPermissionLevel", di->notes);
+                       set_delegate_permission (request, "JournalFolderPermissionLevel", di->journal);
+                       e_soap_request_end_element (request); /* DelegatePermissions */
+
+                       e_ews_request_write_string_parameter (request, "ReceiveCopiesOfMeetingMessages", 
NULL, di->meetingcopies ? "true" : "false");
+                       e_ews_request_write_string_parameter (request, "ViewPrivateItems", NULL, 
di->view_priv_items ? "true" : "false");
+
+                       e_soap_request_end_element (request); /* DelegateUser */
                }
 
-               e_soap_message_end_element (msg); /* DelegateUsers */
+               e_soap_request_end_element (request); /* DelegateUsers */
        }
 
-       e_ews_message_write_string_parameter (
-               msg, "DeliverMeetingRequests", "messages",
+       e_ews_request_write_string_parameter (request, "DeliverMeetingRequests", "messages",
                deliver_to == EwsDelegateDeliver_DelegatesOnly ? "DelegatesOnly" :
                deliver_to == EwsDelegateDeliver_DelegatesAndMe ? "DelegatesAndMe" :
                "DelegatesAndSendInformationToMe");
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9339,7 +9248,7 @@ e_ews_connection_update_delegate (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, update_delegate_response_cb,
+               cnc, request, update_delegate_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9458,37 +9367,35 @@ e_ews_connection_get_folder_permissions (EEwsConnection *cnc,
                                          GAsyncReadyCallback callback,
                                          gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
        g_return_if_fail (folder_id != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "IdOnly");
-       e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:PermissionSet");
-       e_soap_message_end_element (msg); /* AdditionalProperties */
-       e_soap_message_end_element (msg); /* FolderShape */
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, "IdOnly");
+       e_soap_request_start_element (request, "AdditionalProperties", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:PermissionSet");
+       e_soap_request_end_element (request); /* AdditionalProperties */
+       e_soap_request_end_element (request); /* FolderShape */
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
-       e_ews_folder_id_append_to_msg (msg, cnc->priv->email, folder_id);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
+       e_ews_folder_id_append_to_msg (request, cnc->priv->email, folder_id);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9499,7 +9406,7 @@ e_ews_connection_get_folder_permissions (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_folder_permissions_response_cb,
+               cnc, request, get_folder_permissions_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9576,7 +9483,7 @@ e_ews_connection_set_folder_permissions (EEwsConnection *cnc,
                                          GAsyncReadyCallback callback,
                                          gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        const GSList *iter;
@@ -9585,48 +9492,46 @@ e_ews_connection_set_folder_permissions (EEwsConnection *cnc,
        g_return_if_fail (folder_id != NULL);
        g_return_if_fail (permissions != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "UpdateFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "UpdateFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "FolderChanges", "messages", NULL);
-       e_ews_message_start_folder_change (msg, cnc->priv->email, folder_id);
+       e_soap_request_start_element (request, "FolderChanges", "messages", NULL);
+       e_ews_request_start_folder_change (request, cnc->priv->email, folder_id);
 
-       e_soap_message_start_element (msg, "SetFolderField", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:PermissionSet");
+       e_soap_request_start_element (request, "SetFolderField", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:PermissionSet");
 
        switch (folder_type) {
        default:
        case E_EWS_FOLDER_TYPE_MAILBOX:
-               e_soap_message_start_element (msg, "Folder", NULL, NULL);
+               e_soap_request_start_element (request, "Folder", NULL, NULL);
                break;
        case E_EWS_FOLDER_TYPE_CALENDAR:
-               e_soap_message_start_element (msg, "CalendarFolder", NULL, NULL);
+               e_soap_request_start_element (request, "CalendarFolder", NULL, NULL);
                break;
        case E_EWS_FOLDER_TYPE_CONTACTS:
-               e_soap_message_start_element (msg, "ContactsFolder", NULL, NULL);
+               e_soap_request_start_element (request, "ContactsFolder", NULL, NULL);
                break;
        case E_EWS_FOLDER_TYPE_SEARCH:
-               e_soap_message_start_element (msg, "SearchFolder", NULL, NULL);
+               e_soap_request_start_element (request, "SearchFolder", NULL, NULL);
                break;
        case E_EWS_FOLDER_TYPE_TASKS:
-               e_soap_message_start_element (msg, "TasksFolder", NULL, NULL);
+               e_soap_request_start_element (request, "TasksFolder", NULL, NULL);
                break;
        }
 
-       e_soap_message_start_element (msg, "PermissionSet", NULL, NULL);
+       e_soap_request_start_element (request, "PermissionSet", NULL, NULL);
        if (folder_type == E_EWS_FOLDER_TYPE_CALENDAR)
-               e_soap_message_start_element (msg, "CalendarPermissions", NULL, NULL);
+               e_soap_request_start_element (request, "CalendarPermissions", NULL, NULL);
        else
-               e_soap_message_start_element (msg, "Permissions", NULL, NULL);
+               e_soap_request_start_element (request, "Permissions", NULL, NULL);
 
        for (iter = permissions; iter; iter = iter->next) {
                EEwsPermission *perm = iter->data;
@@ -9636,85 +9541,75 @@ e_ews_connection_set_folder_permissions (EEwsConnection *cnc,
                        continue;
 
                if (folder_type == E_EWS_FOLDER_TYPE_CALENDAR)
-                       e_soap_message_start_element (msg, "CalendarPermission", NULL, NULL);
+                       e_soap_request_start_element (request, "CalendarPermission", NULL, NULL);
                else
-                       e_soap_message_start_element (msg, "Permission", NULL, NULL);
+                       e_soap_request_start_element (request, "Permission", NULL, NULL);
 
-               e_soap_message_start_element (msg, "UserId", NULL, NULL);
+               e_soap_request_start_element (request, "UserId", NULL, NULL);
 
                switch (perm->user_type) {
                case E_EWS_PERMISSION_USER_TYPE_NONE:
                        g_return_if_reached ();
                        break;
                case E_EWS_PERMISSION_USER_TYPE_ANONYMOUS:
-                       e_ews_message_write_string_parameter (msg, "DistinguishedUser", NULL, "Anonymous");
+                       e_ews_request_write_string_parameter (request, "DistinguishedUser", NULL, 
"Anonymous");
                        break;
                case E_EWS_PERMISSION_USER_TYPE_DEFAULT:
-                       e_ews_message_write_string_parameter (msg, "DistinguishedUser", NULL, "Default");
+                       e_ews_request_write_string_parameter (request, "DistinguishedUser", NULL, "Default");
                        break;
                case E_EWS_PERMISSION_USER_TYPE_REGULAR:
-                       e_ews_message_write_string_parameter (msg, "PrimarySmtpAddress", NULL, 
perm->primary_smtp);
+                       e_ews_request_write_string_parameter (request, "PrimarySmtpAddress", NULL, 
perm->primary_smtp);
                        break;
                }
 
-               e_soap_message_end_element (msg); /* UserId */
+               e_soap_request_end_element (request); /* UserId */
 
                e_ews_permission_rights_to_level_name (perm->rights);
 
                perm_level_name = e_ews_permission_rights_to_level_name (perm->rights);
 
                if (g_strcmp0 (perm_level_name, "Custom") == 0) {
-                       e_ews_message_write_string_parameter (
-                               msg, "CanCreateItems", NULL,
+                       e_ews_request_write_string_parameter (request, "CanCreateItems", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_CREATE) != 0 ? "true" : "false");
-                       e_ews_message_write_string_parameter (
-                               msg, "CanCreateSubFolders", NULL,
+                       e_ews_request_write_string_parameter (request, "CanCreateSubFolders", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_CREATE_SUBFOLDER) != 0 ? "true" : 
"false");
-                       e_ews_message_write_string_parameter (
-                               msg, "IsFolderOwner", NULL,
+                       e_ews_request_write_string_parameter (request, "IsFolderOwner", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_FOLDER_OWNER) != 0 ? "true" : "false");
-                       e_ews_message_write_string_parameter (
-                               msg, "IsFolderVisible", NULL,
+                       e_ews_request_write_string_parameter (request, "IsFolderVisible", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_FOLDER_VISIBLE) != 0 ? "true" : "false");
-                       e_ews_message_write_string_parameter (
-                               msg, "IsFolderContact", NULL,
+                       e_ews_request_write_string_parameter (request, "IsFolderContact", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_FOLDER_CONTACT) != 0 ? "true" : "false");
-                       e_ews_message_write_string_parameter (
-                               msg, "EditItems", NULL,
+                       e_ews_request_write_string_parameter (request, "EditItems", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_EDIT_ANY) != 0 ? "All" :
                                (perm->rights & E_EWS_PERMISSION_BIT_EDIT_OWNED) != 0 ? "Owned" : "None");
-                       e_ews_message_write_string_parameter (
-                               msg, "DeleteItems", NULL,
+                       e_ews_request_write_string_parameter (request, "DeleteItems", NULL,
                                (perm->rights & E_EWS_PERMISSION_BIT_DELETE_ANY) != 0 ? "All" :
                                (perm->rights & E_EWS_PERMISSION_BIT_DELETE_OWNED) != 0 ? "Owned" : "None");
                        if (folder_type == E_EWS_FOLDER_TYPE_CALENDAR)
-                               e_ews_message_write_string_parameter (
-                                       msg, "ReadItems", NULL,
+                               e_ews_request_write_string_parameter (request, "ReadItems", NULL,
                                        (perm->rights & E_EWS_PERMISSION_BIT_READ_ANY) != 0 ? "FullDetails" :
                                        (perm->rights & E_EWS_PERMISSION_BIT_FREE_BUSY_DETAILED) != 0 ? 
"TimeAndSubjectAndLocation" :
                                        (perm->rights & E_EWS_PERMISSION_BIT_FREE_BUSY_SIMPLE) != 0 ? 
"TimeOnly" : "None");
                        else
-                               e_ews_message_write_string_parameter (
-                                       msg, "ReadItems", NULL,
+                               e_ews_request_write_string_parameter (request, "ReadItems", NULL,
                                        (perm->rights & E_EWS_PERMISSION_BIT_READ_ANY) != 0 ? "FullDetails" : 
"None");
                }
 
-               e_ews_message_write_string_parameter (
-                       msg,
+               e_ews_request_write_string_parameter (request,
                        folder_type == E_EWS_FOLDER_TYPE_CALENDAR ? "CalendarPermissionLevel" : 
"PermissionLevel", NULL,
                        perm_level_name);
 
-               e_soap_message_end_element (msg); /* Permission/CalendarPermission */
+               e_soap_request_end_element (request); /* Permission/CalendarPermission */
        }
 
-       e_soap_message_end_element (msg); /* Permissions */
-       e_soap_message_end_element (msg); /* PermissionSet */
-       e_soap_message_end_element (msg); /* Folder/CalendarFolder/... */
-       e_soap_message_end_element (msg); /* SetFolderField */
+       e_soap_request_end_element (request); /* Permissions */
+       e_soap_request_end_element (request); /* PermissionSet */
+       e_soap_request_end_element (request); /* Folder/CalendarFolder/... */
+       e_soap_request_end_element (request); /* SetFolderField */
 
-       e_ews_message_end_item_change (msg);
+       e_ews_request_end_item_change (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9725,7 +9620,7 @@ e_ews_connection_set_folder_permissions (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, update_folder_response_cb,
+               cnc, request, update_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9828,23 +9723,21 @@ e_ews_connection_get_password_expiration (EEwsConnection *cnc,
                                           GAsyncReadyCallback callback,
                                           gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetPasswordExpirationDate",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2010_SP2,
-                       FALSE,
-                       TRUE);
-       e_ews_message_write_string_parameter (msg, "MailboxSmtpAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
-       e_ews_message_write_footer (msg);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetPasswordExpirationDate",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2010_SP2,
+               FALSE);
+       e_ews_request_write_string_parameter (request, "MailboxSmtpAddress", NULL, mail_id ? mail_id : 
cnc->priv->email);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -9855,7 +9748,7 @@ e_ews_connection_get_password_expiration (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_password_expiration_response_cb,
+               cnc, request, get_password_expiration_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -9990,38 +9883,36 @@ e_ews_connection_get_folder_info (EEwsConnection *cnc,
                                   GAsyncReadyCallback callback,
                                   gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
        g_return_if_fail (folder_id != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
 
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "Default");
-       e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:FolderClass");
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:ParentFolderId");
-       e_soap_message_end_element (msg); /* AdditionalProperties */
-       e_soap_message_end_element (msg); /* FolderShape */
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, "Default");
+       e_soap_request_start_element (request, "AdditionalProperties", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:FolderClass");
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:ParentFolderId");
+       e_soap_request_end_element (request); /* AdditionalProperties */
+       e_soap_request_end_element (request); /* FolderShape */
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
-       e_ews_folder_id_append_to_msg (msg, mail_id, folder_id);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
+       e_ews_folder_id_append_to_msg (request, mail_id, folder_id);
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -10032,7 +9923,7 @@ e_ews_connection_get_folder_info (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, get_folder_info_response_cb,
+               cnc, request, get_folder_info_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -10187,42 +10078,40 @@ e_ews_connection_find_folder (EEwsConnection *cnc,
                              GAsyncReadyCallback callback,
                              gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "FindFolder",
-                       "Traversal",
-                       "Shallow",
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       FALSE,
-                       TRUE);
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "Default");
-       e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:FolderClass");
-       e_ews_message_write_string_parameter_with_attribute (msg, "FieldURI", NULL, NULL, "FieldURI", 
"folder:ChildFolderCount");
-       e_soap_message_end_element (msg); /* AdditionalProperties */
-       e_soap_message_end_element (msg);
-
-       e_soap_message_start_element (msg, "ParentFolderIds", "messages", NULL);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "FindFolder",
+               "Traversal",
+               "Shallow",
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               FALSE);
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, "Default");
+       e_soap_request_start_element (request, "AdditionalProperties", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:FolderClass");
+       e_ews_request_write_string_parameter_with_attribute (request, "FieldURI", NULL, NULL, "FieldURI", 
"folder:ChildFolderCount");
+       e_soap_request_end_element (request); /* AdditionalProperties */
+       e_soap_request_end_element (request);
+
+       e_soap_request_start_element (request, "ParentFolderIds", "messages", NULL);
 
        if (fid->is_distinguished_id)
-               e_ews_message_write_string_parameter_with_attribute (msg, "DistinguishedFolderId", NULL, 
NULL, "Id", fid->id);
+               e_ews_request_write_string_parameter_with_attribute (request, "DistinguishedFolderId", NULL, 
NULL, "Id", fid->id);
        else
-               e_ews_message_write_string_parameter_with_attribute (msg, "FolderId", NULL, NULL, "Id", 
fid->id);
+               e_ews_request_write_string_parameter_with_attribute (request, "FolderId", NULL, NULL, "Id", 
fid->id);
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (request);
 
        /* Complete the footer and print the request */
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -10233,7 +10122,7 @@ e_ews_connection_find_folder (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        e_ews_connection_queue_request (
-               cnc, msg, find_folder_response_cb,
+               cnc, request, find_folder_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -10376,34 +10265,32 @@ e_ews_connection_query_auth_methods (EEwsConnection *cnc,
                                     GAsyncReadyCallback callback,
                                     gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
        g_return_if_fail (cnc != NULL);
 
        /* use some simple operation to get WWW-Authenticate headers from the server */
-       msg = e_ews_message_new_with_header (
-                       cnc->priv->settings,
-                       cnc->priv->uri,
-                       cnc->priv->impersonate_user,
-                       "GetFolder",
-                       NULL,
-                       NULL,
-                       cnc->priv->version,
-                       E_EWS_EXCHANGE_2007_SP1,
-                       TRUE,
-                       TRUE);
+       request = e_ews_request_new_with_header (
+               cnc->priv->uri,
+               cnc->priv->impersonate_user,
+               "GetFolder",
+               NULL,
+               NULL,
+               cnc->priv->version,
+               E_EWS_EXCHANGE_2007_SP1,
+               TRUE);
 
-       e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
-       e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "IdOnly");
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "FolderShape", "messages", NULL);
+       e_ews_request_write_string_parameter (request, "BaseShape", NULL, "IdOnly");
+       e_soap_request_end_element (request);
 
-       e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "DistinguishedFolderId", NULL, NULL, "Id", 
"inbox");
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "FolderIds", "messages", NULL);
+       e_ews_request_write_string_parameter_with_attribute (request, "DistinguishedFolderId", NULL, NULL, 
"Id", "inbox");
+       e_soap_request_end_element (request);
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -10413,11 +10300,11 @@ e_ews_connection_query_auth_methods (EEwsConnection *cnc,
        g_simple_async_result_set_op_res_gpointer (
                simple, async_data, (GDestroyNotify) async_data_free);
 
-       soup_message_add_header_handler (SOUP_MESSAGE (msg), "got-headers", "WWW-Authenticate",
+       soup_message_add_header_handler (SOUP_MESSAGE (request), "got-headers", "WWW-Authenticate",
                G_CALLBACK (ews_connection_gather_auth_methods_cb), simple);
 
        e_ews_connection_queue_request (
-               cnc, msg, query_auth_methods_response_cb,
+               cnc, request, query_auth_methods_response_cb,
                pri, cancellable, simple);
 
        g_object_unref (simple);
@@ -11247,7 +11134,7 @@ e_ews_connection_get_server_time_zones (EEwsConnection *cnc,
                                        GAsyncReadyCallback callback,
                                        gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        GSList *l;
@@ -11270,8 +11157,7 @@ e_ews_connection_get_server_time_zones (EEwsConnection *cnc,
                return;
        }
 
-       msg = e_ews_message_new_with_header (
-               cnc->priv->settings,
+       request = e_ews_request_new_with_header (
                cnc->priv->uri,
                cnc->priv->impersonate_user,
                "GetServerTimeZones",
@@ -11279,17 +11165,16 @@ e_ews_connection_get_server_time_zones (EEwsConnection *cnc,
                "true",
                cnc->priv->version,
                E_EWS_EXCHANGE_2010,
-               FALSE,
-               TRUE);
+               FALSE);
 
-       e_soap_message_start_element (msg, "Ids", "messages", NULL);
+       e_soap_request_start_element (request, "Ids", "messages", NULL);
        for (l = msdn_locations; l != NULL; l = l->next)
-               e_ews_message_write_string_parameter_with_attribute (msg, "Id", NULL, l->data, NULL, NULL);
-       e_soap_message_end_element (msg); /* Ids */
+               e_ews_request_write_string_parameter_with_attribute (request, "Id", NULL, l->data, NULL, 
NULL);
+       e_soap_request_end_element (request); /* Ids */
 
-       e_ews_message_write_footer (msg); /* Complete the footer and print the request */
+       e_ews_request_write_footer (request); /* Complete the footer and print the request */
 
-       e_ews_connection_queue_request (cnc, msg, get_server_time_zones_response_cb, pri, cancellable, 
simple);
+       e_ews_connection_queue_request (cnc, request, get_server_time_zones_response_cb, pri, cancellable, 
simple);
 
        g_object_unref (simple);
 }
@@ -11394,7 +11279,7 @@ e_ews_connection_get_user_photo (EEwsConnection *cnc,
                                 GAsyncReadyCallback callback,
                                 gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        gchar *tmp;
@@ -11416,8 +11301,7 @@ e_ews_connection_get_user_photo (EEwsConnection *cnc,
                return;
        }
 
-       msg = e_ews_message_new_with_header (
-               cnc->priv->settings,
+       request = e_ews_request_new_with_header (
                cnc->priv->uri,
                cnc->priv->impersonate_user,
                "GetUserPhoto",
@@ -11425,22 +11309,21 @@ e_ews_connection_get_user_photo (EEwsConnection *cnc,
                NULL,
                cnc->priv->version,
                E_EWS_EXCHANGE_2013,
-               FALSE,
-               TRUE);
+               FALSE);
 
-       e_soap_message_start_element (msg, "Email", "messages", NULL);
-       e_soap_message_write_string (msg, email);
-       e_soap_message_end_element (msg); /* Email */
+       e_soap_request_start_element (request, "Email", "messages", NULL);
+       e_soap_request_write_string (request, email);
+       e_soap_request_end_element (request); /* Email */
 
-       e_soap_message_start_element (msg, "SizeRequested", "messages", NULL);
+       e_soap_request_start_element (request, "SizeRequested", "messages", NULL);
        tmp = g_strdup_printf ("HR%dx%d", (gint) size_requested, size_requested);
-       e_soap_message_write_string (msg, tmp);
+       e_soap_request_write_string (request, tmp);
        g_free (tmp);
-       e_soap_message_end_element (msg); /* SizeRequested */
+       e_soap_request_end_element (request); /* SizeRequested */
 
-       e_ews_message_write_footer (msg); /* Complete the footer and print the request */
+       e_ews_request_write_footer (request); /* Complete the footer and print the request */
 
-       e_ews_connection_queue_request (cnc, msg, get_user_photo_response_cb, pri, cancellable, simple);
+       e_ews_connection_queue_request (cnc, request, get_user_photo_response_cb, pri, cancellable, simple);
 
        g_object_unref (simple);
 }
@@ -11594,7 +11477,7 @@ e_ews_connection_get_user_configuration (EEwsConnection *cnc,
                                         GAsyncReadyCallback callback,
                                         gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
        EwsFolderId local_fid;
@@ -11618,8 +11501,7 @@ e_ews_connection_get_user_configuration (EEwsConnection *cnc,
        local_fid = *fid;
        local_fid.change_key = NULL;
 
-       msg = e_ews_message_new_with_header (
-               cnc->priv->settings,
+       request = e_ews_request_new_with_header (
                cnc->priv->uri,
                cnc->priv->impersonate_user,
                "GetUserConfiguration",
@@ -11627,44 +11509,43 @@ e_ews_connection_get_user_configuration (EEwsConnection *cnc,
                NULL,
                cnc->priv->version,
                E_EWS_EXCHANGE_2010,
-               FALSE,
-               TRUE);
+               FALSE);
 
-       e_soap_message_start_element (msg, "UserConfigurationName", "messages", NULL);
-       e_soap_message_add_attribute (msg, "Name", config_name, NULL, NULL);
+       e_soap_request_start_element (request, "UserConfigurationName", "messages", NULL);
+       e_soap_request_add_attribute (request, "Name", config_name, NULL, NULL);
 
-       e_ews_folder_id_append_to_msg (msg, cnc->priv->email, &local_fid);
+       e_ews_folder_id_append_to_msg (request, cnc->priv->email, &local_fid);
 
-       e_soap_message_end_element (msg); /* UserConfigurationName */
+       e_soap_request_end_element (request); /* UserConfigurationName */
 
-       e_soap_message_start_element (msg, "UserConfigurationProperties", "messages", NULL);
+       e_soap_request_start_element (request, "UserConfigurationProperties", "messages", NULL);
 
        switch (props) {
        case E_EWS_USER_CONFIGURATION_PROPERTIES_ID:
-               e_soap_message_write_string (msg, "Id");
+               e_soap_request_write_string (request, "Id");
                break;
        case E_EWS_USER_CONFIGURATION_PROPERTIES_DICTIONARY:
-               e_soap_message_write_string (msg, "Dictionary");
+               e_soap_request_write_string (request, "Dictionary");
                break;
        case E_EWS_USER_CONFIGURATION_PROPERTIES_XMLDATA:
-               e_soap_message_write_string (msg, "XmlData");
+               e_soap_request_write_string (request, "XmlData");
                break;
        case E_EWS_USER_CONFIGURATION_PROPERTIES_BINARYDATA:
-               e_soap_message_write_string (msg, "BinaryData");
+               e_soap_request_write_string (request, "BinaryData");
                break;
        /* case E_EWS_USER_CONFIGURATION_PROPERTIES_ALL:
-               e_soap_message_write_string (msg, "All");
+               e_soap_request_write_string (request, "All");
                break; */
        default:
-               e_soap_message_write_string (msg, "Unknown");
+               e_soap_request_write_string (request, "Unknown");
                break;
        }
 
-       e_soap_message_end_element (msg); /* UserConfigurationProperties */
+       e_soap_request_end_element (request); /* UserConfigurationProperties */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
-       e_ews_connection_queue_request (cnc, msg, get_user_configuration_response_cb, pri, cancellable, 
simple);
+       e_ews_connection_queue_request (cnc, request, get_user_configuration_response_cb, pri, cancellable, 
simple);
 
        g_object_unref (simple);
 }
@@ -11783,7 +11664,7 @@ e_ews_connection_convert_id (EEwsConnection *cnc,
                             GAsyncReadyCallback callback,
                             gpointer user_data)
 {
-       ESoapMessage *msg;
+       ESoapRequest *request;
        GSimpleAsyncResult *simple;
        EwsAsyncData *async_data;
 
@@ -11806,8 +11687,7 @@ e_ews_connection_convert_id (EEwsConnection *cnc,
                return;
        }
 
-       msg = e_ews_message_new_with_header (
-               cnc->priv->settings,
+       request = e_ews_request_new_with_header (
                cnc->priv->uri,
                cnc->priv->impersonate_user,
                "ConvertId",
@@ -11815,22 +11695,21 @@ e_ews_connection_convert_id (EEwsConnection *cnc,
                to_format,
                cnc->priv->version,
                E_EWS_EXCHANGE_2007_SP1,
-               FALSE,
-               TRUE);
+               FALSE);
 
-       e_soap_message_start_element (msg, "SourceIds", "messages", NULL);
-       e_soap_message_start_element (msg, "AlternateId", NULL, NULL);
+       e_soap_request_start_element (request, "SourceIds", "messages", NULL);
+       e_soap_request_start_element (request, "AlternateId", NULL, NULL);
 
-       e_soap_message_add_attribute (msg, "Id", folder_id, NULL, NULL);
-       e_soap_message_add_attribute (msg, "Format", from_format, NULL, NULL);
-       e_soap_message_add_attribute (msg, "Mailbox", email, NULL, NULL);
+       e_soap_request_add_attribute (request, "Id", folder_id, NULL, NULL);
+       e_soap_request_add_attribute (request, "Format", from_format, NULL, NULL);
+       e_soap_request_add_attribute (request, "Mailbox", email, NULL, NULL);
 
-       e_soap_message_end_element (msg); /* AlternateId */
-       e_soap_message_end_element (msg); /* SourceIds */
+       e_soap_request_end_element (request); /* AlternateId */
+       e_soap_request_end_element (request); /* SourceIds */
 
-       e_ews_message_write_footer (msg);
+       e_ews_request_write_footer (request);
 
-       e_ews_connection_queue_request (cnc, msg, convert_id_response_cb, pri, cancellable, simple);
+       e_ews_connection_queue_request (cnc, request, convert_id_response_cb, pri, cancellable, simple);
 
        g_object_unref (simple);
 }
diff --git a/src/EWS/common/e-ews-connection.h b/src/EWS/common/e-ews-connection.h
index 3e2b2785..5199be3c 100644
--- a/src/EWS/common/e-ews-connection.h
+++ b/src/EWS/common/e-ews-connection.h
@@ -15,7 +15,8 @@
 #include <libedataserver/libedataserver.h>
 #include <libebackend/libebackend.h>
 
-#include "e-soap-message.h"
+#include "e-soap-request.h"
+#include "e-soap-response.h"
 #include "ews-errors.h"
 #include "e-ews-folder.h"
 #include "e-ews-item.h"
@@ -65,11 +66,9 @@ enum {
        EWS_PRIORITY_HIGH
 };
 
-typedef gboolean(*EEwsRequestCreationCallback) (ESoapMessage *msg,
+typedef gboolean(*EEwsRequestCreationCallback) (ESoapRequest *request,
                                                 gpointer user_data,
                                                 GError **error);
-typedef void   (*EwsProgressFn)                (gpointer object,
-                                                gint percent);
 typedef void   (*EEwsResponseCallback)         (ESoapResponse *response,
                                                 GSimpleAsyncResult *simple);
 
@@ -464,7 +463,7 @@ EEwsConnection *e_ews_connection_find               (const gchar *uri,
                                                 const gchar *username);
 GSList *       e_ews_connection_list_existing  (void); /* EEwsConnection * */
 void           e_ews_connection_queue_request  (EEwsConnection *cnc,
-                                                ESoapMessage *msg,
+                                                ESoapRequest *request,
                                                 EEwsResponseCallback cb,
                                                 gint pri,
                                                 GCancellable *cancellable,
@@ -534,7 +533,7 @@ gboolean    e_ews_connection_sync_folder_items_sync
                                                 GCancellable *cancellable,
                                                 GError **error);
 
-typedef void   (*EwsConvertQueryCallback)      (ESoapMessage *msg,
+typedef void   (*EwsConvertQueryCallback)      (ESoapRequest *request,
                                                 const gchar *query,
                                                 EEwsFolderType type);
 
@@ -595,7 +594,7 @@ void                e_ews_connection_get_items      (EEwsConnection *cnc,
                                                 gboolean include_mime,
                                                 const gchar *mime_directory,
                                                 EEwsBodyType body_type,
-                                                ESoapProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GAsyncReadyCallback callback,
@@ -614,7 +613,7 @@ gboolean    e_ews_connection_get_items_sync (EEwsConnection *cnc,
                                                 const gchar *mime_directory,
                                                 EEwsBodyType body_type,
                                                 GSList **items,
-                                                ESoapProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GError **error);
@@ -1028,7 +1027,7 @@ void              e_ews_connection_get_attachments
                                                 const GSList *ids,
                                                 const gchar *cache,
                                                 gboolean include_mime,
-                                                ESoapProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GAsyncReadyCallback callback,
@@ -1046,7 +1045,7 @@ gboolean  e_ews_connection_get_attachments_sync
                                                 const gchar *cache,
                                                 gboolean include_mime,
                                                 GSList **items,
-                                                ESoapProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GError **error);
@@ -1111,14 +1110,14 @@ gboolean        e_ews_connection_get_free_busy_sync
 gboolean       e_ews_connection_download_oal_file_sync
                                                (EEwsConnection *cnc,
                                                 const gchar *cache_filename,
-                                                EwsProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GError **error);
 void           e_ews_connection_download_oal_file
                                                (EEwsConnection *cnc,
                                                 const gchar *cache_filename,
-                                                EwsProgressFn progress_fn,
+                                                ESoapResponseProgressFn progress_fn,
                                                 gpointer progress_data,
                                                 GCancellable *cancellable,
                                                 GAsyncReadyCallback cb,
diff --git a/src/EWS/common/e-ews-debug.c b/src/EWS/common/e-ews-debug.c
index be5957ba..296e032c 100644
--- a/src/EWS/common/e-ews-debug.c
+++ b/src/EWS/common/e-ews-debug.c
@@ -7,7 +7,7 @@
 #include "evolution-ews-config.h"
 
 #include "e-ews-debug.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 
 gint
 e_ews_debug_get_log_level (void)
diff --git a/src/EWS/common/e-ews-folder.c b/src/EWS/common/e-ews-folder.c
index 0f90346e..33c3f6bc 100644
--- a/src/EWS/common/e-ews-folder.c
+++ b/src/EWS/common/e-ews-folder.c
@@ -10,7 +10,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "e-ews-folder.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 #include "e-ews-enumtypes.h"
 #include "ews-errors.h"
 #include "e-source-ews-folder.h"
@@ -363,7 +363,7 @@ e_ews_folder_id_is_equal (const EwsFolderId *a,
 }
 
 void
-e_ews_folder_id_append_to_msg (ESoapMessage *msg,
+e_ews_folder_id_append_to_msg (ESoapRequest *request,
                               const gchar *email,
                               const EwsFolderId *fid)
 {
@@ -371,21 +371,21 @@ e_ews_folder_id_append_to_msg (ESoapMessage *msg,
        g_return_if_fail (fid != NULL);
 
        if (fid->is_distinguished_id)
-               e_soap_message_start_element (msg, "DistinguishedFolderId", NULL, NULL);
+               e_soap_request_start_element (request, "DistinguishedFolderId", NULL, NULL);
        else
-               e_soap_message_start_element (msg, "FolderId", NULL, NULL);
+               e_soap_request_start_element (request, "FolderId", NULL, NULL);
 
-       e_soap_message_add_attribute (msg, "Id", fid->id, NULL, NULL);
+       e_soap_request_add_attribute (request, "Id", fid->id, NULL, NULL);
        if (fid->change_key)
-               e_soap_message_add_attribute (msg, "ChangeKey", fid->change_key, NULL, NULL);
+               e_soap_request_add_attribute (request, "ChangeKey", fid->change_key, NULL, NULL);
 
        if (fid->is_distinguished_id && email) {
-               e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
-               e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, email);
-               e_soap_message_end_element (msg);
+               e_soap_request_start_element (request, "Mailbox", NULL, NULL);
+               e_ews_request_write_string_parameter (request, "EmailAddress", NULL, email);
+               e_soap_request_end_element (msg);
        }
 
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (msg);
 }
 
 const gchar *
diff --git a/src/EWS/common/e-ews-folder.h b/src/EWS/common/e-ews-folder.h
index dc1bf551..d89267f8 100644
--- a/src/EWS/common/e-ews-folder.h
+++ b/src/EWS/common/e-ews-folder.h
@@ -10,7 +10,7 @@
 #include <libedataserver/libedataserver.h>
 
 #include "e-ews-enums.h"
-#include "e-soap-message.h"
+#include "e-soap-request.h"
 
 G_BEGIN_DECLS
 
@@ -76,7 +76,7 @@ void          e_ews_folder_id_free (EwsFolderId *fid);
 gboolean       e_ews_folder_id_is_equal (const EwsFolderId *a,
                                          const EwsFolderId *b,
                                          gboolean check_change_key);
-void           e_ews_folder_id_append_to_msg (ESoapMessage *msg,
+void           e_ews_folder_id_append_to_msg (ESoapRequest *request,
                                               const gchar *email,
                                               const EwsFolderId *fid);
 gchar *                e_ews_folder_utils_escape_name                  (const gchar *folder_name);
diff --git a/src/EWS/common/e-ews-item-change.c b/src/EWS/common/e-ews-item-change.c
index 1e647f5c..6cee0d31 100644
--- a/src/EWS/common/e-ews-item-change.c
+++ b/src/EWS/common/e-ews-item-change.c
@@ -7,26 +7,26 @@
 
 #include "evolution-ews-config.h"
 
-#include "e-soap-message.h"
+#include "e-soap-request.h"
 #include "e-soap-response.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 #include "e-ews-item-change.h"
 
 void
-e_ews_message_start_folder_change (ESoapMessage *msg,
+e_ews_request_start_folder_change (ESoapRequest *request,
                                   const gchar *email,
                                   const EwsFolderId *folder_id)
 {
        g_return_if_fail (msg != NULL);
        g_return_if_fail (folder_id != NULL);
 
-       e_soap_message_start_element (msg, "FolderChange", NULL, NULL);
-       e_ews_folder_id_append_to_msg (msg, email, folder_id);
-       e_soap_message_start_element (msg, "Updates", NULL, NULL);
+       e_soap_request_start_element (request, "FolderChange", NULL, NULL);
+       e_ews_folder_id_append_to_msg (request, email, folder_id);
+       e_soap_request_start_element (request, "Updates", NULL, NULL);
 }
 
 void
-e_ews_message_start_item_change (ESoapMessage *msg,
+e_ews_request_start_item_change (ESoapRequest *request,
                                  EEwsItemChangeType type,
                                  const gchar *itemid,
                                  const gchar *changekey,
@@ -36,68 +36,68 @@ e_ews_message_start_item_change (ESoapMessage *msg,
 
        switch (type) {
        case E_EWS_ITEMCHANGE_TYPE_FOLDER:
-               e_soap_message_start_element (msg, "FolderChange", NULL, NULL);
-               e_soap_message_start_element (
+               e_soap_request_start_element (request, "FolderChange", NULL, NULL);
+               e_soap_request_start_element (
                        msg, "FolderId",
                        NULL, NULL);
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "Id",
                        itemid, NULL, NULL);
                break;
 
        case E_EWS_ITEMCHANGE_TYPE_ITEM:
-               e_soap_message_start_element (msg, "ItemChange", NULL, NULL);
-               e_soap_message_start_element (
+               e_soap_request_start_element (request, "ItemChange", NULL, NULL);
+               e_soap_request_start_element (
                        msg, "ItemId",
                        NULL, NULL);
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "Id",
                        itemid, NULL, NULL);
                break;
 
        case E_EWS_ITEMCHANGE_TYPE_OCCURRENCEITEM:
-               e_soap_message_start_element (msg, "ItemChange", NULL, NULL);
-               e_soap_message_start_element (
+               e_soap_request_start_element (request, "ItemChange", NULL, NULL);
+               e_soap_request_start_element (
                        msg, "OccurrenceItemId",
                        NULL, NULL);
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "RecurringMasterId",
                        itemid, NULL, NULL);
                instance = g_strdup_printf ("%d", instance_index);
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "InstanceIndex", instance,
                        NULL, NULL);
                g_free (instance);
                break;
 
        case E_EWS_ITEMCHANGE_TYPE_RECURRINGMASTER:
-               e_soap_message_start_element (msg, "ItemChange", NULL, NULL);
-               e_soap_message_start_element (
+               e_soap_request_start_element (request, "ItemChange", NULL, NULL);
+               e_soap_request_start_element (
                        msg, "RecurringMasterItemId",
                        NULL, NULL);
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "OccurrenceId",
                        itemid, NULL, NULL);
                break;
        }
        if (changekey)
-               e_soap_message_add_attribute (
+               e_soap_request_add_attribute (
                        msg, "ChangeKey",
                        changekey, NULL, NULL);
-       e_soap_message_end_element (msg);
+       e_soap_request_end_element (msg);
 
-       e_soap_message_start_element (msg, "Updates", NULL, NULL);
+       e_soap_request_start_element (request, "Updates", NULL, NULL);
 }
 
 void
-e_ews_message_end_item_change (ESoapMessage *msg)
+e_ews_request_end_item_change (ESoapRequest *request)
 {
-       e_soap_message_end_element (msg); /* Updates */
-       e_soap_message_end_element (msg); /* ItemChange */
+       e_soap_request_end_element (msg); /* Updates */
+       e_soap_request_end_element (msg); /* ItemChange */
 }
 
 void
-e_ews_message_start_set_item_field (ESoapMessage *msg,
+e_ews_request_start_set_item_field (ESoapRequest *request,
                                     const gchar *name,
                                     const gchar *fielduri_prefix,
                                     const gchar *field_kind)
@@ -105,16 +105,16 @@ e_ews_message_start_set_item_field (ESoapMessage *msg,
        gchar * fielduri = NULL;
        fielduri = g_strconcat (fielduri_prefix, ":", name, NULL);
 
-       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (
+       e_soap_request_start_element (request, "SetItemField", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (
                msg, "FieldURI", NULL, NULL, "FieldURI", fielduri);
-       e_soap_message_start_element (msg, field_kind, NULL, NULL);
+       e_soap_request_start_element (request, field_kind, NULL, NULL);
 
        g_free (fielduri);
 }
 
 void
-e_ews_message_start_set_indexed_item_field (ESoapMessage *msg,
+e_ews_request_start_set_indexed_item_field (ESoapRequest *request,
                                             const gchar *name,
                                             const gchar *fielduri_prefix,
                                             const gchar *field_kind,
@@ -125,39 +125,39 @@ e_ews_message_start_set_indexed_item_field (ESoapMessage *msg,
        fielduri = g_strconcat (fielduri_prefix, ":", name, NULL);
 
        if (delete_field)
-               e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
+               e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
        else
-               e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+               e_soap_request_start_element (request, "SetItemField", NULL, NULL);
 
-       e_soap_message_start_element (msg, "IndexedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "FieldURI", fielduri, NULL, NULL);
-       e_soap_message_add_attribute (msg, "FieldIndex", field_index, NULL, NULL);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (request, "IndexedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (request, "FieldURI", fielduri, NULL, NULL);
+       e_soap_request_add_attribute (request, "FieldIndex", field_index, NULL, NULL);
+       e_soap_request_end_element (msg);
 
        if (!delete_field)
-               e_soap_message_start_element (msg, field_kind, NULL, NULL);
+               e_soap_request_start_element (request, field_kind, NULL, NULL);
 
        g_free (fielduri);
 }
 
 void
-e_ews_message_end_set_indexed_item_field (ESoapMessage *msg,
+e_ews_request_end_set_indexed_item_field (ESoapRequest *request,
                                           gboolean delete_field)
 {
        if (!delete_field)
-               e_soap_message_end_element (msg); /* CalendarItem */
-       e_soap_message_end_element (msg); /* SetItemField */
+               e_soap_request_end_element (msg); /* CalendarItem */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 void
-e_ews_message_end_set_item_field (ESoapMessage *msg)
+e_ews_request_end_set_item_field (ESoapRequest *request)
 {
-       e_soap_message_end_element (msg); /* CalendarItem */
-       e_soap_message_end_element (msg); /* SetItemField */
+       e_soap_request_end_element (msg); /* CalendarItem */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 void
-e_ews_message_add_delete_item_field (ESoapMessage *msg,
+e_ews_request_add_delete_item_field (ESoapRequest *request,
                                      const gchar *name,
                                      const gchar *fielduri_prefix)
 {
@@ -165,16 +165,16 @@ e_ews_message_add_delete_item_field (ESoapMessage *msg,
 
        fielduri = g_strconcat (fielduri_prefix, ":", name, NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (
                msg, "FieldURI", NULL, NULL, "FieldURI", fielduri);
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_end_element (msg); /* DeleteItemField */
 
        g_free (fielduri);
 }
 
 void
-e_ews_message_add_delete_item_field_indexed (ESoapMessage *msg,
+e_ews_request_add_delete_item_field_indexed (ESoapRequest *request,
                                              const gchar *name,
                                              const gchar *fielduri_prefix,
                                              const gchar *field_index)
@@ -183,18 +183,18 @@ e_ews_message_add_delete_item_field_indexed (ESoapMessage *msg,
 
        fielduri = g_strconcat (fielduri_prefix, ":", name, NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_soap_message_start_element (msg, "IndexedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "FieldURI", fielduri, NULL, NULL);
-       e_soap_message_add_attribute (msg, "FieldIndex", field_index, NULL, NULL);
-       e_soap_message_end_element (msg); /* IndexedFieldURI */
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_soap_request_start_element (request, "IndexedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (request, "FieldURI", fielduri, NULL, NULL);
+       e_soap_request_add_attribute (request, "FieldIndex", field_index, NULL, NULL);
+       e_soap_request_end_element (msg); /* IndexedFieldURI */
+       e_soap_request_end_element (msg); /* DeleteItemField */
 
        g_free (fielduri);
 }
 
 const gchar *
-e_ews_message_data_type_get_xml_name (EEwsMessageDataType data_type)
+e_ews_request_data_type_get_xml_name (EEwsMessageDataType data_type)
 {
        switch (data_type) {
        case E_EWS_MESSAGE_DATA_TYPE_BOOLEAN:
@@ -215,36 +215,36 @@ e_ews_message_data_type_get_xml_name (EEwsMessageDataType data_type)
 }
 
 void
-e_ews_message_add_delete_item_field_extended_tag (ESoapMessage *msg,
+e_ews_request_add_delete_item_field_extended_tag (ESoapRequest *request,
                                                  guint32 prop_id,
                                                  EEwsMessageDataType data_type)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_ews_message_write_extended_tag (msg, prop_id, prop_type);
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_ews_request_write_extended_tag (request, prop_id, prop_type);
+       e_soap_request_end_element (msg); /* DeleteItemField */
 }
 
 void
-e_ews_message_add_delete_item_field_extended_distinguished_tag (ESoapMessage *msg,
+e_ews_request_add_delete_item_field_extended_distinguished_tag (ESoapRequest *request,
                                                                const gchar *set_id,
                                                                guint32 prop_id,
                                                                EEwsMessageDataType data_type)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_ews_message_write_extended_distinguished_tag (msg, set_id, prop_id, prop_type);
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_ews_request_write_extended_distinguished_tag (request, set_id, prop_id, prop_type);
+       e_soap_request_end_element (msg); /* DeleteItemField */
 }
 
 static void
-ews_message_write_data_value (ESoapMessage *msg,
+ews_request_write_data_value (ESoapRequest *request,
                              EEwsMessageDataType data_type,
                              gconstpointer value)
 {
@@ -252,19 +252,19 @@ ews_message_write_data_value (ESoapMessage *msg,
 
        switch (data_type) {
        case E_EWS_MESSAGE_DATA_TYPE_BOOLEAN:
-               e_ews_message_write_string_parameter (msg, "Value", NULL, (*((const gboolean *) value)) ? 
"true" : "false");
+               e_ews_request_write_string_parameter (request, "Value", NULL, (*((const gboolean *) value)) ? 
"true" : "false");
                return;
        case E_EWS_MESSAGE_DATA_TYPE_INT:
-               e_ews_message_write_int_parameter (msg, "Value", NULL, *((const gint *) value));
+               e_ews_request_write_int_parameter (request, "Value", NULL, *((const gint *) value));
                return;
        case E_EWS_MESSAGE_DATA_TYPE_DOUBLE:
-               e_ews_message_write_double_parameter (msg, "Value", NULL, *((const gdouble *) value));
+               e_ews_request_write_double_parameter (request, "Value", NULL, *((const gdouble *) value));
                return;
        case E_EWS_MESSAGE_DATA_TYPE_STRING:
-               e_ews_message_write_string_parameter (msg, "Value", NULL, (const gchar *) value);
+               e_ews_request_write_string_parameter (request, "Value", NULL, (const gchar *) value);
                return;
        case E_EWS_MESSAGE_DATA_TYPE_TIME:
-               e_ews_message_write_time_parameter (msg, "Value", NULL, *((const time_t *) value));
+               e_ews_request_write_time_parameter (request, "Value", NULL, *((const time_t *) value));
                return;
        }
 
@@ -272,66 +272,66 @@ ews_message_write_data_value (ESoapMessage *msg,
 }
 
 static void
-ews_message_add_extended_property_tag (ESoapMessage *msg,
+ews_request_add_extended_property_tag (ESoapRequest *request,
                                       guint32 prop_id,
                                       EEwsMessageDataType data_type,
                                       gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "ExtendedProperty", NULL, NULL);
+       e_soap_request_start_element (request, "ExtendedProperty", NULL, NULL);
 
-       e_ews_message_write_extended_tag (msg, prop_id, prop_type);
-       ews_message_write_data_value (msg, data_type, value);
+       e_ews_request_write_extended_tag (request, prop_id, prop_type);
+       ews_request_write_data_value (request, data_type, value);
 
-       e_soap_message_end_element (msg); /* ExtendedProperty */
+       e_soap_request_end_element (msg); /* ExtendedProperty */
 }
 
 static void
-ews_message_add_extended_property_distinguished_tag (ESoapMessage *msg,
+ews_request_add_extended_property_distinguished_tag (ESoapRequest *request,
                                                     const gchar *set_id,
                                                     guint32 prop_id,
                                                     EEwsMessageDataType data_type,
                                                     gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "ExtendedProperty", NULL, NULL);
+       e_soap_request_start_element (request, "ExtendedProperty", NULL, NULL);
 
-       e_ews_message_write_extended_distinguished_tag (msg, set_id, prop_id, prop_type);
-       ews_message_write_data_value (msg, data_type, value);
+       e_ews_request_write_extended_distinguished_tag (request, set_id, prop_id, prop_type);
+       ews_request_write_data_value (request, data_type, value);
 
-       e_soap_message_end_element (msg); /* ExtendedProperty */
+       e_soap_request_end_element (msg); /* ExtendedProperty */
 }
 
 static void
-ews_message_add_set_item_field_extended_tag (ESoapMessage *msg,
+ews_request_add_set_item_field_extended_tag (ESoapRequest *request,
                                             const gchar *elem_prefix,
                                             const gchar *elem_name,
                                             guint32 prop_id,
                                             EEwsMessageDataType data_type,
                                             gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
-       e_ews_message_write_extended_tag (msg, prop_id, prop_type);
+       e_soap_request_start_element (request, "SetItemField", NULL, NULL);
+       e_ews_request_write_extended_tag (request, prop_id, prop_type);
 
-       e_soap_message_start_element (msg, elem_name, elem_prefix, NULL);
-       ews_message_add_extended_property_tag (msg, prop_id, data_type, value);
-       e_soap_message_end_element (msg); /* elem_name */
+       e_soap_request_start_element (request, elem_name, elem_prefix, NULL);
+       ews_request_add_extended_property_tag (request, prop_id, data_type, value);
+       e_soap_request_end_element (msg); /* elem_name */
 
-       e_soap_message_end_element (msg); /* SetItemField */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 static void
-ews_message_add_set_item_field_extended_distinguished_tag (ESoapMessage *msg,
+ews_request_add_set_item_field_extended_distinguished_tag (ESoapRequest *request,
                                                           const gchar *elem_prefix,
                                                           const gchar *elem_name,
                                                           const gchar *set_id,
@@ -339,321 +339,321 @@ ews_message_add_set_item_field_extended_distinguished_tag (ESoapMessage *msg,
                                                           EEwsMessageDataType data_type,
                                                           gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+       e_soap_request_start_element (request, "SetItemField", NULL, NULL);
 
-       e_ews_message_write_extended_distinguished_tag (msg, set_id, prop_id, prop_type);
+       e_ews_request_write_extended_distinguished_tag (request, set_id, prop_id, prop_type);
 
-       e_soap_message_start_element (msg, elem_name, elem_prefix, NULL);
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id, data_type, value);
-       e_soap_message_end_element (msg); /* elem_name */
+       e_soap_request_start_element (request, elem_name, elem_prefix, NULL);
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id, data_type, value);
+       e_soap_request_end_element (msg); /* elem_name */
 
-       e_soap_message_end_element (msg); /* SetItemField */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 void
-e_ews_message_add_set_item_field_extended_tag_boolean (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_tag_boolean (ESoapRequest *request,
                                                       const gchar *elem_prefix,
                                                       const gchar *elem_name,
                                                       guint32 prop_id,
                                                       gboolean value)
 {
-       ews_message_add_set_item_field_extended_tag (msg, elem_prefix, elem_name, prop_id,
+       ews_request_add_set_item_field_extended_tag (request, elem_prefix, elem_name, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_tag_int (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_tag_int (ESoapRequest *request,
                                                   const gchar *elem_prefix,
                                                   const gchar *elem_name,
                                                   guint32 prop_id,
                                                   gint value)
 {
-       ews_message_add_set_item_field_extended_tag (msg, elem_prefix, elem_name, prop_id,
+       ews_request_add_set_item_field_extended_tag (request, elem_prefix, elem_name, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_tag_double (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_tag_double (ESoapRequest *request,
                                                      const gchar *elem_prefix,
                                                      const gchar *elem_name,
                                                      guint32 prop_id,
                                                      gdouble value)
 {
-       ews_message_add_set_item_field_extended_tag (msg, elem_prefix, elem_name, prop_id,
+       ews_request_add_set_item_field_extended_tag (request, elem_prefix, elem_name, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_tag_string (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_tag_string (ESoapRequest *request,
                                                      const gchar *elem_prefix,
                                                      const gchar *elem_name,
                                                      guint32 prop_id,
                                                      const gchar *value)
 {
-       ews_message_add_set_item_field_extended_tag (msg, elem_prefix, elem_name, prop_id,
+       ews_request_add_set_item_field_extended_tag (request, elem_prefix, elem_name, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_tag_time (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_tag_time (ESoapRequest *request,
                                                    const gchar *elem_prefix,
                                                    const gchar *elem_name,
                                                    guint32 prop_id,
                                                    time_t value)
 {
-       ews_message_add_set_item_field_extended_tag (msg, elem_prefix, elem_name, prop_id,
+       ews_request_add_set_item_field_extended_tag (request, elem_prefix, elem_name, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_tag_boolean (ESoapRequest *request,
                                                                     const gchar *elem_prefix,
                                                                     const gchar *elem_name,
                                                                     const gchar *set_id,
                                                                     guint32 prop_id,
                                                                     gboolean value)
 {
-       ews_message_add_set_item_field_extended_distinguished_tag (msg, elem_prefix, elem_name, set_id, 
prop_id,
+       ews_request_add_set_item_field_extended_distinguished_tag (request, elem_prefix, elem_name, set_id, 
prop_id,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_tag_int (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_tag_int (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gint value)
 {
-       ews_message_add_set_item_field_extended_distinguished_tag (msg, elem_prefix, elem_name, set_id, 
prop_id,
+       ews_request_add_set_item_field_extended_distinguished_tag (request, elem_prefix, elem_name, set_id, 
prop_id,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_tag_double (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_tag_double (ESoapRequest *request,
                                                                    const gchar *elem_prefix,
                                                                    const gchar *elem_name,
                                                                    const gchar *set_id,
                                                                    guint32 prop_id,
                                                                    gdouble value)
 {
-       ews_message_add_set_item_field_extended_distinguished_tag (msg, elem_prefix, elem_name, set_id, 
prop_id,
+       ews_request_add_set_item_field_extended_distinguished_tag (request, elem_prefix, elem_name, set_id, 
prop_id,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_tag_string (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_tag_string (ESoapRequest *request,
                                                                    const gchar *elem_prefix,
                                                                    const gchar *elem_name,
                                                                    const gchar *set_id,
                                                                    guint32 prop_id,
                                                                    const gchar *value)
 {
-       ews_message_add_set_item_field_extended_distinguished_tag (msg, elem_prefix, elem_name, set_id, 
prop_id,
+       ews_request_add_set_item_field_extended_distinguished_tag (request, elem_prefix, elem_name, set_id, 
prop_id,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_tag_time (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_tag_time (ESoapRequest *request,
                                                                  const gchar *elem_prefix,
                                                                  const gchar *elem_name,
                                                                  const gchar *set_id,
                                                                  guint32 prop_id,
                                                                  time_t value)
 {
-       ews_message_add_set_item_field_extended_distinguished_tag (msg, elem_prefix, elem_name, set_id, 
prop_id,
+       ews_request_add_set_item_field_extended_distinguished_tag (request, elem_prefix, elem_name, set_id, 
prop_id,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_extended_property_tag_boolean (ESoapMessage *msg,
+e_ews_request_add_extended_property_tag_boolean (ESoapRequest *request,
                                                 guint32 prop_id,
                                                 gboolean value)
 {
-       ews_message_add_extended_property_tag (msg, prop_id,
+       ews_request_add_extended_property_tag (request, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_extended_property_tag_int (ESoapMessage *msg,
+e_ews_request_add_extended_property_tag_int (ESoapRequest *request,
                                             guint32 prop_id,
                                             gint value)
 {
-       ews_message_add_extended_property_tag (msg, prop_id,
+       ews_request_add_extended_property_tag (request, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_extended_property_tag_double (ESoapMessage *msg,
+e_ews_request_add_extended_property_tag_double (ESoapRequest *request,
                                                guint32 prop_id,
                                                gdouble value)
 {
-       ews_message_add_extended_property_tag (msg, prop_id,
+       ews_request_add_extended_property_tag (request, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_extended_property_tag_string (ESoapMessage *msg,
+e_ews_request_add_extended_property_tag_string (ESoapRequest *request,
                                                guint32 prop_id,
                                                const gchar *value)
 {
-       ews_message_add_extended_property_tag (msg, prop_id,
+       ews_request_add_extended_property_tag (request, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_extended_property_tag_time (ESoapMessage *msg,
+e_ews_request_add_extended_property_tag_time (ESoapRequest *request,
                                              guint32 prop_id,
                                              time_t value)
 {
-       ews_message_add_extended_property_tag (msg, prop_id,
+       ews_request_add_extended_property_tag (request, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_tag_boolean (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_tag_boolean (ESoapRequest *request,
                                                               const gchar *set_id,
                                                               guint32 prop_id,
                                                               gboolean value)
 {
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id,
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_tag_int (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_tag_int (ESoapRequest *request,
                                                           const gchar *set_id,
                                                           guint32 prop_id,
                                                           gint value)
 {
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id,
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_tag_double (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_tag_double (ESoapRequest *request,
                                                              const gchar *set_id,
                                                              guint32 prop_id,
                                                              gdouble value)
 {
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id,
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_tag_string (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_tag_string (ESoapRequest *request,
                                                              const gchar *set_id,
                                                              guint32 prop_id,
                                                              const gchar *value)
 {
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id,
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_tag_time (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_tag_time (ESoapRequest *request,
                                                            const gchar *set_id,
                                                            guint32 prop_id,
                                                            time_t value)
 {
-       ews_message_add_extended_property_distinguished_tag (msg, set_id, prop_id,
+       ews_request_add_extended_property_distinguished_tag (request, set_id, prop_id,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_delete_item_field_extended_name (ESoapMessage *msg,
+e_ews_request_add_delete_item_field_extended_name (ESoapRequest *request,
                                                   const gchar *name,
                                                   EEwsMessageDataType data_type)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_ews_message_write_extended_name (msg, name, prop_type);
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_ews_request_write_extended_name (request, name, prop_type);
+       e_soap_request_end_element (msg); /* DeleteItemField */
 }
 
 void
-e_ews_message_add_delete_item_field_extended_distinguished_name (ESoapMessage *msg,
+e_ews_request_add_delete_item_field_extended_distinguished_name (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 EEwsMessageDataType data_type)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "DeleteItemField", NULL, NULL);
-       e_ews_message_write_extended_distinguished_name (msg, set_id, name, prop_type);
-       e_soap_message_end_element (msg); /* DeleteItemField */
+       e_soap_request_start_element (request, "DeleteItemField", NULL, NULL);
+       e_ews_request_write_extended_distinguished_name (request, set_id, name, prop_type);
+       e_soap_request_end_element (msg); /* DeleteItemField */
 }
 
 static void
-ews_message_add_extended_property_name (ESoapMessage *msg,
+ews_request_add_extended_property_name (ESoapRequest *request,
                                        const gchar *name,
                                        EEwsMessageDataType data_type,
                                        gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "ExtendedProperty", NULL, NULL);
+       e_soap_request_start_element (request, "ExtendedProperty", NULL, NULL);
 
-       e_ews_message_write_extended_name (msg, name, prop_type);
-       ews_message_write_data_value (msg, data_type, value);
+       e_ews_request_write_extended_name (request, name, prop_type);
+       ews_request_write_data_value (request, data_type, value);
 
-       e_soap_message_end_element (msg); /* ExtendedProperty */
+       e_soap_request_end_element (msg); /* ExtendedProperty */
 }
 
 static void
-ews_message_add_extended_property_distinguished_name (ESoapMessage *msg,
+ews_request_add_extended_property_distinguished_name (ESoapRequest *request,
                                                      const gchar *set_id,
                                                      const gchar *name,
                                                      EEwsMessageDataType data_type,
                                                      gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "ExtendedProperty", NULL, NULL);
+       e_soap_request_start_element (request, "ExtendedProperty", NULL, NULL);
 
-       e_ews_message_write_extended_distinguished_name (msg, set_id, name, prop_type);
-       ews_message_write_data_value (msg, data_type, value);
+       e_ews_request_write_extended_distinguished_name (request, set_id, name, prop_type);
+       ews_request_write_data_value (request, data_type, value);
 
-       e_soap_message_end_element (msg); /* ExtendedProperty */
+       e_soap_request_end_element (msg); /* ExtendedProperty */
 }
 
 static void
-ews_message_add_set_item_field_extended_name (ESoapMessage *msg,
+ews_request_add_set_item_field_extended_name (ESoapRequest *request,
                                              const gchar *elem_prefix,
                                              const gchar *elem_name,
                                              const gchar *name,
                                              EEwsMessageDataType data_type,
                                              gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
-       e_ews_message_write_extended_name (msg, name, prop_type);
+       e_soap_request_start_element (request, "SetItemField", NULL, NULL);
+       e_ews_request_write_extended_name (request, name, prop_type);
 
-       e_soap_message_start_element (msg, elem_name, elem_prefix, NULL);
-       ews_message_add_extended_property_name (msg, name, data_type, value);
-       e_soap_message_end_element (msg); /* elem_name */
+       e_soap_request_start_element (request, elem_name, elem_prefix, NULL);
+       ews_request_add_extended_property_name (request, name, data_type, value);
+       e_soap_request_end_element (msg); /* elem_name */
 
-       e_soap_message_end_element (msg); /* SetItemField */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 static void
-ews_message_add_set_item_field_extended_distinguished_name (ESoapMessage *msg,
+ews_request_add_set_item_field_extended_distinguished_name (ESoapRequest *request,
                                                            const gchar *elem_prefix,
                                                            const gchar *elem_name,
                                                            const gchar *set_id,
@@ -661,227 +661,227 @@ ews_message_add_set_item_field_extended_distinguished_name (ESoapMessage *msg,
                                                            EEwsMessageDataType data_type,
                                                            gconstpointer value)
 {
-       const gchar *prop_type = e_ews_message_data_type_get_xml_name (data_type);
+       const gchar *prop_type = e_ews_request_data_type_get_xml_name (data_type);
 
        g_return_if_fail (prop_type != NULL);
 
-       e_soap_message_start_element (msg, "SetItemField", NULL, NULL);
+       e_soap_request_start_element (request, "SetItemField", NULL, NULL);
 
-       e_ews_message_write_extended_distinguished_name (msg, set_id, name, prop_type);
+       e_ews_request_write_extended_distinguished_name (request, set_id, name, prop_type);
 
-       e_soap_message_start_element (msg, elem_name, elem_prefix, NULL);
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name, data_type, value);
-       e_soap_message_end_element (msg); /* elem_name */
+       e_soap_request_start_element (request, elem_name, elem_prefix, NULL);
+       ews_request_add_extended_property_distinguished_name (request, set_id, name, data_type, value);
+       e_soap_request_end_element (msg); /* elem_name */
 
-       e_soap_message_end_element (msg); /* SetItemField */
+       e_soap_request_end_element (msg); /* SetItemField */
 }
 
 void
-e_ews_message_add_set_item_field_extended_name_boolean (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_name_boolean (ESoapRequest *request,
                                                        const gchar *elem_prefix,
                                                        const gchar *elem_name,
                                                        const gchar *name,
                                                        gboolean value)
 {
-       ews_message_add_set_item_field_extended_name (msg, elem_prefix, elem_name, name,
+       ews_request_add_set_item_field_extended_name (request, elem_prefix, elem_name, name,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_name_int (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_name_int (ESoapRequest *request,
                                                    const gchar *elem_prefix,
                                                    const gchar *elem_name,
                                                    const gchar *name,
                                                    gint value)
 {
-       ews_message_add_set_item_field_extended_name (msg, elem_prefix, elem_name, name,
+       ews_request_add_set_item_field_extended_name (request, elem_prefix, elem_name, name,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_name_double (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_name_double (ESoapRequest *request,
                                                       const gchar *elem_prefix,
                                                       const gchar *elem_name,
                                                       const gchar *name,
                                                       gdouble value)
 {
-       ews_message_add_set_item_field_extended_name (msg, elem_prefix, elem_name, name,
+       ews_request_add_set_item_field_extended_name (request, elem_prefix, elem_name, name,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_name_string (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_name_string (ESoapRequest *request,
                                                       const gchar *elem_prefix,
                                                       const gchar *elem_name,
                                                       const gchar *name,
                                                       const gchar *value)
 {
-       ews_message_add_set_item_field_extended_name (msg, elem_prefix, elem_name, name,
+       ews_request_add_set_item_field_extended_name (request, elem_prefix, elem_name, name,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_name_time (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_name_time (ESoapRequest *request,
                                                     const gchar *elem_prefix,
                                                     const gchar *elem_name,
                                                     const gchar *name,
                                                     time_t value)
 {
-       ews_message_add_set_item_field_extended_name (msg, elem_prefix, elem_name, name,
+       ews_request_add_set_item_field_extended_name (request, elem_prefix, elem_name, name,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_name_boolean (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_name_boolean (ESoapRequest *request,
                                                                      const gchar *elem_prefix,
                                                                      const gchar *elem_name,
                                                                      const gchar *set_id,
                                                                      const gchar *name,
                                                                      gboolean value)
 {
-       ews_message_add_set_item_field_extended_distinguished_name (msg, elem_prefix, elem_name, set_id, name,
+       ews_request_add_set_item_field_extended_distinguished_name (request, elem_prefix, elem_name, set_id, 
name,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_name_int (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_name_int (ESoapRequest *request,
                                                                  const gchar *elem_prefix,
                                                                  const gchar *elem_name,
                                                                  const gchar *set_id,
                                                                  const gchar *name,
                                                                  gint value)
 {
-       ews_message_add_set_item_field_extended_distinguished_name (msg, elem_prefix, elem_name, set_id, name,
+       ews_request_add_set_item_field_extended_distinguished_name (request, elem_prefix, elem_name, set_id, 
name,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_name_double (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_name_double (ESoapRequest *request,
                                                                     const gchar *elem_prefix,
                                                                     const gchar *elem_name,
                                                                     const gchar *set_id,
                                                                     const gchar *name,
                                                                     gdouble value)
 {
-       ews_message_add_set_item_field_extended_distinguished_name (msg, elem_prefix, elem_name, set_id, name,
+       ews_request_add_set_item_field_extended_distinguished_name (request, elem_prefix, elem_name, set_id, 
name,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_name_string (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_name_string (ESoapRequest *request,
                                                                     const gchar *elem_prefix,
                                                                     const gchar *elem_name,
                                                                     const gchar *set_id,
                                                                     const gchar *name,
                                                                     const gchar *value)
 {
-       ews_message_add_set_item_field_extended_distinguished_name (msg, elem_prefix, elem_name, set_id, name,
+       ews_request_add_set_item_field_extended_distinguished_name (request, elem_prefix, elem_name, set_id, 
name,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_set_item_field_extended_distinguished_name_time (ESoapMessage *msg,
+e_ews_request_add_set_item_field_extended_distinguished_name_time (ESoapRequest *request,
                                                                   const gchar *elem_prefix,
                                                                   const gchar *elem_name,
                                                                   const gchar *set_id,
                                                                   const gchar *name,
                                                                   time_t value)
 {
-       ews_message_add_set_item_field_extended_distinguished_name (msg, elem_prefix, elem_name, set_id, name,
+       ews_request_add_set_item_field_extended_distinguished_name (request, elem_prefix, elem_name, set_id, 
name,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_extended_property_name_boolean (ESoapMessage *msg,
+e_ews_request_add_extended_property_name_boolean (ESoapRequest *request,
                                                  const gchar *name,
                                                  gboolean value)
 {
-       ews_message_add_extended_property_name (msg, name,
+       ews_request_add_extended_property_name (request, name,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_extended_property_name_int (ESoapMessage *msg,
+e_ews_request_add_extended_property_name_int (ESoapRequest *request,
                                              const gchar *name,
                                              gint value)
 {
-       ews_message_add_extended_property_name (msg, name,
+       ews_request_add_extended_property_name (request, name,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_extended_property_name_double (ESoapMessage *msg,
+e_ews_request_add_extended_property_name_double (ESoapRequest *request,
                                                 const gchar *name,
                                                 gdouble value)
 {
-       ews_message_add_extended_property_name (msg, name,
+       ews_request_add_extended_property_name (request, name,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_extended_property_name_string (ESoapMessage *msg,
+e_ews_request_add_extended_property_name_string (ESoapRequest *request,
                                                 const gchar *name,
                                                 const gchar *value)
 {
-       ews_message_add_extended_property_name (msg, name,
+       ews_request_add_extended_property_name (request, name,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_extended_property_name_time (ESoapMessage *msg,
+e_ews_request_add_extended_property_name_time (ESoapRequest *request,
                                               const gchar *name,
                                               time_t value)
 {
-       ews_message_add_extended_property_name (msg, name,
+       ews_request_add_extended_property_name (request, name,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_name_boolean (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_name_boolean (ESoapRequest *request,
                                                                const gchar *set_id,
                                                                const gchar *name,
                                                                gboolean value)
 {
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name,
+       ews_request_add_extended_property_distinguished_name (request, set_id, name,
                E_EWS_MESSAGE_DATA_TYPE_BOOLEAN, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_name_int (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_name_int (ESoapRequest *request,
                                                            const gchar *set_id,
                                                            const gchar *name,
                                                            gint value)
 {
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name,
+       ews_request_add_extended_property_distinguished_name (request, set_id, name,
                E_EWS_MESSAGE_DATA_TYPE_INT, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_name_double (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_name_double (ESoapRequest *request,
                                                               const gchar *set_id,
                                                               const gchar *name,
                                                               gdouble value)
 {
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name,
+       ews_request_add_extended_property_distinguished_name (request, set_id, name,
                E_EWS_MESSAGE_DATA_TYPE_DOUBLE, &value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_name_string (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_name_string (ESoapRequest *request,
                                                               const gchar *set_id,
                                                               const gchar *name,
                                                               const gchar *value)
 {
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name,
+       ews_request_add_extended_property_distinguished_name (request, set_id, name,
                E_EWS_MESSAGE_DATA_TYPE_STRING, value);
 }
 
 void
-e_ews_message_add_extended_property_distinguished_name_time (ESoapMessage *msg,
+e_ews_request_add_extended_property_distinguished_name_time (ESoapRequest *request,
                                                             const gchar *set_id,
                                                             const gchar *name,
                                                             time_t value)
 {
-       ews_message_add_extended_property_distinguished_name (msg, set_id, name,
+       ews_request_add_extended_property_distinguished_name (request, set_id, name,
                E_EWS_MESSAGE_DATA_TYPE_TIME, &value);
 }
diff --git a/src/EWS/common/e-ews-item-change.h b/src/EWS/common/e-ews-item-change.h
index 52aaa09c..d81fd29f 100644
--- a/src/EWS/common/e-ews-item-change.h
+++ b/src/EWS/common/e-ews-item-change.h
@@ -9,7 +9,7 @@
 #define E_EWS_ITEM_CHANGE_H
 
 #include "e-ews-folder.h"
-#include "e-soap-message.h"
+#include "e-soap-request.h"
 #include "e-soap-response.h"
 
 G_BEGIN_DECLS
@@ -21,23 +21,35 @@ typedef enum {
        E_EWS_ITEMCHANGE_TYPE_RECURRINGMASTER,
 } EEwsItemChangeType;
 
-void e_ews_message_start_folder_change (ESoapMessage *msg, const gchar *email, const EwsFolderId *folder_id);
-void e_ews_message_start_item_change (ESoapMessage *msg, EEwsItemChangeType type,
-                                    const gchar *itemid, const gchar *changekey,
-                                    gint instance_index);
-void e_ews_message_end_item_change (ESoapMessage *msg);
-
-void e_ews_message_start_set_item_field (ESoapMessage *msg, const gchar *name, const gchar * 
fielduri_prefix, const gchar *field_kind);
-
-void e_ews_message_start_set_indexed_item_field (ESoapMessage *msg, const gchar *name, const gchar * 
fielduri_prefix, const gchar *field_kind, const gchar *field_index, gboolean delete_field);
-
-void e_ews_message_end_set_indexed_item_field (ESoapMessage *msg, gboolean delete_field);
-
-void e_ews_message_end_set_item_field (ESoapMessage *msg);
-
-void e_ews_message_add_delete_item_field (ESoapMessage *msg, const gchar *name, const gchar 
*fielduri_prefix);
-
-void e_ews_message_add_delete_item_field_indexed (ESoapMessage *msg, const gchar *name, const gchar 
*fielduri_prefix, const gchar *field_index);
+void   e_ews_request_start_folder_change                       (ESoapRequest *request,
+                                                                const gchar *email,
+                                                                const EwsFolderId *folder_id);
+void   e_ews_request_start_item_change                         (ESoapRequest *request,
+                                                                EEwsItemChangeType type,
+                                                                const gchar *itemid,
+                                                                const gchar *changekey,
+                                                                gint instance_index);
+void   e_ews_request_end_item_change                           (ESoapRequest *request);
+void   e_ews_request_start_set_item_field                      (ESoapRequest *request,
+                                                                const gchar *name,
+                                                                const gchar *fielduri_prefix,
+                                                                const gchar *field_kind);
+void   e_ews_request_start_set_indexed_item_field              (ESoapRequest *request,
+                                                                const gchar *name,
+                                                                const gchar *fielduri_prefix,
+                                                                const gchar *field_kind,
+                                                                const gchar *field_index,
+                                                                gboolean delete_field);
+void   e_ews_request_end_set_indexed_item_field                (ESoapRequest *request,
+                                                                gboolean delete_field);
+void   e_ews_request_end_set_item_field                        (ESoapRequest *request);
+void   e_ews_request_add_delete_item_field                     (ESoapRequest *request,
+                                                                const gchar *name,
+                                                                const gchar *fielduri_prefix);
+void   e_ews_request_add_delete_item_field_indexed             (ESoapRequest *request,
+                                                                const gchar *name,
+                                                                const gchar *fielduri_prefix,
+                                                                const gchar *field_index);
 
 typedef enum {
        E_EWS_MESSAGE_DATA_TYPE_BOOLEAN,
@@ -48,231 +60,230 @@ typedef enum {
 } EEwsMessageDataType;
 
 const gchar *
-       e_ews_message_data_type_get_xml_name                    (EEwsMessageDataType data_type);
+       e_ews_request_data_type_get_xml_name                    (EEwsMessageDataType data_type);
 
-void   e_ews_message_add_delete_item_field_extended_tag        (ESoapMessage *msg,
+void   e_ews_request_add_delete_item_field_extended_tag        (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 EEwsMessageDataType data_type);
 
-void   e_ews_message_add_delete_item_field_extended_distinguished_tag
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_delete_item_field_extended_distinguished_tag
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 EEwsMessageDataType data_type);
 
-void   e_ews_message_add_set_item_field_extended_tag_boolean   (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_tag_boolean   (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 guint32 prop_id,
                                                                 gboolean value);
-void   e_ews_message_add_set_item_field_extended_tag_int       (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_tag_int       (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 guint32 prop_id,
                                                                 gint value);
-void   e_ews_message_add_set_item_field_extended_tag_double    (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_tag_double    (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 guint32 prop_id,
                                                                 gdouble value);
-void   e_ews_message_add_set_item_field_extended_tag_string    (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_tag_string    (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 guint32 prop_id,
                                                                 const gchar *value);
-void   e_ews_message_add_set_item_field_extended_tag_time      (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_tag_time      (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 guint32 prop_id,
                                                                 time_t value);
-void   e_ews_message_add_set_item_field_extended_distinguished_tag_boolean
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_tag_boolean
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gboolean value);
-void   e_ews_message_add_set_item_field_extended_distinguished_tag_int
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_tag_int
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gint value);
-void   e_ews_message_add_set_item_field_extended_distinguished_tag_double
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_tag_double
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gdouble value);
-void   e_ews_message_add_set_item_field_extended_distinguished_tag_string
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_tag_string
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 const gchar *value);
-void   e_ews_message_add_set_item_field_extended_distinguished_tag_time
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_tag_time
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 time_t value);
-void   e_ews_message_add_extended_property_tag_boolean         (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_tag_boolean         (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 gboolean value);
-void   e_ews_message_add_extended_property_tag_int             (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_tag_int             (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 gint value);
-void   e_ews_message_add_extended_property_tag_double          (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_tag_double          (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 gdouble value);
-void   e_ews_message_add_extended_property_tag_string          (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_tag_string          (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 const gchar *value);
-void   e_ews_message_add_extended_property_tag_time            (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_tag_time            (ESoapRequest *request,
                                                                 guint32 prop_id,
                                                                 time_t value);
-void   e_ews_message_add_extended_property_distinguished_tag_boolean
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_tag_boolean
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gboolean value);
-void   e_ews_message_add_extended_property_distinguished_tag_int
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_tag_int
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gint value);
-void   e_ews_message_add_extended_property_distinguished_tag_double
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_tag_double
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 gdouble value);
-void   e_ews_message_add_extended_property_distinguished_tag_string
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_tag_string
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 const gchar *value);
-void   e_ews_message_add_extended_property_distinguished_tag_time
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_tag_time
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 guint32 prop_id,
                                                                 time_t value);
 
-void   e_ews_message_add_delete_item_field_extended_name       (ESoapMessage *msg,
+void   e_ews_request_add_delete_item_field_extended_name       (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 EEwsMessageDataType data_type);
 
-void   e_ews_message_add_delete_item_field_extended_distinguished_name
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_delete_item_field_extended_distinguished_name
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 EEwsMessageDataType data_type);
 
-void   e_ews_message_add_set_item_field_extended_name_boolean  (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_name_boolean  (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *name,
                                                                 gboolean value);
-void   e_ews_message_add_set_item_field_extended_name_int      (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_name_int      (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *name,
                                                                 gint value);
-void   e_ews_message_add_set_item_field_extended_name_double   (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_name_double   (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *name,
                                                                 gdouble value);
-void   e_ews_message_add_set_item_field_extended_name_string   (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_name_string   (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *name,
                                                                 const gchar *value);
-void   e_ews_message_add_set_item_field_extended_name_time     (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_name_time     (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *name,
                                                                 time_t value);
-void   e_ews_message_add_set_item_field_extended_distinguished_name_boolean
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_name_boolean
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gboolean value);
-void   e_ews_message_add_set_item_field_extended_distinguished_name_int
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_name_int
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gint value);
-void   e_ews_message_add_set_item_field_extended_distinguished_name_double
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_name_double
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gdouble value);
-void   e_ews_message_add_set_item_field_extended_distinguished_name_string
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_name_string
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 const gchar *value);
-void   e_ews_message_add_set_item_field_extended_distinguished_name_time
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_set_item_field_extended_distinguished_name_time
+                                                               (ESoapRequest *request,
                                                                 const gchar *elem_prefix,
                                                                 const gchar *elem_name,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 time_t value);
-void   e_ews_message_add_extended_property_name_boolean        (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_name_boolean        (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 gboolean value);
-void   e_ews_message_add_extended_property_name_int            (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_name_int            (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 gint value);
-void   e_ews_message_add_extended_property_name_double         (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_name_double         (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 gdouble value);
-void   e_ews_message_add_extended_property_name_string         (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_name_string         (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 const gchar *value);
-void   e_ews_message_add_extended_property_name_time           (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_name_time           (ESoapRequest *request,
                                                                 const gchar *name,
                                                                 time_t value);
-void   e_ews_message_add_extended_property_distinguished_name_boolean
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_name_boolean
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gboolean value);
-void   e_ews_message_add_extended_property_distinguished_name_int
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_name_int
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gint value);
-void   e_ews_message_add_extended_property_distinguished_name_double
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_name_double
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 gdouble value);
-void   e_ews_message_add_extended_property_distinguished_name_string
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_name_string
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 const gchar *value);
-void   e_ews_message_add_extended_property_distinguished_name_time
-                                                               (ESoapMessage *msg,
+void   e_ews_request_add_extended_property_distinguished_name_time
+                                                               (ESoapRequest *request,
                                                                 const gchar *set_id,
                                                                 const gchar *name,
                                                                 time_t value);
 
-
 G_END_DECLS
 
 #endif
diff --git a/src/EWS/common/e-ews-item.h b/src/EWS/common/e-ews-item.h
index 77fbd3f1..0fa1ba58 100644
--- a/src/EWS/common/e-ews-item.h
+++ b/src/EWS/common/e-ews-item.h
@@ -7,9 +7,9 @@
 #ifndef E_EWS_ITEM_H
 #define E_EWS_ITEM_H
 
-#include "e-soap-message.h"
+#include "e-soap-request.h"
 #include "e-soap-response.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 
 G_BEGIN_DECLS
 
diff --git a/src/EWS/common/e-ews-notification.c b/src/EWS/common/e-ews-notification.c
index efffbb74..143e8f51 100644
--- a/src/EWS/common/e-ews-notification.c
+++ b/src/EWS/common/e-ews-notification.c
@@ -265,7 +265,7 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
                                          GCancellable *cancellable)
 {
        EEwsConnection *cnc;
-       ESoapMessage *msg;
+       ESoapRequest *request;
        ESoapResponse *response;
        ESoapParameter *param, *subparam;
        CamelEwsSettings *settings;
@@ -288,7 +288,7 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
 
        settings = e_ews_connection_ref_settings (cnc);
 
-       msg = e_ews_message_new_with_header (
+       msg = e_ews_request_new_with_header (
                settings,
                e_ews_connection_get_uri (cnc),
                e_ews_connection_get_impersonate_user (cnc),
@@ -308,11 +308,11 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
                return FALSE;
        }
 
-       e_soap_message_start_element (msg, "StreamingSubscriptionRequest", "messages", NULL);
+       e_soap_request_start_element (msg, "StreamingSubscriptionRequest", "messages", NULL);
 
-       e_soap_message_start_element (msg, "FolderIds", NULL, NULL);
+       e_soap_request_start_element (msg, "FolderIds", NULL, NULL);
        for (l = folders; l; l = l->next) {
-               e_ews_message_write_string_parameter_with_attribute (
+               e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "FolderId",
                        NULL,
@@ -320,14 +320,14 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
                        "Id",
                        l->data);
        }
-       e_soap_message_end_element (msg); /* FolderIds */
+       e_soap_request_end_element (msg); /* FolderIds */
 
-       e_soap_message_start_element (msg, "EventTypes", NULL, NULL);
+       e_soap_request_start_element (msg, "EventTypes", NULL, NULL);
        for (event_type = 0; default_events_names[event_type] != NULL; event_type++) {
                if (g_strcmp0 (default_events_names[event_type], "StatusEvent") == 0)
                        continue;
 
-               e_ews_message_write_string_parameter_with_attribute (
+               e_ews_request_write_string_parameter_with_attribute (
                        msg,
                        "EventType",
                        NULL,
@@ -335,10 +335,10 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
                        NULL,
                        NULL);
        }
-       e_soap_message_end_element (msg); /* EventTypes */
+       e_soap_request_end_element (msg); /* EventTypes */
 
-       e_soap_message_end_element (msg); /* StreamingSubscriptionRequest */
-       e_ews_message_write_footer (msg); /* Complete the footer and print the request */
+       e_soap_request_end_element (msg); /* StreamingSubscriptionRequest */
+       e_ews_request_write_footer (msg); /* Complete the footer and print the request */
 
        if (g_cancellable_is_cancelled (cancellable)) {
                g_object_unref (msg);
@@ -419,7 +419,7 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
                                            const gchar *subscription_id)
 {
        EEwsConnection *cnc;
-       ESoapMessage *msg;
+       ESoapRequest *request;
        ESoapResponse *response;
        ESoapParameter *param;
        CamelEwsSettings *settings;
@@ -437,7 +437,7 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
 
        settings = e_ews_connection_ref_settings (cnc);
 
-       msg = e_ews_message_new_with_header (
+       msg = e_ews_request_new_with_header (
                settings,
                e_ews_connection_get_uri (cnc),
                e_ews_connection_get_impersonate_user (cnc),
@@ -457,10 +457,10 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
                return FALSE;
        }
 
-       e_ews_message_write_string_parameter_with_attribute (
+       e_ews_request_write_string_parameter_with_attribute (
                msg, "SubscriptionId", "messages", subscription_id, NULL, NULL);
 
-       e_ews_message_write_footer (msg); /* Complete the footer and print the request */
+       e_ews_request_write_footer (msg); /* Complete the footer and print the request */
 
        if (!e_ews_connection_utils_prepare_message (cnc, notification->priv->soup_session, SOUP_MESSAGE 
(msg), notification->priv->cancellable)) {
                g_object_unref (msg);
@@ -799,7 +799,7 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
                                    GCancellable *cancellable)
 {
        EEwsConnection *cnc;
-       ESoapMessage *msg;
+       ESoapRequest *request;
        CamelEwsSettings *settings;
        gboolean ret;
        gulong handler_id, cancel_handler_id;
@@ -822,7 +822,7 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
 
        settings = e_ews_connection_ref_settings (cnc);
 
-       msg = e_ews_message_new_with_header (
+       msg = e_ews_request_new_with_header (
                settings,
                e_ews_connection_get_uri (cnc),
                e_ews_connection_get_impersonate_user (cnc),
@@ -842,13 +842,13 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
                return FALSE;
        }
 
-       e_soap_message_start_element (msg, "SubscriptionIds", "messages", NULL);
-       e_ews_message_write_string_parameter_with_attribute (msg, "SubscriptionId", NULL, subscription_id, 
NULL, NULL);
-       e_soap_message_end_element (msg); /* SubscriptionIds */
+       e_soap_request_start_element (msg, "SubscriptionIds", "messages", NULL);
+       e_ews_request_write_string_parameter_with_attribute (msg, "SubscriptionId", NULL, subscription_id, 
NULL, NULL);
+       e_soap_request_end_element (msg); /* SubscriptionIds */
 
-       e_ews_message_write_string_parameter_with_attribute (msg, "ConnectionTimeout", "messages", "10", 
NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (msg, "ConnectionTimeout", "messages", "10", 
NULL, NULL);
 
-       e_ews_message_write_footer (msg); /* Complete the footer and print the request */
+       e_ews_request_write_footer (msg); /* Complete the footer and print the request */
 
        handler_id = g_signal_connect (
                SOUP_MESSAGE (msg), "got-chunk",
diff --git a/src/EWS/common/e-ews-oof-settings.c b/src/EWS/common/e-ews-oof-settings.c
index 634a7d9c..a369d4ab 100644
--- a/src/EWS/common/e-ews-oof-settings.c
+++ b/src/EWS/common/e-ews-oof-settings.c
@@ -14,7 +14,7 @@
 
 #include "ews-errors.h"
 #include "e-ews-enumtypes.h"
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 
 /* Forward Declarations */
 static void    e_ews_oof_settings_initable_init
@@ -431,7 +431,7 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
        GSimpleAsyncResult *simple;
        EEwsOofSettings *settings;
        EEwsConnection *connection;
-       ESoapMessage *message;
+       ESoapRequest *request;
        CamelEwsSettings *ews_settings;
        const gchar *uri, *impersonate_user;
        const gchar *mailbox;
@@ -446,8 +446,7 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
        version = e_ews_connection_get_server_version (connection);
        ews_settings = e_ews_connection_ref_settings (connection);
 
-       message = e_ews_message_new_with_header (
-               ews_settings,
+       request = e_ews_request_new_with_header (
                uri,
                impersonate_user,
                "GetUserOofSettingsRequest",
@@ -455,17 +454,16 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
                NULL,
                version,
                E_EWS_EXCHANGE_2007_SP1,
-               FALSE,
-               TRUE);
+               FALSE);
 
        g_clear_object (&ews_settings);
 
-       e_soap_message_start_element (message, "Mailbox", NULL, NULL);
-       e_ews_message_write_string_parameter (
+       e_soap_request_start_element (message, "Mailbox", NULL, NULL);
+       e_ews_request_write_string_parameter (
                message, "Address", NULL, mailbox);
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
-       e_ews_message_write_footer (message);
+       e_ews_request_write_footer (message);
 
        simple = g_simple_async_result_new (
                G_OBJECT (initable), callback, user_data,
@@ -932,7 +930,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
                            GAsyncReadyCallback callback,
                            gpointer user_data)
 {
-       ESoapMessage *message;
+       ESoapRequest *request;
        EEwsConnection *connection;
        GSimpleAsyncResult *simple;
        GDateTime *date_time;
@@ -966,8 +964,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
        end_time = ews_oof_settings_date_time_to_string (date_time);
        g_date_time_unref (date_time);
 
-       message = e_ews_message_new_with_header (
-               ews_settings,
+       request = e_ews_request_new_with_header (
                uri,
                impersonate_user,
                "SetUserOofSettingsRequest",
@@ -975,24 +972,23 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
                NULL,
                version,
                E_EWS_EXCHANGE_2007_SP1,
-               FALSE,
-               TRUE);
+               FALSE);
 
        g_clear_object (&ews_settings);
 
        /* <Mailbox> */
 
-       e_soap_message_start_element (
+       e_soap_request_start_element (
                message, "Mailbox", NULL, NULL);
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "Address", NULL, mailbox);
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
        /* </Mailbox> */
 
        /* <UserOofSettings> */
 
-       e_soap_message_start_element (
+       e_soap_request_start_element (
                message, "UserOofSettings", NULL, NULL);
 
        switch (e_ews_oof_settings_get_state (settings)) {
@@ -1010,7 +1006,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
                        break;
        }
 
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "OofState", NULL, string);
 
        switch (e_ews_oof_settings_get_external_audience (settings)) {
@@ -1028,46 +1024,46 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
                        break;
        }
 
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "ExternalAudience", NULL, string);
 
        /* <Duration> */
 
-       e_soap_message_start_element (
+       e_soap_request_start_element (
                message, "Duration", NULL, NULL);
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "StartTime", NULL, start_time);
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "EndTime", NULL, end_time);
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
        /* </Duration> */
 
        /* <InternalReply> */
 
-       e_soap_message_start_element (
+       e_soap_request_start_element (
                message, "InternalReply", NULL, NULL);
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "Message", NULL, internal_reply);
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
        /* </InternalReply> */
 
        /* <ExternalReply> */
 
-       e_soap_message_start_element (
+       e_soap_request_start_element (
                message, "ExternalReply", NULL, NULL);
-       e_ews_message_write_string_parameter (
+       e_ews_request_write_string_parameter (
                message, "Message", NULL, external_reply);
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
        /* </ExternalReply> */
 
-       e_soap_message_end_element (message);
+       e_soap_request_end_element (message);
 
        /* </UserOofSettings> */
 
-       e_ews_message_write_footer (message);
+       e_ews_request_write_footer (message);
 
        simple = g_simple_async_result_new (
                G_OBJECT (settings), callback,
diff --git a/src/EWS/common/e-ews-query-to-restriction.c b/src/EWS/common/e-ews-query-to-restriction.c
index cedbf9c1..2325b8ca 100644
--- a/src/EWS/common/e-ews-query-to-restriction.c
+++ b/src/EWS/common/e-ews-query-to-restriction.c
@@ -13,7 +13,7 @@
 #include <camel/camel.h>
 #include <libedata-cal/libedata-cal.h>
 
-#include "e-ews-message.h"
+#include "e-ews-request.h"
 
 #include "e-ews-query-to-restriction.h"
 
@@ -125,7 +125,7 @@ struct EmailIndex {
 };
 
 typedef struct _EvalContext {
-       ESoapMessage *msg; /* NULL when just checking whether any applied */
+       ESoapRequest *req; /* NULL when just checking whether any applied */
        gboolean any_applicable;
 } EvalContext;
 
@@ -138,17 +138,17 @@ ews_restriction_write_contains_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "Contains", NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "ContainmentMode", mode, NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "ContainmentComparison", compare, NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "Contains", NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "ContainmentMode", mode, NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "ContainmentComparison", compare, NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -161,20 +161,20 @@ ews_restriction_write_contains_message_indexed (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "Contains", NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "ContainmentMode", mode, NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "ContainmentComparison", compare, NULL, NULL);
-       e_soap_message_start_element (ctx->msg, "IndexedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "FieldURI", uri, NULL, NULL);
-       e_soap_message_add_attribute (ctx->msg, "FieldIndex", index, NULL, NULL);
-       e_soap_message_end_element (ctx->msg);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "Contains", NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "ContainmentMode", mode, NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "ContainmentComparison", compare, NULL, NULL);
+       e_soap_request_start_element (ctx->req, "IndexedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "FieldURI", uri, NULL, NULL);
+       e_soap_request_add_attribute (ctx->req, "FieldIndex", index, NULL, NULL);
+       e_soap_request_end_element (ctx->req);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -183,14 +183,14 @@ ews_restriction_write_exists_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "Exists", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "Exists", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -200,17 +200,17 @@ ews_restriction_write_greater_than_or_equal_to_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "IsGreaterThanOrEqualTo", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_start_element (ctx->msg, "FieldURIOrConstant", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "IsGreaterThanOrEqualTo", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_start_element (ctx->req, "FieldURIOrConstant", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -220,17 +220,17 @@ ews_restriction_write_less_than_or_equal_to_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "IsLessThanOrEqualTo", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_start_element (ctx->msg, "FieldURIOrConstant", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "IsLessThanOrEqualTo", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_start_element (ctx->req, "FieldURIOrConstant", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -240,17 +240,17 @@ ews_restriction_write_greater_than_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "IsGreaterThan", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_start_element (ctx->msg, "FieldURIOrConstant", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "IsGreaterThan", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_start_element (ctx->req, "FieldURIOrConstant", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -260,17 +260,17 @@ ews_restriction_write_less_than_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "IsLessThan", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_start_element (ctx->msg, "FieldURIOrConstant", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "IsLessThan", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_start_element (ctx->req, "FieldURIOrConstant", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
+       e_soap_request_end_element (ctx->req);
 }
 
 static void
@@ -280,17 +280,17 @@ ews_restriction_write_is_equal_to_message (EvalContext *ctx,
 {
        g_return_if_fail (ctx != NULL);
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
                return;
        }
 
-       e_soap_message_start_element (ctx->msg, "IsEqualTo", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "FieldURI", NULL, NULL, "FieldURI", 
uri);
-       e_soap_message_start_element (ctx->msg, "FieldURIOrConstant", NULL, NULL);
-       e_ews_message_write_string_parameter_with_attribute (ctx->msg, "Constant", NULL, NULL, "Value", val);
-       e_soap_message_end_element (ctx->msg);
-       e_soap_message_end_element (ctx->msg);
+       e_soap_request_start_element (ctx->req, "IsEqualTo", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "FieldURI", NULL, NULL, "FieldURI", 
uri);
+       e_soap_request_start_element (ctx->req, "FieldURIOrConstant", NULL, NULL);
+       e_ews_request_write_string_parameter_with_attribute (ctx->req, "Constant", NULL, NULL, "Value", val);
+       e_soap_request_end_element (ctx->req);
+       e_soap_request_end_element (ctx->req);
 }
 
 static ESExpResult *
@@ -324,27 +324,27 @@ e_ews_implement_contact_contains (ESExp *f,
                                const gchar *value;
                                value = argv[1]->value.string;
 
-                               if (!ctx->msg) {
+                               if (!ctx->req) {
                                        ctx->any_applicable = TRUE;
                                } else {
-                                       e_soap_message_start_element (ctx->msg, "Or", NULL, NULL);
+                                       e_soap_request_start_element (ctx->req, "Or", NULL, NULL);
                                        while (n < G_N_ELEMENTS (contact_field)) {
                                                if ((contact_field[n].flag == CONTACT_NAME) && 
(!contact_field[n].indexed)) {
                                                        ews_restriction_write_contains_message (ctx, mode, 
"IgnoreCase", contact_field[n].field_uri, value);
                                                }
                                                n++;
                                        }
-                                       e_soap_message_end_element (ctx->msg); /* Or */
+                                       e_soap_request_end_element (ctx->req); /* Or */
                                }
                        } else if (!strcmp (field, "x-evolution-any-field")) {
                                gint n = 0;
                                const gchar *value;
                                value = argv[1]->value.string;
 
-                               if (!ctx->msg) {
+                               if (!ctx->req) {
                                        ctx->any_applicable = TRUE;
                                } else {
-                                       e_soap_message_start_element (ctx->msg, "Or", NULL, NULL);
+                                       e_soap_request_start_element (ctx->req, "Or", NULL, NULL);
                                        while (n < G_N_ELEMENTS (contact_field)) {
                                                if (!contact_field[n].indexed) {
                                                        ews_restriction_write_contains_message (ctx, 
"Substring", "IgnoreCase", contact_field[n].field_uri, value);
@@ -357,22 +357,22 @@ e_ews_implement_contact_contains (ESExp *f,
                                                }
                                                n++;
                                        }
-                                       e_soap_message_end_element (ctx->msg); /* Or */
+                                       e_soap_request_end_element (ctx->req); /* Or */
                                }
                        } else if (!strcmp (field, "email")) {
                                const gchar *value;
                                gint n = 0;
                                value = argv[1]->value.string;
 
-                               if (!ctx->msg) {
+                               if (!ctx->req) {
                                        ctx->any_applicable = TRUE;
                                } else {
-                                       e_soap_message_start_element (ctx->msg, "Or", NULL, NULL);
+                                       e_soap_request_start_element (ctx->req, "Or", NULL, NULL);
                                        while (n < G_N_ELEMENTS (email_index)) {
                                                ews_restriction_write_contains_message_indexed (ctx, mode, 
"IgnoreCase", "contacts:EmailAddress", email_index[n].field_index, value);
                                                n++;
                                        }
-                                       e_soap_message_end_element (ctx->msg); /* Or */
+                                       e_soap_request_end_element (ctx->req); /* Or */
                                }
                        } else if (!strcmp (field, "category_list")) {
                                const gchar *value;
@@ -397,7 +397,7 @@ e_ews_func_and_or_not (ESExp *f,
 {
        ESExpResult *r, *r1;
        EvalContext *ctx = data;
-       ESoapMessage *used_msg;
+       ESoapRequest *used_req;
        gboolean was_any_applicable;
        gint ii, n_applicable = 0;
        const gchar *elem_name = NULL;
@@ -408,8 +408,8 @@ e_ews_func_and_or_not (ESExp *f,
                goto result;
 
        was_any_applicable = ctx->any_applicable;
-       used_msg = ctx->msg;
-       ctx->msg = NULL;
+       used_req = ctx->req;
+       ctx->req = NULL;
 
        for (ii = 0; ii < argc; ii++) {
                ctx->any_applicable = FALSE;
@@ -421,9 +421,9 @@ e_ews_func_and_or_not (ESExp *f,
                        n_applicable++;
        }
 
-       ctx->msg = used_msg;
+       ctx->req = used_req;
 
-       if (!ctx->msg || !n_applicable) {
+       if (!ctx->req || !n_applicable) {
                ctx->any_applicable = n_applicable > 0 || was_any_applicable;
                goto result;
        }
@@ -440,7 +440,7 @@ e_ews_func_and_or_not (ESExp *f,
                elem_name = "Not";
 
        if (elem_name)
-               e_soap_message_start_element (ctx->msg, elem_name, NULL, NULL);
+               e_soap_request_start_element (ctx->req, elem_name, NULL, NULL);
 
        for (ii = 0; ii < argc; ii++) {
                r1 = e_sexp_term_eval (f, argv[ii]);
@@ -448,7 +448,7 @@ e_ews_func_and_or_not (ESExp *f,
        }
 
        if (elem_name)
-               e_soap_message_end_element (ctx->msg);
+               e_soap_request_end_element (ctx->req);
 
  result:
        r = e_sexp_result_new (f, ESEXP_RES_UNDEFINED);
@@ -489,13 +489,13 @@ calendar_func_contains (ESExp *f,
                                const gchar *value;
                                value = argv[1]->value.string;
 
-                               if (!ctx->msg) {
+                               if (!ctx->req) {
                                        ctx->any_applicable = TRUE;
                                } else {
-                                       e_soap_message_start_element (ctx->msg, "Or", NULL, NULL);
+                                       e_soap_request_start_element (ctx->req, "Or", NULL, NULL);
                                        ews_restriction_write_contains_message (ctx, "Substring", 
"IgnoreCase", "calendar:RequiredAttendees", value);
                                        ews_restriction_write_contains_message (ctx, "Substring", 
"IgnoreCase", "calendar:OptionalAttendees", value);
-                                       e_soap_message_end_element (ctx->msg);
+                                       e_soap_request_end_element (ctx->req);
                                }
                        } else if (!g_strcmp0 (field, "organizer")) {
                                const gchar *value;
@@ -517,10 +517,10 @@ calendar_func_contains (ESExp *f,
                                gint n = 0;
                                value = argv[1]->value.string;
 
-                               if (!ctx->msg) {
+                               if (!ctx->req) {
                                        ctx->any_applicable = TRUE;
                                } else {
-                                       e_soap_message_start_element (ctx->msg, "Or", NULL, NULL);
+                                       e_soap_request_start_element (ctx->req, "Or", NULL, NULL);
                                        while (n < G_N_ELEMENTS (calendar_field)) {
                                                if (calendar_field[n].any_field) {
                                                        ews_restriction_write_contains_message (ctx, 
"Substring", "IgnoreCase", calendar_field[n].field_uri, value);
@@ -534,7 +534,7 @@ calendar_func_contains (ESExp *f,
                                                }
                                                n++;
                                        }
-                                       e_soap_message_end_element (ctx->msg);
+                                       e_soap_request_end_element (ctx->req);
                                }
                        }
                }
@@ -635,7 +635,7 @@ calendar_func_occur_in_time_range (ESExp *f,
                return NULL;
        }
 
-       if (!ctx->msg) {
+       if (!ctx->req) {
                ctx->any_applicable = TRUE;
        } else {
                gchar *start, *end;
@@ -643,10 +643,10 @@ calendar_func_occur_in_time_range (ESExp *f,
                start = e_ews_make_timestamp (argv[0]->value.time);
                end = e_ews_make_timestamp (argv[1]->value.time);
 
-               e_soap_message_start_element (ctx->msg, "And", NULL, NULL);
+               e_soap_request_start_element (ctx->req, "And", NULL, NULL);
                ews_restriction_write_greater_than_or_equal_to_message (ctx, "calendar:Start", start);
                ews_restriction_write_less_than_or_equal_to_message (ctx, "calendar:End", end);
-               e_soap_message_end_element (ctx->msg);
+               e_soap_request_end_element (ctx->req);
 
                g_free (start);
                g_free (end);
@@ -1311,13 +1311,13 @@ e_ews_query_check_applicable (const gchar *query,
 }
 
 void
-e_ews_query_to_restriction (ESoapMessage *msg,
+e_ews_query_to_restriction (ESoapRequest *req,
                             const gchar *query,
                             EEwsFolderType type)
 {
        EvalContext ctx;
 
-       ctx.msg = msg;
+       ctx.req = req;
        ctx.any_applicable = FALSE;
 
        e_ews_convert_sexp_to_restriction (&ctx, query, type);
diff --git a/src/EWS/common/e-ews-query-to-restriction.h b/src/EWS/common/e-ews-query-to-restriction.h
index 6cc00cec..1869bf7c 100644
--- a/src/EWS/common/e-ews-query-to-restriction.h
+++ b/src/EWS/common/e-ews-query-to-restriction.h
@@ -8,13 +8,13 @@
 #ifndef E_EWS_QUERY_TO_RESTRICTION_H
 #define E_EWS_QUERY_TO_RESTRICTION_H
 
-#include "common/e-soap-message.h"
+#include "common/e-soap-request.h"
 #include "common/e-ews-folder.h"
 
 gboolean       e_ews_query_check_applicable    (const gchar *query,
                                                 EEwsFolderType type);
 
-void           e_ews_query_to_restriction      (ESoapMessage *msg,
+void           e_ews_query_to_restriction      (ESoapRequest *req,
                                                 const gchar *query,
                                                 EEwsFolderType type);
 
diff --git a/src/EWS/common/e-ews-message.c b/src/EWS/common/e-ews-request.c
similarity index 50%
rename from src/EWS/common/e-ews-message.c
rename to src/EWS/common/e-ews-request.c
index 897d573b..ffa20d05 100644
--- a/src/EWS/common/e-ews-message.c
+++ b/src/EWS/common/e-ews-request.c
@@ -14,28 +14,8 @@
 #include <libxml/xpath.h>
 #include <libxml/xpathInternals.h>
 #include <libxml/tree.h>
-#include "e-ews-message.h"
 
-static SoupBuffer *
-ews_soup_chunk_allocator (SoupMessage *message,
-                         gsize max_len,
-                         gpointer user_data)
-{
-       gsize len = 32768;
-       guchar *data;
-
-       data = g_new0 (guchar, len);
-
-       return soup_buffer_new_take (data, len);
-}
-
-void
-e_ews_message_attach_chunk_allocator (SoupMessage *message)
-{
-       g_return_if_fail (SOUP_IS_MESSAGE (message));
-
-       soup_message_set_chunk_allocator (message, ews_soup_chunk_allocator, NULL, NULL);
-}
+#include "e-ews-request.h"
 
 static const gchar *
 convert_server_version_to_string (EEwsServerVersion version)
@@ -68,30 +48,8 @@ convert_server_version_to_string (EEwsServerVersion version)
        return "Exchange2007";
 }
 
-void
-e_ews_message_set_user_agent_header (SoupMessage *message,
-                                    CamelEwsSettings *settings)
-{
-       g_return_if_fail (SOUP_IS_MESSAGE (message));
-       g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
-
-       if (camel_ews_settings_get_override_user_agent (settings)) {
-               gchar *user_agent;
-
-               user_agent = camel_ews_settings_dup_user_agent (settings);
-
-               if (user_agent && *user_agent) {
-                       soup_message_headers_append (soup_message_get_request_headers (message), 
"User-Agent", user_agent);
-               }
-
-               g_free (user_agent);
-       } else {
-               soup_message_headers_append (soup_message_get_request_headers (message), "User-Agent", 
"Evolution/" VERSION);
-       }
-}
-
-ESoapMessage *
-e_ews_message_new_with_header (CamelEwsSettings *settings,
+ESoapRequest *
+e_ews_request_new_with_header (CamelEwsSettings *settings,
                               const gchar *uri,
                                const gchar *impersonate_user,
                                const gchar *method_name,
@@ -102,28 +60,18 @@ e_ews_message_new_with_header (CamelEwsSettings *settings,
                               gboolean force_minimum_version,
                               gboolean standard_handlers)
 {
-       ESoapMessage *msg;
+       ESoapRequest *req;
        const gchar *server_ver;
        EEwsServerVersion version;
 
-       msg = e_soap_message_new (
+       req = e_soap_request_new (
                SOUP_METHOD_POST, uri, FALSE, NULL, NULL, NULL, standard_handlers);
-       if (msg == NULL) {
+       if (req == NULL) {
                g_warning ("%s: Could not build SOAP message for uri '%s'", G_STRFUNC, uri);
                return NULL;
        }
 
-       e_ews_message_attach_chunk_allocator (SOUP_MESSAGE (msg));
-
-       soup_message_headers_append (
-               soup_message_get_request_headers (SOUP_MESSAGE (msg)),
-               "Content-Type", "text/xml; charset=utf-8");
-       e_ews_message_set_user_agent_header (SOUP_MESSAGE (msg), settings);
-       soup_message_headers_append (
-               soup_message_get_request_headers (SOUP_MESSAGE (msg)),
-               "Connection", "Keep-Alive");
-
-       e_soap_message_start_envelope (msg);
+       e_soap_request_start_envelope (req);
 
        if (force_minimum_version)
                version = minimum_version;
@@ -132,131 +80,131 @@ e_ews_message_new_with_header (CamelEwsSettings *settings,
 
        server_ver = convert_server_version_to_string (version);
 
-       e_soap_message_start_header (msg);
+       e_soap_request_start_header (req);
 
-       e_soap_message_start_element (
-               msg, "RequestServerVersion", "types",
+       e_soap_request_start_element (
+               req, "RequestServerVersion", "types",
                "http://schemas.microsoft.com/exchange/services/2006/types";);
-       e_soap_message_add_attribute (msg, "Version", server_ver, NULL, NULL);
-       e_soap_message_end_element (msg);
+       e_soap_request_add_attribute (req, "Version", server_ver, NULL, NULL);
+       e_soap_request_end_element (req);
 
        if (impersonate_user && *impersonate_user) {
-               e_soap_message_start_element (msg, "ExchangeImpersonation", "types",
+               e_soap_request_start_element (req, "ExchangeImpersonation", "types",
                        "http://schemas.microsoft.com/exchange/services/2006/types";);
 
-               e_soap_message_start_element (msg, "ConnectingSID", "types", NULL);
+               e_soap_request_start_element (req, "ConnectingSID", "types", NULL);
 
                if (strchr (impersonate_user, '@') != 0)
-                       e_soap_message_start_element (msg, "PrimarySmtpAddress", "types", NULL);
+                       e_soap_request_start_element (req, "PrimarySmtpAddress", "types", NULL);
                else
-                       e_soap_message_start_element (msg, "PrincipalName", "types", NULL);
-               e_soap_message_write_string (msg, impersonate_user);
-               e_soap_message_end_element (msg); /* PrimarySmtpAddress or PrincipalName */
+                       e_soap_request_start_element (req, "PrincipalName", "types", NULL);
+               e_soap_request_write_string (req, impersonate_user);
+               e_soap_request_end_element (req); /* PrimarySmtpAddress or PrincipalName */
 
-               e_soap_message_end_element (msg); /* ConnectingSID */
+               e_soap_request_end_element (req); /* ConnectingSID */
 
-               e_soap_message_end_element (msg); /* ExchangeImpersonation */
+               e_soap_request_end_element (req); /* ExchangeImpersonation */
        }
 
-       e_soap_message_end_header (msg);
+       e_soap_request_end_header (req);
 
-       e_soap_message_start_body (msg);
-       e_soap_message_add_namespace (
-               msg, "messages",
+       e_soap_request_start_body (req);
+       e_soap_request_add_namespace (
+               req, "messages",
                "http://schemas.microsoft.com/exchange/services/2006/messages";);
-       e_soap_message_start_element (msg, method_name, "messages", NULL);
-       e_soap_message_set_default_namespace (
-               msg,
+       e_soap_request_start_element (req, method_name, "messages", NULL);
+       e_soap_request_set_default_namespace (
+               req,
                "http://schemas.microsoft.com/exchange/services/2006/types";);
        if (attribute_name != NULL)
-               e_soap_message_add_attribute (
-                       msg, attribute_name, attribute_value, NULL, NULL);
+               e_soap_request_add_attribute (
+                       req, attribute_name, attribute_value, NULL, NULL);
 
-       return msg;
+       return req;
 }
 
 void
-e_ews_message_write_string_parameter (ESoapMessage *msg,
+e_ews_request_write_string_parameter (ESoapRequest *req,
                                       const gchar *name,
                                       const gchar *prefix,
                                       const gchar *value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_write_string (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_write_string (req, value);
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_string_parameter_with_attribute (ESoapMessage *msg,
+e_ews_request_write_string_parameter_with_attribute (ESoapRequest *req,
                                                      const gchar *name,
                                                      const gchar *prefix,
                                                      const gchar *value,
                                                      const gchar *attribute_name,
                                                      const gchar *attribute_value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_add_attribute (
-               msg, attribute_name, attribute_value, NULL, NULL);
-       e_soap_message_write_string (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_add_attribute (
+               req, attribute_name, attribute_value, NULL, NULL);
+       e_soap_request_write_string (req, value);
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_base64_parameter (ESoapMessage *msg,
+e_ews_request_write_base64_parameter (ESoapRequest *req,
                                       const gchar *name,
                                       const gchar *prefix,
                                       const gchar *value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_write_base64 (msg, value, strlen (value));
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_write_base64 (req, value, strlen (value));
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_int_parameter (ESoapMessage *msg,
+e_ews_request_write_int_parameter (ESoapRequest *req,
                                    const gchar *name,
                                    const gchar *prefix,
                                    glong value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_write_int (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_write_int (req, value);
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_double_parameter (ESoapMessage *msg,
+e_ews_request_write_double_parameter (ESoapRequest *req,
                                      const gchar *name,
                                      const gchar *prefix,
                                      gdouble value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_write_double (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_write_double (req, value);
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_time_parameter (ESoapMessage *msg,
+e_ews_request_write_time_parameter (ESoapRequest *req,
                                    const gchar *name,
                                    const gchar *prefix,
                                    time_t value)
 {
-       e_soap_message_start_element (msg, name, prefix, NULL);
-       e_soap_message_write_time (msg, value);
-       e_soap_message_end_element (msg);
+       e_soap_request_start_element (req, name, prefix, NULL);
+       e_soap_request_write_time (req, value);
+       e_soap_request_end_element (req);
 }
 
 void
-e_ews_message_write_footer (ESoapMessage *msg)
+e_ews_request_write_footer (ESoapRequest *req)
 {
-       e_soap_message_end_element (msg);
-       e_soap_message_end_body (msg);
-       e_soap_message_end_envelope (msg);
+       e_soap_request_end_element (req);
+       e_soap_request_end_body (req);
+       e_soap_request_end_envelope (req);
 
-       e_soap_message_persist (msg);
+       e_soap_request_persist (req);
 }
 
 void
-e_ews_message_write_extended_tag (ESoapMessage *msg,
+e_ews_request_write_extended_tag (ESoapRequest *req,
                                  guint32 prop_id,
                                  const gchar *prop_type)
 {
@@ -264,16 +212,16 @@ e_ews_message_write_extended_tag (ESoapMessage *msg,
 
        num = g_strdup_printf ("%d", prop_id);
 
-       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyTag", num, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyType", prop_type, NULL, NULL);
-       e_soap_message_end_element (msg); /* ExtendedFieldURI */
+       e_soap_request_start_element (req, "ExtendedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyTag", num, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyType", prop_type, NULL, NULL);
+       e_soap_request_end_element (req); /* ExtendedFieldURI */
 
        g_free (num);
 }
 
 void
-e_ews_message_write_extended_distinguished_tag (ESoapMessage *msg,
+e_ews_request_write_extended_distinguished_tag (ESoapRequest *req,
                                                const gchar *set_id,
                                                guint32 prop_id,
                                                const gchar *prop_type)
@@ -282,37 +230,37 @@ e_ews_message_write_extended_distinguished_tag (ESoapMessage *msg,
 
        num = g_strdup_printf ("%d", prop_id);
 
-       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "DistinguishedPropertySetId", set_id, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyId", num, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyType", prop_type, NULL, NULL);
-       e_soap_message_end_element (msg); /* ExtendedFieldURI */
+       e_soap_request_start_element (req, "ExtendedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (req, "DistinguishedPropertySetId", set_id, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyId", num, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyType", prop_type, NULL, NULL);
+       e_soap_request_end_element (req); /* ExtendedFieldURI */
 
        g_free (num);
 }
 
 void
-e_ews_message_write_extended_name (ESoapMessage *msg,
+e_ews_request_write_extended_name (ESoapRequest *req,
                                   const gchar *name,
                                   const gchar *prop_type)
 {
-       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyName", name, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyType", prop_type, NULL, NULL);
-       e_soap_message_end_element (msg); /* ExtendedFieldURI */
+       e_soap_request_start_element (req, "ExtendedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyName", name, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyType", prop_type, NULL, NULL);
+       e_soap_request_end_element (req); /* ExtendedFieldURI */
 }
 
 void
-e_ews_message_write_extended_distinguished_name (ESoapMessage *msg,
+e_ews_request_write_extended_distinguished_name (ESoapRequest *req,
                                                 const gchar *set_id,
                                                 const gchar *name,
                                                 const gchar *prop_type)
 {
-       e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
-       e_soap_message_add_attribute (msg, "DistinguishedPropertySetId", set_id, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyName", name, NULL, NULL);
-       e_soap_message_add_attribute (msg, "PropertyType", prop_type, NULL, NULL);
-       e_soap_message_end_element (msg); /* ExtendedFieldURI */
+       e_soap_request_start_element (req, "ExtendedFieldURI", NULL, NULL);
+       e_soap_request_add_attribute (req, "DistinguishedPropertySetId", set_id, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyName", name, NULL, NULL);
+       e_soap_request_add_attribute (req, "PropertyType", prop_type, NULL, NULL);
+       e_soap_request_end_element (req); /* ExtendedFieldURI */
 }
 
 static xmlXPathObjectPtr
@@ -346,7 +294,7 @@ xpath_eval (xmlXPathContextPtr ctx,
 }
 
 void
-e_ews_message_replace_server_version (ESoapMessage *msg,
+e_ews_request_replace_server_version (ESoapRequest *req,
                                      EEwsServerVersion version)
 {
        xmlDocPtr doc;
@@ -356,7 +304,7 @@ e_ews_message_replace_server_version (ESoapMessage *msg,
        xmlNodePtr node;
        const gchar *server_ver;
 
-       doc = e_soap_message_get_xml_doc (msg);
+       doc = e_soap_request_get_xml_doc (req);
        xpctx = xmlXPathNewContext (doc);
 
        xmlXPathRegisterNs (
diff --git a/src/EWS/common/e-ews-message.h b/src/EWS/common/e-ews-request.h
similarity index 55%
rename from src/EWS/common/e-ews-message.h
rename to src/EWS/common/e-ews-request.h
index 21494486..13361161 100644
--- a/src/EWS/common/e-ews-message.h
+++ b/src/EWS/common/e-ews-request.h
@@ -6,11 +6,10 @@
  * SPDX-License-Identifier: LGPL-2.1-or-later
  */
 
-#ifndef E_EWS_MESSAGE_H
-#define E_EWS_MESSAGE_H
+#ifndef E_EWS_REQUEST_H
+#define E_EWS_REQUEST_H
 
-#include "e-soap-message.h"
-#include "camel-ews-settings.h"
+#include "e-soap-request.h"
 
 G_BEGIN_DECLS
 
@@ -25,79 +24,73 @@ typedef enum {
        E_EWS_EXCHANGE_FUTURE
 } EEwsServerVersion;
 
-void           e_ews_message_attach_chunk_allocator
-                                               (SoupMessage *message);
-void           e_ews_message_set_user_agent_header
-                                               (SoupMessage *message,
-                                                CamelEwsSettings *settings);
-ESoapMessage * e_ews_message_new_with_header   (CamelEwsSettings *settings,
-                                                const gchar *uri,
+ESoapRequest * e_ews_request_new_with_header   (const gchar *uri,
                                                 const gchar *impersonate_user,
                                                 const gchar *method_name,
                                                 const gchar *attribute_name,
                                                 const gchar *attribute_value,
                                                 EEwsServerVersion server_version,
                                                 EEwsServerVersion minimum_version,
-                                                gboolean force_minimum_version,
-                                                gboolean standard_handlers);
-void           e_ews_message_write_string_parameter
-                                               (ESoapMessage *msg,
+                                                gboolean force_minimum_version);
+void           e_ews_request_write_string_parameter
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 const gchar *value);
-void           e_ews_message_write_string_parameter_with_attribute
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_string_parameter_with_attribute
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 const gchar *value,
                                                 const gchar *attribute_name,
                                                 const gchar *attribute_value);
-void           e_ews_message_write_base64_parameter
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_base64_parameter
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 const gchar *value);
-void           e_ews_message_write_int_parameter
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_int_parameter
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 glong value);
-void           e_ews_message_write_double_parameter
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_double_parameter
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 gdouble value);
-void           e_ews_message_write_time_parameter
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_time_parameter
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prefix,
                                                 time_t value);
-void           e_ews_message_write_footer      (ESoapMessage *msg);
+void           e_ews_request_write_footer      (ESoapRequest *req);
 
-void           e_ews_message_write_extended_tag
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_extended_tag
+                                               (ESoapRequest *req,
                                                 guint32 prop_id,
                                                 const gchar *prop_type);
 
-void           e_ews_message_write_extended_distinguished_tag
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_extended_distinguished_tag
+                                               (ESoapRequest *req,
                                                 const gchar *set_id,
                                                 guint32 prop_id,
                                                 const gchar *prop_type);
 
-void           e_ews_message_write_extended_name
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_extended_name
+                                               (ESoapRequest *req,
                                                 const gchar *name,
                                                 const gchar *prop_type);
 
-void           e_ews_message_write_extended_distinguished_name
-                                               (ESoapMessage *msg,
+void           e_ews_request_write_extended_distinguished_name
+                                               (ESoapRequest *req,
                                                 const gchar *set_id,
                                                 const gchar *name,
                                                 const gchar *prop_type);
 
-void           e_ews_message_replace_server_version (ESoapMessage *msg,
-                                                     EEwsServerVersion version);
+void           e_ews_request_replace_server_version
+                                               (ESoapRequest *req,
+                                                EEwsServerVersion version);
 
 G_END_DECLS
 
diff --git a/src/EWS/common/e-soap-request.c b/src/EWS/common/e-soap-request.c
new file mode 100644
index 00000000..1d35ecb0
--- /dev/null
+++ b/src/EWS/common/e-soap-request.c
@@ -0,0 +1,890 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * SPDX-FileCopyrightText: (C) 1999-2008 Novell, Inc. (www.novell.com)
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "evolution-ews-config.h"
+
+#include <libedataserver/libedataserver.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <libsoup/soup.h>
+#ifdef G_OS_WIN32
+#include <io.h>
+#endif
+
+#include "e-soap-request.h"
+#include "e-ews-debug.h"
+
+struct _ESoapRequestPrivate {
+       gchar *method;
+       GUri *uri;
+
+       /* Serialization fields */
+       xmlParserCtxtPtr ctxt;
+       xmlDocPtr doc;
+       xmlNodePtr last_node;
+       xmlNsPtr soap_ns;
+       xmlNsPtr xsi_ns;
+       xmlChar *env_prefix;
+       xmlChar *env_uri;
+       gboolean body_started;
+       gchar *action;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (ESoapRequest, e_soap_request, G_TYPE_OBJECT)
+
+static void
+soap_request_finalize (GObject *object)
+{
+       ESoapRequest *req = E_SOAP_REQUEST (object);
+
+       g_clear_pointer (&req->priv->method, g_free);
+       g_clear_pointer (&req->priv->uri, g_uri_unref);
+
+       g_clear_pointer (&req->priv->doc, xmlFreeDoc);
+       g_clear_pointer (&req->priv->action, g_free);
+       g_clear_pointer (&req->priv->env_uri, xmlFree);
+       g_clear_pointer (&req->priv->env_prefix, xmlFree);
+
+       /* Chain up to parent's method. */
+       G_OBJECT_CLASS (e_soap_request_parent_class)->finalize (object);
+}
+
+static void
+e_soap_request_class_init (ESoapRequestClass *class)
+{
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = soap_request_finalize;
+}
+
+static void
+e_soap_request_init (ESoapRequest *req)
+{
+       req->priv = e_soap_request_get_instance_private (req);
+
+       /* initialize XML structures */
+       req->priv->doc = xmlNewDoc ((const xmlChar *) "1.0");
+       req->priv->doc->standalone = FALSE;
+       req->priv->doc->encoding = xmlCharStrdup ("UTF-8");
+}
+
+static xmlNsPtr
+fetch_ns (ESoapRequest *req,
+          const gchar *prefix,
+          const gchar *ns_uri)
+{
+       xmlNsPtr ns = NULL;
+
+       if (prefix && ns_uri)
+               ns = xmlNewNs (
+                       req->priv->last_node,
+                       (const xmlChar *) ns_uri,
+                       (const xmlChar *) prefix);
+       else if (prefix && !ns_uri) {
+               ns = xmlSearchNs (
+                       req->priv->doc, req->priv->last_node,
+                       (const xmlChar *) prefix);
+               if (!ns)
+                       ns = xmlNewNs (
+                               req->priv->last_node,
+                               (const xmlChar *) "",
+                               (const xmlChar *) prefix);
+       }
+
+       return ns;
+}
+
+/**
+ * e_soap_request_new:
+ * @method: the HTTP method for the created request.
+ * @uri_string: the destination endpoint (as a string).
+ * @standalone: ??? FIXME
+ * @xml_encoding: ??? FIXME
+ * @env_prefix: ??? FIXME
+ * @env_uri: ??? FIXME
+ *
+ * Creates a new empty #ESoapRequest, which will connect to @uri_string.
+ *
+ * Returns: the new #ESoapRequest (or %NULL if @uri_string could not be
+ * parsed).
+ */
+ESoapRequest *
+e_soap_request_new (const gchar *method,
+                    const gchar *uri_string,
+                    gboolean standalone,
+                    const gchar *xml_encoding,
+                    const gchar *env_prefix,
+                    const gchar *env_uri)
+{
+       ESoapRequest *req;
+       GUri *uri;
+
+       uri = g_uri_parse (uri_string, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL);
+       if (!uri)
+               return NULL;
+
+       req = e_soap_request_new_from_uri (
+               method, uri, standalone,
+               xml_encoding, env_prefix, env_uri);
+
+       g_uri_unref (uri);
+
+       return req;
+}
+
+/**
+ * e_soap_request_new_from_uri:
+ * @method: the HTTP method for the created request.
+ * @uri: the destination endpoint (as a #GUri).
+ * @standalone: ??? FIXME
+ * @xml_encoding: ??? FIXME
+ * @env_prefix: ??? FIXME
+ * @env_uri: ??? FIXME
+ *
+ * Creates a new empty #ESoapRequest, which will connect to @uri
+ *
+ * Returns: the new #ESoapRequest
+ */
+ESoapRequest *
+e_soap_request_new_from_uri (const gchar *method,
+                             GUri *uri,
+                             gboolean standalone,
+                             const gchar *xml_encoding,
+                             const gchar *env_prefix,
+                             const gchar *env_uri)
+{
+       ESoapRequest *req;
+
+       req = g_object_new (E_TYPE_SOAP_REQUEST, NULL);
+
+       req->priv->method = g_strdup (method);
+       req->priv->uri = g_uri_ref (uri);
+       req->priv->doc->standalone = standalone;
+
+       if (xml_encoding) {
+               xmlFree ((xmlChar *) req->priv->doc->encoding);
+               req->priv->doc->encoding = xmlCharStrdup (xml_encoding);
+       }
+
+       if (env_prefix != NULL)
+               req->priv->env_prefix = xmlCharStrdup (env_prefix);
+       if (env_uri != NULL)
+               req->priv->env_uri = xmlCharStrdup (env_uri);
+
+       return req;
+}
+
+/**
+ * e_soap_request_start_envelope:
+ * @req: the %ESoapRequest.
+ *
+ * Starts the top level SOAP Envelope element.
+ */
+void
+e_soap_request_start_envelope (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->doc->xmlRootNode = xmlNewDocNode (
+               req->priv->doc, NULL,
+               (const xmlChar *) "Envelope",
+               (const xmlChar *) NULL);
+       req->priv->last_node = req->priv->doc->xmlRootNode;
+
+       req->priv->soap_ns = xmlNewNs (
+               req->priv->doc->xmlRootNode,
+               req->priv->env_uri ? req->priv->env_uri :
+               (const xmlChar *) "http://schemas.xmlsoap.org/soap/envelope/";,
+               req->priv->env_prefix ? req->priv->env_prefix :
+               (const xmlChar *) "SOAP-ENV");
+
+       if (req->priv->env_uri != NULL) {
+               xmlFree (req->priv->env_uri);
+               req->priv->env_uri = NULL;
+       }
+
+       if (req->priv->env_prefix) {
+               xmlFree (req->priv->env_prefix);
+               req->priv->env_prefix = NULL;
+       }
+
+       xmlSetNs (
+               req->priv->doc->xmlRootNode,
+               req->priv->soap_ns);
+       xmlNewNs (
+               req->priv->doc->xmlRootNode,
+               (const xmlChar *) "http://schemas.xmlsoap.org/soap/encoding/";,
+               (const xmlChar *) "SOAP-ENC");
+       xmlNewNs (
+               req->priv->doc->xmlRootNode,
+               (const xmlChar *) "http://www.w3.org/2001/XMLSchema";,
+               (const xmlChar *) "xsd");
+       xmlNewNs (
+               req->priv->doc->xmlRootNode,
+               (const xmlChar *) "http://schemas.xmlsoap.org/soap/envelope/";,
+               (const xmlChar *) "SOAP-ENV");
+       req->priv->xsi_ns = xmlNewNs (
+               req->priv->doc->xmlRootNode,
+               (const xmlChar *) "http://www.w3.org/2001/XMLSchema-instance";,
+               (const xmlChar *) "xsi");
+}
+
+/**
+ * e_soap_request_end_envelope:
+ * @req: the %ESoapRequest.
+ *
+ * Closes the top level SOAP Envelope element.
+ */
+void
+e_soap_request_end_envelope (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_start_body:
+ * @req: the %ESoapRequest.
+ *
+ * Starts the SOAP Body element.
+ */
+void
+e_soap_request_start_body (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       if (req->priv->body_started)
+               return;
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "Body", NULL);
+
+       req->priv->body_started = TRUE;
+}
+
+/**
+ * e_soap_request_end_body:
+ * @req: the %ESoapRequest.
+ *
+ * Closes the SOAP Body element.
+ */
+void
+e_soap_request_end_body (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_start_element:
+ * @req: the #ESoapRequest.
+ * @name: the element name.
+ * @prefix: the namespace prefix
+ * @ns_uri: the namespace URI
+ *
+ * Starts a new arbitrary request element, with @name as the element
+ * name, @prefix as the XML Namespace prefix, and @ns_uri as the XML
+ * Namespace uri for * the created element.
+ *
+ * Passing @prefix with no @ns_uri will cause a recursive search for
+ * an existing namespace with the same prefix. Failing that a new ns
+ * will be created with an empty uri.
+ *
+ * Passing both @prefix and @ns_uri always causes new namespace
+ * attribute creation.
+ *
+ * Passing NULL for both @prefix and @ns_uri causes no prefix to be
+ * used, and the element will be in the default namespace.
+ */
+void
+e_soap_request_start_element (ESoapRequest *req,
+                              const gchar *name,
+                              const gchar *prefix,
+                              const gchar *ns_uri)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node, NULL,
+               (const xmlChar *) name, NULL);
+
+       xmlSetNs (req->priv->last_node, fetch_ns (req, prefix, ns_uri));
+
+       if (ns_uri == NULL)
+               ns_uri = "";
+
+       if (req->priv->body_started && req->priv->action == NULL)
+               req->priv->action = g_strconcat (ns_uri, "#", name, NULL);
+}
+
+/**
+ * e_soap_request_end_element:
+ * @req: the #ESoapRequest.
+ *
+ * Closes the current request element.
+ */
+void
+e_soap_request_end_element (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->last_node = req->priv->last_node->parent;
+}
+
+/**
+ * e_soap_request_start_fault:
+ * @req: the #ESoapRequest.
+ * @faultcode: faultcode element value
+ * @faultstring: faultstring element value
+ * @faultfactor: faultfactor element value
+ *
+ * Starts a new SOAP Fault element, creating faultcode, faultstring,
+ * and faultfactor child elements.
+ *
+ * If you wish to add the faultdetail element, use
+ * e_soap_request_start_fault_detail(), and then
+ * e_soap_request_start_element() to add arbitrary sub-elements.
+ */
+void
+e_soap_request_start_fault (ESoapRequest *req,
+                            const gchar *faultcode,
+                            const gchar *faultstring,
+                            const gchar *faultfactor)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "Fault", NULL);
+       xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "faultcode",
+               (const xmlChar *) faultcode);
+       xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "faultstring",
+               (const xmlChar *) faultstring);
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "faultfactor",
+               (const xmlChar *) faultfactor);
+       if (faultfactor == NULL)
+               e_soap_request_set_null (req);
+
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_end_fault:
+ * @req: the #ESoapRequest.
+ *
+ * Closes the current SOAP Fault element.
+ */
+void
+e_soap_request_end_fault (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_start_fault_detail:
+ * @req: the #ESoapRequest.
+ *
+ * Start the faultdetail child element of the current SOAP Fault
+ * element. The faultdetail element allows arbitrary data to be sent
+ * in a returned fault.
+ **/
+void
+e_soap_request_start_fault_detail (ESoapRequest *req)
+{
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "detail",
+               (const xmlChar *) NULL);
+}
+
+/**
+ * e_soap_request_end_fault_detail:
+ * @req: the #ESoapRequest.
+ *
+ * Closes the current SOAP faultdetail element.
+ */
+void
+e_soap_request_end_fault_detail (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_start_header:
+ * @req: the #ESoapRequest.
+ *
+ * Creates a new SOAP Header element. You can call
+ * e_soap_request_start_header_element() after this to add a new
+ * header child element. SOAP Header elements allow out-of-band data
+ * to be transferred while not interfering with the request body.
+ *
+ * This should be called after e_soap_request_start_envelope() and
+ * before e_soap_request_start_body().
+ */
+void
+e_soap_request_start_header (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       req->priv->last_node = xmlNewChild (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "Header",
+               (const xmlChar *) NULL);
+}
+
+/**
+ * e_soap_request_end_header:
+ * @req: the #ESoapRequest.
+ *
+ * Closes the current SOAP Header element.
+ */
+void
+e_soap_request_end_header (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_start_header_element:
+ * @req: the #ESoapRequest.
+ * @name: name of the header element
+ * @must_understand: whether the recipient must understand the header in order
+ * to proceed with processing the request
+ * @actor_uri: the URI which represents the destination actor for this header.
+ * @prefix: the namespace prefix
+ * @ns_uri: the namespace URI
+ *
+ * Starts a new SOAP arbitrary header element.
+ */
+void
+e_soap_request_start_header_element (ESoapRequest *req,
+                                     const gchar *name,
+                                     gboolean must_understand,
+                                     const gchar *actor_uri,
+                                     const gchar *prefix,
+                                     const gchar *ns_uri)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       e_soap_request_start_element (req, name, prefix, ns_uri);
+       if (actor_uri != NULL)
+               xmlNewNsProp (
+                       req->priv->last_node,
+                       req->priv->soap_ns,
+                       (const xmlChar *) "actorUri",
+                       (const xmlChar *) actor_uri);
+       if (must_understand)
+               xmlNewNsProp (
+                       req->priv->last_node,
+                       req->priv->soap_ns,
+                       (const xmlChar *) "mustUnderstand",
+                       (const xmlChar *) "1");
+}
+
+/**
+ * e_soap_request_end_header_element:
+ * @req: the #ESoapRequest.
+ *
+ * Closes the current SOAP header element.
+ */
+void
+e_soap_request_end_header_element (ESoapRequest *req)
+{
+       e_soap_request_end_element (req);
+}
+
+/**
+ * e_soap_request_write_int:
+ * @req: the #ESoapRequest.
+ * @i: the integer value to write.
+ *
+ * Writes the stringified value of @i as the current element's content.
+ */
+void
+e_soap_request_write_int (ESoapRequest *req,
+                          glong i)
+{
+       gchar *string;
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       string = g_strdup_printf ("%" G_GINT64_FORMAT, (gint64) i);
+       e_soap_request_write_string (req, string);
+       g_free (string);
+}
+
+/**
+ * e_soap_request_write_double:
+ * @req: the #ESoapRequest.
+ * @d: the double value to write.
+ *
+ * Writes the stringified value of @d as the current element's content.
+ */
+void
+e_soap_request_write_double (ESoapRequest *req,
+                             gdouble d)
+{
+       gchar buffer[G_ASCII_DTOSTR_BUF_SIZE + 1];
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       g_ascii_dtostr (buffer, sizeof (buffer), d);
+       e_soap_request_write_string (req, buffer);
+}
+
+/**
+ * e_soap_request_write_base64:
+ * @req: the #ESoapRequest
+ * @string: the binary data buffer to encode
+ * @len: the length of data to encode
+ *
+ * Writes the Base-64 encoded value of @string as the current
+ * element's content.
+ **/
+void
+e_soap_request_write_base64 (ESoapRequest *req,
+                             const gchar *string,
+                             gint len)
+{
+       gchar *encoded;
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       encoded = g_base64_encode ((const guchar *) string, len);
+       e_soap_request_write_string (req, encoded);
+       g_free (encoded);
+}
+
+/**
+ * e_soap_request_write_time:
+ * @req: the #ESoapRequest.
+ * @timeval: the time_t to encode
+ *
+ * Writes the iso8601 value of @timeval as the current element's
+ * content.
+ **/
+void
+e_soap_request_write_time (ESoapRequest *req,
+                           time_t timeval)
+{
+       GTimeVal tv;
+       gchar *iso_time;
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       tv.tv_usec = 0;
+       tv.tv_sec = timeval;
+
+       iso_time = g_time_val_to_iso8601 (&tv);
+       e_soap_request_write_string (req, iso_time);
+       g_free (iso_time);
+}
+
+/**
+ * e_soap_request_write_string:
+ * @req: the #ESoapRequest.
+ * @string: string to write.
+ *
+ * Writes the @string as the current element's content.
+ */
+void
+e_soap_request_write_string (ESoapRequest *req,
+                             const gchar *string)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNodeAddContent (
+               req->priv->last_node,
+               (const xmlChar *) string);
+}
+
+/**
+ * e_soap_request_write_buffer:
+ * @req: the #ESoapRequest.
+ * @buffer: the string data buffer to write.
+ * @len: length of @buffer.
+ *
+ * Writes the string buffer pointed to by @buffer as the current
+ * element's content.
+ */
+void
+e_soap_request_write_buffer (ESoapRequest *req,
+                             const gchar *buffer,
+                             gint len)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNodeAddContentLen (
+               req->priv->last_node,
+               (const xmlChar *) buffer, len);
+}
+
+/**
+ * e_soap_request_set_element_type:
+ * @req: the #ESoapRequest.
+ * @xsi_type: the type name for the element.
+ *
+ * Sets the current element's XML schema xsi:type attribute, which
+ * specifies the element's type name.
+ */
+void
+e_soap_request_set_element_type (ESoapRequest *req,
+                                 const gchar *xsi_type)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNewNsProp (
+               req->priv->last_node,
+               req->priv->xsi_ns,
+               (const xmlChar *) "type",
+               (const xmlChar *) xsi_type);
+}
+
+/**
+ * e_soap_request_set_null:
+ * @req: the #ESoapRequest.
+ *
+ * Sets the current element's XML Schema xsi:null attribute.
+ */
+void
+e_soap_request_set_null (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNewNsProp (
+               req->priv->last_node,
+               req->priv->xsi_ns,
+               (const xmlChar *) "null",
+               (const xmlChar *) "1");
+}
+
+/**
+ * e_soap_request_add_attribute:
+ * @req: the #ESoapRequest.
+ * @name: name of the attribute
+ * @value: value of the attribute
+ * @prefix: the namespace prefix
+ * @ns_uri: the namespace URI
+ *
+ * Adds an XML attribute to the current element.
+ */
+void
+e_soap_request_add_attribute (ESoapRequest *req,
+                              const gchar *name,
+                              const gchar *value,
+                              const gchar *prefix,
+                              const gchar *ns_uri)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNewNsProp (
+               req->priv->last_node,
+               fetch_ns (req, prefix, ns_uri),
+               (const xmlChar *) name,
+               (const xmlChar *) value);
+}
+
+/**
+ * e_soap_request_add_namespace:
+ * @req: the #ESoapRequest.
+ * @prefix: the namespace prefix
+ * @ns_uri: the namespace URI, or NULL for empty namespace
+ *
+ * Adds a new XML namespace to the current element.
+ */
+void
+e_soap_request_add_namespace (ESoapRequest *req,
+                              const gchar *prefix,
+                              const gchar *ns_uri)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       if (ns_uri == NULL)
+               ns_uri = "";
+
+       xmlNewNs (
+               req->priv->last_node,
+               (const xmlChar *) ns_uri,
+               (const xmlChar *) prefix);
+}
+
+/**
+ * e_soap_request_set_default_namespace:
+ * @req: the #ESoapRequest.
+ * @ns_uri: the namespace URI.
+ *
+ * Sets the default namespace to the URI specified in @ns_uri. The
+ * default namespace becomes the namespace all non-explicitly
+ * namespaced child elements fall into.
+ */
+void
+e_soap_request_set_default_namespace (ESoapRequest *req,
+                                      const gchar *ns_uri)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       e_soap_request_add_namespace (req, NULL, ns_uri);
+}
+
+/**
+ * e_soap_request_set_encoding_style:
+ * @req: the #ESoapRequest.
+ * @enc_style: the new encodingStyle value
+ *
+ * Sets the encodingStyle attribute on the current element to the
+ * value of @enc_style.
+ */
+void
+e_soap_request_set_encoding_style (ESoapRequest *req,
+                                   const gchar *enc_style)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlNewNsProp (
+               req->priv->last_node,
+               req->priv->soap_ns,
+               (const xmlChar *) "encodingStyle",
+               (const xmlChar *) enc_style);
+}
+
+/**
+ * e_soap_request_reset:
+ * @req: the #ESoapRequest.
+ *
+ * Resets the internal XML representation of the SOAP request.
+ */
+void
+e_soap_request_reset (ESoapRequest *req)
+{
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       xmlFreeDoc (req->priv->doc);
+       req->priv->doc = xmlNewDoc ((const xmlChar *) "1.0");
+       req->priv->last_node = NULL;
+
+       g_free (req->priv->action);
+       req->priv->action = NULL;
+       req->priv->body_started = FALSE;
+
+       if (req->priv->env_uri != NULL) {
+               xmlFree (req->priv->env_uri);
+               req->priv->env_uri = NULL;
+       }
+
+       if (req->priv->env_prefix != NULL) {
+               xmlFree (req->priv->env_prefix);
+               req->priv->env_prefix = NULL;
+       }
+}
+
+/**
+ * e_soap_request_get_namespace_prefix:
+ * @req: the #ESoapRequest.
+ * @ns_uri: the namespace URI.
+ *
+ * Returns the namespace prefix for @ns_uri (or an empty string if
+ * @ns_uri is set to the default namespace)
+ *
+ * Returns: The namespace prefix, or %NULL if no namespace exists
+ * for the URI given.
+ */
+const gchar *
+e_soap_request_get_namespace_prefix (ESoapRequest *req,
+                                     const gchar *ns_uri)
+{
+       xmlNsPtr ns = NULL;
+
+       g_return_val_if_fail (E_IS_SOAP_REQUEST (req), NULL);
+       g_return_val_if_fail (ns_uri != NULL, NULL);
+
+       ns = xmlSearchNsByHref (
+               req->priv->doc,
+               req->priv->last_node,
+               (const xmlChar *) ns_uri);
+       if (ns != NULL) {
+               if (ns->prefix != NULL)
+                       return (const gchar *) ns->prefix;
+               else
+                       return "";
+       }
+
+       return NULL;
+}
+
+/**
+ * e_soap_request_get_xml_doc:
+ * @req: the #ESoapRequest.
+ *
+ * Returns the internal XML representation tree of the
+ * #ESoapRequest pointed to by @req.
+ *
+ * Returns: the #xmlDocPtr representing the SOAP request.
+ */
+xmlDocPtr
+e_soap_request_get_xml_doc (ESoapRequest *req)
+{
+       g_return_val_if_fail (E_IS_SOAP_REQUEST (req), NULL);
+
+       return req->priv->doc;
+}
+
+/**
+ * e_soap_request_persist:
+ * @req: the #ESoapRequest.
+ * @settings: a #CamelEwsSettings object, to read User-Agent header information from
+ *
+ * Writes the serialized XML tree to the #SoupMessage's buffer.
+ *
+ * Returns: (transfer full): a #SoupMessage containing the SOAP request at its
+ *    request body.
+ */
+SoupMessage *
+e_soap_request_persist (ESoapRequest *req,
+                       CamelEwsSettings *settings)
+{
+       SoupMessage *message;
+       xmlChar *body;
+       gint len;
+
+       g_return_if_fail (E_IS_SOAP_REQUEST (req));
+
+       message = soup_message_new_from_uri (req->priv->method, req->priv->uri);
+
+       if (!message)
+               return NULL;
+
+       xmlDocDumpMemory (req->priv->doc, &body, &len);
+
+       e_soup_session_util_set_message_request_body_from_data (message, FALSE,
+               "text/xml; charset=utf-8", body, len, (GDestroyNotify) xmlFree);
+
+       e_ews_connection_utils_set_user_agent_header (message, settings);
+
+       soup_message_headers_append (
+               soup_message_get_request_headers (message),
+               "Connection", "Keep-Alive");
+
+       return message;
+}
diff --git a/src/EWS/common/e-soap-request.h b/src/EWS/common/e-soap-request.h
new file mode 100644
index 00000000..fefce364
--- /dev/null
+++ b/src/EWS/common/e-soap-request.h
@@ -0,0 +1,135 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * SPDX-FileCopyrightText: (C) 1999-2008 Novell, Inc. (www.novell.com)
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef EWS_SOAP_REQUEST_H
+#define EWS_SOAP_REQUEST_H
+
+#include <time.h>
+#include <libxml/tree.h>
+#include <libsoup/soup-message.h>
+#include "camel-ews-settings.h"
+#include "e-soap-response.h"
+
+/* Standard GObject macros */
+#define E_TYPE_SOAP_REQUEST \
+       (e_soap_request_get_type ())
+#define E_SOAP_REQUEST(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), E_TYPE_SOAP_REQUEST, ESoapRequest))
+#define E_SOAP_REQUEST_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), E_TYPE_SOAP_REQUEST, ESoapRequestClass))
+#define E_IS_SOAP_REQUEST(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), E_TYPE_SOAP_REQUEST))
+#define E_IS_SOAP_REQUEST_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), E_TYPE_SOAP_REQUEST))
+#define E_SOAP_REQUEST_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), E_TYPE_SOAP_REQUEST, ESoapRequestClass))
+
+G_BEGIN_DECLS
+
+typedef struct _ESoapRequest ESoapRequest;
+typedef struct _ESoapRequestClass ESoapRequestClass;
+typedef struct _ESoapRequestPrivate ESoapRequestPrivate;
+
+struct _ESoapRequest {
+       GObject parent;
+       ESoapRequestPrivate *priv;
+};
+
+struct _ESoapRequestClass {
+       GObjectClass parent_class;
+};
+
+GType          e_soap_request_get_type         (void) G_GNUC_CONST;
+ESoapRequest * e_soap_request_new              (const gchar *method,
+                                                const gchar *uri_string,
+                                                gboolean standalone,
+                                                const gchar *xml_encoding,
+                                                const gchar *env_prefix,
+                                                const gchar *env_uri);
+ESoapRequest * e_soap_request_new_from_uri     (const gchar *method,
+                                                GUri *uri,
+                                                gboolean standalone,
+                                                const gchar *xml_encoding,
+                                                const gchar *env_prefix,
+                                                const gchar *env_uri);
+void           e_soap_request_start_envelope   (ESoapRequest *req);
+void           e_soap_request_end_envelope     (ESoapRequest *req);
+void           e_soap_request_start_body       (ESoapRequest *req);
+void           e_soap_request_end_body         (ESoapRequest *req);
+void           e_soap_request_start_element    (ESoapRequest *req,
+                                                const gchar *name,
+                                                const gchar *prefix,
+                                                const gchar *ns_uri);
+void           e_soap_request_end_element      (ESoapRequest *req);
+void           e_soap_request_start_fault      (ESoapRequest *req,
+                                                const gchar *faultcode,
+                                                const gchar *faultstring,
+                                                const gchar *faultfactor);
+void           e_soap_request_end_fault        (ESoapRequest *req);
+void           e_soap_request_start_fault_detail
+                                               (ESoapRequest *req);
+void           e_soap_request_end_fault_detail (ESoapRequest *req);
+void           e_soap_request_start_header     (ESoapRequest *req);
+void           e_soap_request_replace_header   (ESoapRequest *req,
+                                                const gchar *name,
+                                                const gchar *value);
+void           e_soap_request_end_header       (ESoapRequest *req);
+void           e_soap_request_start_header_element
+                                               (ESoapRequest *req,
+                                                const gchar *name,
+                                                gboolean must_understand,
+                                                const gchar *actor_uri,
+                                                const gchar *prefix,
+                                                const gchar *ns_uri);
+void           e_soap_request_end_header_element
+                                               (ESoapRequest *req);
+void           e_soap_request_write_int        (ESoapRequest *req,
+                                                glong i);
+void           e_soap_request_write_double     (ESoapRequest *req,
+                                                gdouble d);
+void           e_soap_request_write_base64     (ESoapRequest *req,
+                                                const gchar *string,
+                                                gint len);
+void           e_soap_request_write_time       (ESoapRequest *req,
+                                                time_t timeval);
+void           e_soap_request_write_string     (ESoapRequest *req,
+                                                const gchar *string);
+void           e_soap_request_write_buffer     (ESoapRequest *req,
+                                                const gchar *buffer,
+                                                gint len);
+void           e_soap_request_set_element_type (ESoapRequest *req,
+                                                const gchar *xsi_type);
+void           e_soap_request_set_null         (ESoapRequest *req);
+void           e_soap_request_add_attribute    (ESoapRequest *req,
+                                                const gchar *name,
+                                                const gchar *value,
+                                                const gchar *prefix,
+                                                const gchar *ns_uri);
+void           e_soap_request_add_namespace    (ESoapRequest *req,
+                                                const gchar *prefix,
+                                                const gchar *ns_uri);
+void           e_soap_request_set_default_namespace
+                                               (ESoapRequest *req,
+                                                const gchar *ns_uri);
+void           e_soap_request_set_encoding_style
+                                               (ESoapRequest *req,
+                                                const gchar *enc_style);
+void           e_soap_request_reset            (ESoapRequest *req);
+const gchar *  e_soap_request_get_namespace_prefix
+                                               (ESoapRequest *req,
+                                                const gchar *ns_uri);
+xmlDocPtr      e_soap_request_get_xml_doc      (ESoapRequest *req);
+SoupMessage *  e_soap_request_persist          (ESoapRequest *req,
+                                                CamelEwsSettings *settings);
+
+G_END_DECLS
+
+#endif /* E_SOAP_REQUEST_H */
diff --git a/src/EWS/common/e-soap-response.c b/src/EWS/common/e-soap-response.c
index 45de3069..911fe6a5 100644
--- a/src/EWS/common/e-soap-response.c
+++ b/src/EWS/common/e-soap-response.c
@@ -22,6 +22,22 @@ struct _ESoapResponsePrivate {
        xmlNodePtr xml_method;
        xmlNodePtr soap_fault;
        GList *parameters;
+
+       /* Content stealing */
+       gchar *steal_node;
+       gchar *steal_dir;
+       gboolean steal_base64;
+
+       gint steal_b64_state;
+       guint steal_b64_save;
+       gint steal_fd;
+
+       /* Progress callbacks */
+       gsize response_size;
+       gsize response_received;
+       gsize progress_percent;
+       ESoapProgressFn progress_fn;
+       gpointer progress_data;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (ESoapResponse, e_soap_response, G_TYPE_OBJECT)
@@ -43,6 +59,18 @@ soap_response_finalize (GObject *object)
        g_clear_pointer (&resp->priv->xmldoc, xmlFreeDoc);
        g_list_free (resp->priv->parameters);
 
+       if (resp->priv->ctxt) {
+               if (resp->priv->ctxt->myDoc)
+                       xmlFreeDoc (resp->priv->ctxt->myDoc);
+               xmlFreeParserCtxt (resp->priv->ctxt);
+       }
+
+       g_free (resp->priv->steal_node);
+       g_free (resp->priv->steal_dir);
+
+       if (resp->priv->steal_fd != -1)
+               close (resp->priv->steal_fd);
+
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_soap_response_parent_class)->finalize (object);
 }
@@ -62,6 +90,7 @@ e_soap_response_init (ESoapResponse *response)
        response->priv = e_soap_response_get_instance_private (response);
 
        response->priv->xmldoc = xmlNewDoc ((const xmlChar *)"1.0");
+       response->priv->steal_fd = -1;
 }
 
 /**
@@ -243,6 +272,263 @@ e_soap_response_from_xmldoc (ESoapResponse *response,
        return TRUE;
 }
 
+static void
+soap_sax_startElementNs (gpointer _ctxt,
+                         const xmlChar *localname,
+                         const xmlChar *prefix,
+                         const xmlChar *uri,
+                         gint nb_namespaces,
+                         const xmlChar **namespaces,
+                         gint nb_attributes,
+                         gint nb_defaulted,
+                         const xmlChar **attributes)
+{
+       xmlParserCtxt *ctxt = _ctxt;
+       ESoapRequest *ews_msg = ctxt->_private;
+       gchar *fname;
+
+       xmlSAX2StartElementNs (
+               ctxt, localname, prefix, uri, nb_namespaces,
+               namespaces, nb_attributes, nb_defaulted,
+               attributes);
+
+       /* steal_node can contain multiple node name separated by " " */
+       if (ews_msg->priv->steal_node && *ews_msg->priv->steal_node) {
+               gchar **prop = g_strsplit (ews_msg->priv->steal_node, " ", 0);
+               gint i = 0;
+               gboolean isnode = FALSE;
+
+               while (prop[i]) {
+                       if (strcmp ((const gchar *) localname, prop[i]) == 0) {
+                               isnode = TRUE;
+                               break;
+                       }
+                       i++;
+               }
+               g_strfreev (prop);
+
+               if (!isnode) return;
+       } else
+               return;
+
+       fname = g_build_filename (ews_msg->priv->steal_dir, "XXXXXX", NULL);
+       ews_msg->priv->steal_fd = g_mkstemp (fname);
+       if (ews_msg->priv->steal_fd != -1) {
+               if (ews_msg->priv->steal_base64) {
+                       gchar *enc = g_base64_encode ((guchar *) fname, strlen (fname));
+                       xmlSAX2Characters (ctxt, (xmlChar *) enc, strlen (enc));
+                       g_free (enc);
+               } else
+                       xmlSAX2Characters (ctxt, (xmlChar *) fname, strlen (fname));
+       } else {
+               gint err = errno;
+
+               g_warning ("%s: Failed to create temp file '%s': %s\n", G_STRFUNC, fname, g_strerror (err));
+       }
+       g_free (fname);
+}
+
+static void
+soap_sax_endElementNs (gpointer _ctxt,
+                       const xmlChar *localname,
+                       const xmlChar *prefix,
+                       const xmlChar *uri)
+{
+       xmlParserCtxt *ctxt = _ctxt;
+       ESoapRequest *ews_msg = ctxt->_private;
+
+       if (ews_msg->priv->steal_fd != -1) {
+               close (ews_msg->priv->steal_fd);
+               ews_msg->priv->steal_fd = -1;
+       }
+       xmlSAX2EndElementNs (ctxt, localname, prefix, uri);
+}
+
+static void
+soap_sax_characters (gpointer _ctxt,
+                     const xmlChar *ch,
+                     gint len)
+{
+       xmlParserCtxt *ctxt = _ctxt;
+       ESoapRequest *ews_msg = ctxt->_private;
+
+       if (ews_msg->priv->steal_fd == -1)
+               xmlSAX2Characters (ctxt, ch, len);
+       else if (!ews_msg->priv->steal_base64) {
+               if (write (ews_msg->priv->steal_fd, (const gchar *) ch, len) != len) {
+               write_err:
+                       /* Handle error better */
+                       g_warning ("Failed to write streaming data to file");
+               }
+       } else {
+               guchar *bdata = g_malloc ((len * 3 / 4) + 3);
+               gsize blen;
+
+               blen = g_base64_decode_step (
+                       (const gchar *) ch, len,
+                       bdata, &ews_msg->priv->steal_b64_state,
+                       &ews_msg->priv->steal_b64_save);
+               if (write (ews_msg->priv->steal_fd, (const gchar *) bdata, blen) != blen) {
+                       g_free (bdata);
+                       goto write_err;
+               }
+               g_free (bdata);
+       }
+}
+
+#define BUFFER_SIZE 16384
+
+gboolean
+e_soap_response_from_message_sync (ESoapResponse *response,
+                                  SoupMessage *msg,
+                                  GInputStream *response_data,
+                                  GCancellable *cancellable,
+                                  GError **error)
+{
+       const gchar *size;
+       gboolean success;
+       gpointer buffer;
+       gsize nread = 0;
+
+       g_return_val_if_fail (E_IS_SOAP_RESPONSE (response), FALSE);
+       g_return_val_if_fail (SOAP_IS_MESSAGE (msg), FALSE);
+       g_return_val_if_fail (G_IS_INPUT_STREAM (response_data), FALSE);
+
+       response->priv->response_size = 0;
+       response->priv->response_received = 0;
+       response->priv->progress_percent = 0;
+
+       /* Discard the existing context, if there is one, and start again */
+       if (response->priv->ctxt) {
+               if (response->priv->ctxt->myDoc)
+                       xmlFreeDoc (response->priv->ctxt->myDoc);
+               xmlFreeParserCtxt (response->priv->ctxt);
+               response->priv->ctxt = NULL;
+       }
+
+       if (response->priv->steal_fd != -1) {
+               close (response->priv->steal_fd);
+               response->priv->steal_fd = -1;
+       }
+
+       size = soup_message_headers_get_one (soup_message_get_response_headers (soup_msg), "Content-Length");
+
+       if (size)
+               req->priv->response_size = g_ascii_strtoll (size, NULL, 10);
+
+       buffer = g_malloc (BUFFER_SIZE);
+
+       while (success = g_input_stream_read_all (input_stream, buffer, BUFFER_SIZE, &nread, cancellable, 
error),
+              success && nread > 0) {
+               response->priv->response_received += nread;
+
+               if (response->priv->response_size && response->priv->progress_fn) {
+                       gint pc = response->priv->response_received * 100 / response->priv->response_size;
+                       if (response->priv->progress_percent != pc) {
+                               response->priv->progress_percent = pc;
+                               response->priv->progress_fn (response->priv->progress_data, 
response->priv->progress_percent);
+                       }
+               }
+
+               if (!response->priv->ctxt) {
+                       response->priv->ctxt = xmlCreatePushParserCtxt (NULL, req, buffer, nread, NULL);
+                       response->priv->ctxt->_private = response;
+                       response->priv->ctxt->sax->startElementNs = soap_sax_startElementNs;
+                       response->priv->ctxt->sax->endElementNs = soap_sax_endElementNs;
+                       response->priv->ctxt->sax->characters = soap_sax_characters;
+               } else {
+                       xmlParseChunk (response->priv->ctxt, buffer, nread, 0);
+               }
+       }
+
+       g_free (buffer);
+
+       if (success) {
+               if (response->priv->ctxt) {
+                       xmlDocPtr xmldoc;
+
+                       xmlParseChunk (response->priv->ctxt, 0, 0, 1);
+
+                       xmldoc = response->priv->ctxt->myDoc;
+
+                       xmlFreeParserCtxt (response->priv->ctxt);
+                       response->priv->ctxt = NULL;
+
+                       if (xmldoc) {
+                               success = e_soap_response_from_xmldoc (response, xmldoc);
+                               if (!success)
+                                       g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, 
"Received invalid SOAP response");
+                       } else
+                               succeess = FALSE;
+               } else {
+                       g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, "No data read");
+                       success = FALSE;
+               }
+       }
+
+       if (response->priv->ctxt) {
+               if (response->priv->ctxt->myDoc)
+                       xmlFreeDoc (response->priv->ctxt->myDoc);
+               xmlFreeParserCtxt (response->priv->ctxt);
+               response->priv->ctxt = NULL;
+       }
+
+       if (response->priv->steal_fd != -1) {
+               close (response->priv->steal_fd);
+               response->priv->steal_fd = -1;
+       }
+
+       return success;
+}
+
+/**
+ * e_soap_response_store_node_data:
+ * @response: the %ESoapResponse
+ * @nodename: the name of the XML node from which to store data
+ * @directory: cache directory in which to create data files
+ * @base64: flag to request base64 decoding of node content
+ *
+ * This requests that character data for certain XML nodes should
+ * be streamed directly to a disk file as it arrives, rather than
+ * being stored in memory.
+ *
+ * It is used only with e_soap_response_from_message_sync().
+ */
+void
+e_soap_response_store_node_data (ESoapResponse *response,
+                                const gchar *nodename,
+                                const gchar *directory,
+                                gboolean base64)
+{
+       g_return_if_fail (E_IS_SOAP_RESPONSE (response));
+       g_return_if_fail (response->priv->steal_node == NULL);
+
+       response->priv->steal_node = g_strdup (nodename);
+       response->priv->steal_dir = g_strdup (directory);
+       response->priv->steal_base64 = base64;
+}
+
+/**
+ * e_soap_response_set_progress_fn:
+ * @response: the %ESoapResponse
+ * @fn: callback function to be given progress updates
+ * @object: first argument to callback function
+ *
+ * Starts the top level SOAP Envelope element.
+ *
+ * It is used only with e_soap_response_from_message_sync().
+ */
+void
+e_soap_response_set_progress_fn (ESoapResponse *response,
+                                ESoapResponseProgressFn fn,
+                                gpointer object)
+{
+       g_return_if_fail (E_IS_SOAP_RESPONSE (response));
+
+       response->priv->progress_fn = fn;
+       response->priv->progress_data = object;
+}
+
 /**
  * e_soap_response_get_method_name:
  * @response: the #ESoapResponse object.
diff --git a/src/EWS/common/e-soap-response.h b/src/EWS/common/e-soap-response.h
index f0708c7f..6849a962 100644
--- a/src/EWS/common/e-soap-response.h
+++ b/src/EWS/common/e-soap-response.h
@@ -8,6 +8,7 @@
 #define E_SOAP_RESPONSE_H
 
 #include <glib-object.h>
+#include <libsoup/soup-message.h>
 #include <libxml/tree.h>
 
 /* Standard GObject macros */
@@ -31,6 +32,9 @@
 
 G_BEGIN_DECLS
 
+/* By an amazing coincidence, this looks a lot like camel_progress() */
+typedef void (* ESoapResponseProgressFn) (gpointer object, gint percent);
+
 typedef struct _ESoapResponse ESoapResponse;
 typedef struct _ESoapResponseClass ESoapResponseClass;
 typedef struct _ESoapResponsePrivate ESoapResponsePrivate;
@@ -54,6 +58,21 @@ gboolean     e_soap_response_from_string     (ESoapResponse *response,
                                                 gint xmlstr_length);
 gboolean       e_soap_response_from_xmldoc     (ESoapResponse *response,
                                                 xmlDoc *xmldoc);
+gboolean       e_soap_response_from_message_sync
+                                               (ESoapResponse *response,
+                                                SoupMessage *msg,
+                                                GInputStream *response_data,
+                                                GCancellable *cancellable,
+                                                GError **error);
+/* used only with e_soap_response_from_message_sync() */
+void           e_soap_response_store_node_data (ESoapResponse *response,
+                                                const gchar *nodename,
+                                                const gchar *directory,
+                                                gboolean base64);
+/* used only with e_soap_response_from_message_sync() */
+void           e_soap_response_set_progress_fn (ESoapResponse *response,
+                                                ESoapResponseProgressFn fn,
+                                                gpointer object);
 const gchar *  e_soap_response_get_method_name (ESoapResponse *response);
 void           e_soap_response_set_method_name (ESoapResponse *response,
                                                 const gchar *method_name);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]