diff --git a/src/calendar/e-cal-backend-mapi.c b/src/calendar/e-cal-backend-mapi.c
index 2c04ae6..3831909 100644
--- a/src/calendar/e-cal-backend-mapi.c
+++ b/src/calendar/e-cal-backend-mapi.c
@@ -1853,7 +1853,7 @@ e_cal_backend_mapi_send_objects (ECalBackendSync *backend, EDataCal *cal, const
 			mid = exchange_mapi_create_item (olFolderOutbox, 0, 
 							exchange_mapi_cal_util_build_name_id, GINT_TO_POINTER(kind), 
 							exchange_mapi_cal_util_build_props, &cbdata, 
-							recipients, attachments, streams, 0);
+							recipients, attachments, streams, MAPI_OPTIONS_MOVE_TO_SENTITEMS);
 			g_free (cbdata.props);
 			if (!mid) {
 				g_object_unref (comp);
diff --git a/src/camel/camel-mapi-transport.c b/src/camel/camel-mapi-transport.c
index 1bef7de..f17b3ab 100644
--- a/src/camel/camel-mapi-transport.c
+++ b/src/camel/camel-mapi-transport.c
@@ -87,7 +87,7 @@ mapi_message_item_send (MapiItem *item)
 	mid = exchange_mapi_create_item (olFolderOutbox, fid, NULL, NULL, 
 					 camel_mapi_utils_create_item_build_props,
 					 item, item->recipients,
-					 item->attachments, item->generic_streams, 0);
+					 item->attachments, item->generic_streams, MAPI_OPTIONS_MOVE_TO_SENTITEMS);
 
 	return mid;
 }
diff --git a/src/libexchangemapi/exchange-mapi-connection.c b/src/libexchangemapi/exchange-mapi-connection.c
index 7982750..8a55f37 100644
--- a/src/libexchangemapi/exchange-mapi-connection.c
+++ b/src/libexchangemapi/exchange-mapi-connection.c
@@ -32,14 +32,14 @@
 #include <param.h>
 
 #define DEFAULT_PROF_PATH ".evolution/mapi-profiles.ldb"
-#define d(x) x
+#define d(x)
 
 static struct mapi_session *global_mapi_session= NULL;
 static GStaticRecMutex connect_lock = G_STATIC_REC_MUTEX_INIT;
 
 
-#define LOCK() 		g_message("%s: %s: lock(connect_lock)", G_STRLOC, G_STRFUNC);g_static_rec_mutex_lock(&connect_lock);
-#define UNLOCK() 	g_message("%s: %s: unlock(connect_lock)", G_STRLOC, G_STRFUNC);g_static_rec_mutex_unlock(&connect_lock);
+#define LOCK() 		/*g_message("%s: %s: lock(connect_lock)", G_STRLOC, G_STRFUNC);*/g_static_rec_mutex_lock(&connect_lock);
+#define UNLOCK() 	/*g_message("%s: %s: unlock(connect_lock)", G_STRLOC, G_STRFUNC);*/g_static_rec_mutex_unlock(&connect_lock);
 
 #if 0
 #define LOGALL() 	lp_set_cmdline(global_mapi_ctx->lp_ctx, "log level", "10"); global_mapi_ctx->dumpdata = TRUE;
@@ -2122,6 +2122,59 @@ exchange_mapi_create_item (uint32_t olFolder, mapi_id_t fid,
 		}
 	}
 
