diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 23d1a98..b56724b 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -590,6 +590,7 @@ camel_ews_folder_get_message (CamelFolder *folder,
 
 	add_props = e_ews_additional_props_new ();
 	add_props->field_uri = g_strdup ("item:MimeContent message:From message:Sender");
+	add_props->indexed_furis = g_slist_prepend (NULL, e_ews_indexed_field_uri_new ("item:InternetMessageHeader", "Date"));
 
 	res = e_ews_connection_get_items_sync (
 		cnc, pri, ids, "IdOnly", add_props,
@@ -698,7 +699,8 @@ camel_ews_folder_get_message (CamelFolder *folder,
 	message = camel_ews_folder_get_message_from_cache (ews_folder, uid, cancellable, error);
 	if (message) {
 		CamelInternetAddress *from;
-		const gchar *email = NULL;
+		const gchar *email = NULL, *date_header;
+		gboolean resave = FALSE;
 
 		from = camel_mime_message_get_from (message);
 
@@ -709,8 +711,6 @@ camel_ews_folder_get_message (CamelFolder *folder,
 			if (!mailbox)
 				mailbox = e_ews_item_get_sender (items->data);
 			if (mailbox) {
-				CamelStream *cache_stream;
-
 				email = NULL;
 
 				if (g_strcmp0 (mailbox->routing_type, "EX") == 0)
@@ -721,16 +721,34 @@ camel_ews_folder_get_message (CamelFolder *folder,
 				camel_mime_message_set_from (message, from);
 				g_object_unref (from);
 
-				g_rec_mutex_lock (&priv->cache_lock);
-				/* Ignore errors here, it's nothing fatal in this case */
-				cache_stream = ews_data_cache_get (ews_folder->cache, "cur", uid, NULL);
-				if (cache_stream) {
-					camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (message), cache_stream, cancellable, NULL);
-					g_object_unref (cache_stream);
-				}
-				g_rec_mutex_unlock (&priv->cache_lock);
+				resave = TRUE;
+			}
+		}
+
+		date_header = e_ews_item_get_date_header (items->data);
+		if (date_header && *date_header) {
+			time_t tt;
+			gint tz_offset;
+
+			tt = camel_header_decode_date (date_header, &tz_offset);
+			if (tt > 0) {
+				camel_mime_message_set_date (message, tt, tz_offset);
+				resave = TRUE;
 			}
 		}
+
+		if (resave) {
+			CamelStream *cache_stream;
+
+			g_rec_mutex_lock (&priv->cache_lock);
+			/* Ignore errors here, it's nothing fatal in this case */
+			cache_stream = ews_data_cache_get (ews_folder->cache, "cur", uid, NULL);
+			if (cache_stream) {
+				camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (message), cache_stream, cancellable, NULL);
+				g_object_unref (cache_stream);
+			}
+			g_rec_mutex_unlock (&priv->cache_lock);
+		}
 	}
 
 exit:
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 23dc779..0c7d84a 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -381,9 +381,16 @@ e_ews_extended_field_uri_free (EEwsExtendedFieldURI *ex_field_uri)
 }
 
 EEwsIndexedFieldURI *
-e_ews_indexed_field_uri_new (void)
+e_ews_indexed_field_uri_new (const gchar *uri,
+			     const gchar *index)
 {
-	return g_new0 (EEwsIndexedFieldURI, 1);
+	EEwsIndexedFieldURI *furi;
+
+	furi = g_new0 (EEwsIndexedFieldURI, 1);
+	furi->field_uri = g_strdup (uri);
+	furi->field_index = g_strdup (index);
+
+	return furi;
 }
 
 void
diff --git a/src/server/e-ews-connection.h b/src/server/e-ews-connection.h
index a5a409a..7d472dc 100644
--- a/src/server/e-ews-connection.h
+++ b/src/server/e-ews-connection.h
@@ -371,7 +371,8 @@ EEwsExtendedFieldURI *
 void		e_ews_extended_field_uri_free	(EEwsExtendedFieldURI *ex_field_uri);
 
 EEwsIndexedFieldURI *
-		e_ews_indexed_field_uri_new	(void);
+		e_ews_indexed_field_uri_new	(const gchar *uri,
+						 const gchar *index);
 void		e_ews_indexed_field_uri_free	(EEwsIndexedFieldURI *id_field_uri);
 
 EEwsAdditionalProps *
diff --git a/src/server/e-ews-item.c b/src/server/e-ews-item.c
index 701e9dd..3f9ae98 100644
--- a/src/server/e-ews-item.c
+++ b/src/server/e-ews-item.c
@@ -106,6 +106,7 @@ struct _EEwsItemPrivate {
 	gchar *subject;
 	gchar *mime_content;
 
+	gchar *date_header;
 	time_t date_received;
 	time_t date_sent;
 	time_t date_created;
@@ -208,6 +209,9 @@ e_ews_item_dispose (GObject *object)
 	g_free (priv->references);
 	priv->references = NULL;
 
+	g_free (priv->date_header);
+	priv->date_header = NULL;
+
 	g_free (priv->timezone);
 	priv->timezone = NULL;
 
@@ -1041,6 +1045,20 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 			priv->item_id->change_key = e_soap_parameter_get_property (subparam, "ChangeKey");
 		} else if (!g_ascii_strcasecmp (name, "Subject")) {
 			priv->subject = e_soap_parameter_get_string_value (subparam);
+		} else if (!g_ascii_strcasecmp (name, "InternetMessageHeaders")) {
+			for (subparam1 = e_soap_parameter_get_first_child_by_name (subparam, "InternetMessageHeader");
+			     subparam1;
+			     subparam1 = e_soap_parameter_get_next_child (subparam1)) {
+				gchar *str = e_soap_parameter_get_property (subparam1, "HeaderName");
+
+				if (g_strcmp0 (str, "Date") == 0) {
+					priv->date_header = e_soap_parameter_get_string_value (subparam1);
+					g_free (str);
+					break;
+				}
+
+				g_free (str);
+			}
 		} else if (!g_ascii_strcasecmp (name, "DateTimeReceived")) {
 			value = e_soap_parameter_get_string_value (subparam);
 			priv->date_received = ews_item_parse_date (value);
@@ -1307,6 +1325,7 @@ e_ews_item_get_in_replyto (EEwsItem *item)
 
 	return (const gchar *) item->priv->in_replyto;
 }
+
 const gchar *
 e_ews_item_get_references (EEwsItem *item)
 {
@@ -1315,6 +1334,14 @@ e_ews_item_get_references (EEwsItem *item)
 	return (const gchar *) item->priv->references;
 }
 
+const gchar *
+e_ews_item_get_date_header (EEwsItem *item)
+{
+	g_return_val_if_fail (E_IS_EWS_ITEM (item), NULL);
+
+	return item->priv->date_header;
+}
+
 time_t
 e_ews_item_get_date_received (EEwsItem *item)
 {
diff --git a/src/server/e-ews-item.h b/src/server/e-ews-item.h
index 03b43f3..832057a 100644
--- a/src/server/e-ews-item.h
+++ b/src/server/e-ews-item.h
@@ -185,6 +185,7 @@ const gchar *	e_ews_item_get_msg_id		(EEwsItem *item);
 const gchar *	e_ews_item_get_uid		(EEwsItem *item);
 const gchar *	e_ews_item_get_in_replyto	(EEwsItem *item);
 const gchar *	e_ews_item_get_references	(EEwsItem *item);
+const gchar *	e_ews_item_get_date_header	(EEwsItem *item);
 time_t		e_ews_item_get_date_received	(EEwsItem *item);
 time_t		e_ews_item_get_date_sent	(EEwsItem *item);
 time_t		e_ews_item_get_date_created	(EEwsItem *item);