+	if ((options & MAPI_OPTIONS_MOVE_TO_SENTITEMS) != 0) {
+		struct SPropValue *lpProps;
+		struct SPropTagArray *tagArray;
+		uint32_t count = 0;
+
+		/* Build the array of Mailbox properties we want to fetch */
+		tagArray = set_SPropTagArray (mem_ctx, 0x1, PR_IPM_SENTMAIL_ENTRYID);
+
+		lpProps = talloc_zero	(mem_ctx, struct SPropValue);
+		retval = GetProps (&obj_store, tagArray, &lpProps, &count);
+		MAPIFreeBuffer (tagArray);
+
+		if (retval != MAPI_E_SUCCESS || lpProps->ulPropTag != PR_IPM_SENTMAIL_ENTRYID) {
+			mapi_errstr ("GetProps of sent items", GetLastError());
+		} else if (count != 1 || !lpProps) {
+			printf ("%s: not only 1 item received?! (%d)\n", __FUNCTION__, count);
+		} else {
+			struct SPropValue sprop[1];
+			struct SBinary_short bin;
+
+			bin.cb = lpProps->value.bin.cb;
+			bin.lpb = lpProps->value.bin.lpb;
+
+			set_SPropValue_proptag (&sprop[0], PR_SENTMAIL_ENTRYID, &bin);
+
+			printf ("%s: setting some entry ID\n", __FUNCTION__);
+			if (SetProps (&obj_message, sprop, 1) != MAPI_E_SUCCESS) {
+				mapi_errstr ("SetProps on sent folder EntryID", GetLastError());
+				//* ignore this error and follow with sending * /
+			}
+			printf ("done\n"); fflush (stdout);
+		}
+
+		/*
+		ExchangeMAPIFolder *sent_folder = exchange_mapi_folder_get_default_folder (olFolderSentMail);
+
+		printf ("%s: sent:%p eid:%p\n", __FUNCTION__, sent_folder,  sent_folder ? exchange_mapi_folder_get_entryid (sent_folder) : NULL);
+		if (sent_folder && exchange_mapi_folder_get_entryid (sent_folder)) {
+			const struct SBinary_short *entryid = exchange_mapi_folder_get_entryid (sent_folder);
+			struct SPropValue sprop; 
+			set_SPropValue_proptag (&sprop, PR_SENTMAIL_ENTRYID, entryid);
+
+			printf ("%s: setting some entry ID\n", __FUNCTION__);
+			if (SetProps (&obj_message, &sprop, 1) != MAPI_E_SUCCESS) {
+				mapi_errstr ("SetProps on sent folder EntryID", GetLastError());
+				/* ignore this error and follow with sending * /
+			}
+		}*/
+
+		printf ("%s: moved along sent items\n", __FUNCTION__); fflush (stdout);
+	}
+
+	printf ("second setprop\n");
 	/* set properties for the item */
 	retval = SetProps(&obj_message, props, propslen);
 	if (retval != MAPI_E_SUCCESS) {
@@ -2567,8 +2620,9 @@ get_child_folders(TALLOC_CTX *mem_ctx, ExchangeMAPIFolderCategory folder_hier, m
 		goto cleanup;
 	}
 
-	SPropTagArray = set_SPropTagArray(mem_ctx, 0x7,
+	SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
 					  PR_FID,
+					  PR_ENTRYID,
 					  PR_CONTAINER_CLASS,
 					  PR_DISPLAY_NAME,
 					  PR_CONTENT_UNREAD,
@@ -2596,6 +2650,7 @@ get_child_folders(TALLOC_CTX *mem_ctx, ExchangeMAPIFolderCategory folder_hier, m
 		gchar *newname = NULL;
 
 		const mapi_id_t *fid = (const mapi_id_t *)find_SPropValue_data(&rowset.aRow[i], PR_FID);
+		const struct SBinary_short *entryid = (const struct SBinary_short *)find_SPropValue_data (&rowset.aRow[i], PR_ENTRYID);
 		const char *class = (const char *)find_SPropValue_data(&rowset.aRow[i], PR_CONTAINER_CLASS);
 		const char *name = (const char *)find_SPropValue_data(&rowset.aRow[i], PR_DISPLAY_NAME);
 		const uint32_t *unread = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_CONTENT_UNREAD);
@@ -2607,10 +2662,10 @@ get_child_folders(TALLOC_CTX *mem_ctx, ExchangeMAPIFolderCategory folder_hier, m
 			class = IPF_NOTE;
 
 		newname = utf8tolinux (name);
-		g_print("\n|---+ %-15s : (Container class: %s %016" G_GINT64_MODIFIER "X) UnRead : %d Total : %d size : %d", 
-			newname, class, *fid, unread ? *unread : 0, total ? *total : 0, folder_size ? *folder_size : 0);
+		g_print("\n|---+ %-15s : (Container class: %s %016" G_GINT64_MODIFIER "X) UnRead : %d Total : %d size : %d %p", 
+			newname, class, *fid, unread ? *unread : 0, total ? *total : 0, folder_size ? *folder_size : 0, entryid);
 
-		folder = exchange_mapi_folder_new (newname, class, folder_hier, *fid, folder_id,
+		folder = exchange_mapi_folder_new (newname, class, folder_hier, *fid, folder_id, entryid,
 						   child ? *child : 0, unread ? *unread : 0, total ? *total : 0);
 
 		folder->size = folder_size ? *folder_size : 0;
@@ -2836,7 +2891,7 @@ exchange_mapi_get_folders_list (GSList **mapi_folders)
 
 	/* FIXME: May have to get the child folders count? Do we need/use it? */
 	folder = exchange_mapi_folder_new (utf8_mailbox_name, IPF_NOTE, 
-					   MAPI_PERSONAL_FOLDER, mailbox_id, 0, 0, 0 ,0); 
+					   MAPI_PERSONAL_FOLDER, mailbox_id, 0, NULL, 0, 0 ,0); 
 	folder->is_default = true;
 	folder->default_type = olFolderTopInformationStore; /*Is this correct ?*/
 	folder->size = *mailbox_size;
@@ -2910,7 +2965,7 @@ exchange_mapi_get_pf_folders_list (GSList **mapi_folders, mapi_id_t parent_fid)
 	}
 	/*  TODO : Localized string */
 	folder = exchange_mapi_folder_new ("All Public Folders", IPF_NOTE, 0, 
-					   mailbox_id, 0, 0, 0 ,0);
+					   mailbox_id, 0, NULL, 0, 0 ,0);
 	folder->is_default = true;
 	folder->default_type = olPublicFoldersAllPublicFolders;
 
diff --git a/src/libexchangemapi/exchange-mapi-connection.h b/src/libexchangemapi/exchange-mapi-connection.h
index b2db6a8..c1acc4b 100644
--- a/src/libexchangemapi/exchange-mapi-connection.h
+++ b/src/libexchangemapi/exchange-mapi-connection.h
@@ -38,7 +38,8 @@ typedef enum {
 	MAPI_OPTIONS_DONT_SUBMIT = 1<<5, 
 	MAPI_OPTIONS_GETBESTBODY = 1<<6,
 	MAPI_OPTIONS_USE_PFSTORE = 1<<7,
-	MAPI_OPTIONS_DONT_OPEN_MESSAGE = 1<<8
+	MAPI_OPTIONS_DONT_OPEN_MESSAGE = 1<<8,
+	MAPI_OPTIONS_MOVE_TO_SENTITEMS = 1<<9
 } ExchangeMAPIOptions;
 
 #define MAPI_OPTIONS_FETCH_ALL MAPI_OPTIONS_FETCH_ATTACHMENTS | \
diff --git a/src/libexchangemapi/exchange-mapi-folder.c b/src/libexchangemapi/exchange-mapi-folder.c
index 98bc484..2301740 100644
--- a/src/libexchangemapi/exchange-mapi-folder.c
+++ b/src/libexchangemapi/exchange-mapi-folder.c
@@ -33,9 +33,9 @@ static GSList *folder_list = NULL;
 /* we use a static mutex - even the same thread *may not* use the static vars concurrently */
 static GStaticMutex folder_lock = G_STATIC_MUTEX_INIT;
 
-#define LOCK() 		g_message("%s: %s: lock(folder_lock)", G_STRLOC, G_STRFUNC);g_static_mutex_lock(&folder_lock)
-#define UNLOCK() 	g_message("%s: %s: unlock(folder_lock)", G_STRLOC, G_STRFUNC);g_static_mutex_unlock(&folder_lock)
-#define d(x) x
+#define LOCK() 		/*g_message("%s: %s: lock(folder_lock)", G_STRLOC, G_STRFUNC);*/g_static_mutex_lock(&folder_lock)
+#define UNLOCK() 	/*g_message("%s: %s: unlock(folder_lock)", G_STRLOC, G_STRFUNC);*/g_static_mutex_unlock(&folder_lock)
+#define d(x)
 
 static ExchangeMAPIFolderType
 container_class_to_type (const char *type)
@@ -62,7 +62,7 @@ container_class_to_type (const char *type)
 }
 
 ExchangeMAPIFolder *
-exchange_mapi_folder_new (const char *folder_name, const char *container_class, ExchangeMAPIFolderCategory category, mapi_id_t folder_id, mapi_id_t parent_folder_id, uint32_t child_count, uint32_t unread_count, uint32_t total)
+exchange_mapi_folder_new (const char *folder_name, const char *container_class, ExchangeMAPIFolderCategory category, mapi_id_t folder_id, mapi_id_t parent_folder_id, const struct SBinary_short *entryid, uint32_t child_count, uint32_t unread_count, uint32_t total)
 {
 	ExchangeMAPIFolder *folder;
 
@@ -76,6 +76,14 @@ exchange_mapi_folder_new (const char *folder_name, const char *container_class,
 	folder->unread_count = unread_count;
 	folder->total = total;
 	folder->category = category;
+	folder->entryid = NULL;
+
+	if (entryid && folder->entryid->cb > 0 && folder->entryid->lpb) {
+		folder->entryid = g_new0 (struct SBinary_short, 1);
+		folder->entryid->cb = entryid->cb;
+		folder->entryid->lpb = g_malloc (folder->entryid->cb);
+		memcpy (folder->entryid->lpb, entryid->lpb, folder->entryid->cb);
+	}
 
 	return folder;
 }
@@ -85,6 +93,11 @@ exchange_mapi_folder_free (ExchangeMAPIFolder *folder)
 {
 	if (folder) {
 		g_free (folder->folder_name);
+		if (folder->entryid) {
+			g_free (folder->entryid->lpb);
+			g_free (folder->entryid);
+		}
+
 		g_free (folder);
 	}
 }
@@ -113,6 +126,14 @@ exchange_mapi_folder_get_parent_id (ExchangeMAPIFolder *folder)
 	return folder->parent_folder_id;
 }
 
+const struct SBinary_short *
+exchange_mapi_folder_get_entryid (ExchangeMAPIFolder *folder)
+{
+	g_return_val_if_fail (folder != NULL, NULL);
+
+	return folder->entryid;
+}
+
 gboolean
 exchange_mapi_folder_is_root (ExchangeMAPIFolder *folder)
 {
@@ -161,7 +182,7 @@ exchange_mapi_folder_get_folder (mapi_id_t fid)
 	tmp = folder_list;
 	while (tmp) {
 		ExchangeMAPIFolder * folder = tmp->data;
-		g_print ("%016" G_GINT64_MODIFIER "X %016" G_GINT64_MODIFIER "X\n", folder->folder_id, fid);
+		//g_print ("%016" G_GINT64_MODIFIER "X %016" G_GINT64_MODIFIER "X\n", folder->folder_id, fid);
 		if (folder->folder_id == fid)
 			return folder;
 		tmp=tmp->next;
@@ -170,6 +191,27 @@ exchange_mapi_folder_get_folder (mapi_id_t fid)
 	return NULL;
 }
 
+ExchangeMAPIFolder *
+exchange_mapi_folder_get_default_folder (guint32 default_type)
+{
+	GSList *tmp = folder_list;
+
+	if (!folder_list)
+		exchange_mapi_peek_folder_list ();
+	
+	tmp = folder_list;
+	while (tmp) {
+		ExchangeMAPIFolder * folder = tmp->data;
+
+		if (folder->is_default && folder->default_type == default_type)
+			return folder;
+
+		tmp = tmp->next;
+	}
+
+	return NULL;
+}
+
 void
 exchange_mapi_folder_list_free (void)
 {
diff --git a/src/libexchangemapi/exchange-mapi-folder.h b/src/libexchangemapi/exchange-mapi-folder.h
index 026ad6f..d885894 100644
--- a/src/libexchangemapi/exchange-mapi-folder.h
+++ b/src/libexchangemapi/exchange-mapi-folder.h
@@ -61,6 +61,7 @@ typedef struct _ExchangeMAPIFolder {
 	ExchangeMAPIFolderCategory category;
 	mapi_id_t folder_id;
 	mapi_id_t parent_folder_id;
+	struct SBinary_short *entryid;
 	guint32 child_count;
 	guint32 unread_count;
 	guint32 total;
@@ -75,7 +76,7 @@ typedef struct _ExchangeMAPIFolder {
 ExchangeMAPIFolder *
 exchange_mapi_folder_new (const char *folder_name, const char *container_class, 
 			  ExchangeMAPIFolderCategory catgory, 
-			  mapi_id_t folder_id, mapi_id_t parent_folder_id, 
+			  mapi_id_t folder_id, mapi_id_t parent_folder_id, const struct SBinary_short *entryid,
 			  uint32_t child_count, uint32_t unread_count, uint32_t total);
 void exchange_mapi_folder_free (ExchangeMAPIFolder *folder);
 ExchangeMAPIFolderType exchange_mapi_container_class (char *type);
@@ -83,6 +84,7 @@ ExchangeMAPIFolderType exchange_mapi_container_class (char *type);
 const gchar* exchange_mapi_folder_get_name (ExchangeMAPIFolder *folder);
 guint64 exchange_mapi_folder_get_fid (ExchangeMAPIFolder *folder);
 guint64 exchange_mapi_folder_get_parent_id (ExchangeMAPIFolder *folder);
+const struct SBinary_short *exchange_mapi_folder_get_entryid (ExchangeMAPIFolder *folder);
 ExchangeMAPIFolderType exchange_mapi_folder_get_type (ExchangeMAPIFolder *folder);
 guint32 exchange_mapi_folder_get_unread_count (ExchangeMAPIFolder *folder);
 guint32 exchange_mapi_folder_get_total_count (ExchangeMAPIFolder *folder);
@@ -91,6 +93,7 @@ gboolean exchange_mapi_folder_is_root (ExchangeMAPIFolder *folder);
 GSList * exchange_mapi_peek_folder_list (void);
 void exchange_mapi_folder_list_free (void);
 ExchangeMAPIFolder * exchange_mapi_folder_get_folder (mapi_id_t fid);
+ExchangeMAPIFolder * exchange_mapi_folder_get_default_folder (guint32 default_type);
 void exchange_mapi_folder_list_add (ExchangeMAPIFolder *folder);
 
 #endif
