diff -cr evolution-mapi-0.28.3.orig/src/libexchangemapi/exchange-mapi-connection.c evolution-mapi-0.28.3/src/libexchangemapi/exchange-mapi-connection.c
*** evolution-mapi-0.28.3.orig/src/libexchangemapi/exchange-mapi-connection.c	2010-03-01 14:28:12.000000000 +0100
--- evolution-mapi-0.28.3/src/libexchangemapi/exchange-mapi-connection.c	2010-03-22 05:01:00.000000000 +0100
***************
*** 2627,2633 ****
  	SPropTagArray = set_SPropTagArray(mem_ctx, 0x7,
  					  PR_FID,
  					  PR_CONTAINER_CLASS,
! 					  PR_DISPLAY_NAME,
  					  PR_CONTENT_UNREAD,
  					  PR_CONTENT_COUNT,
  					  PR_MESSAGE_SIZE,
--- 2627,2633 ----
  	SPropTagArray = set_SPropTagArray(mem_ctx, 0x7,
  					  PR_FID,
  					  PR_CONTAINER_CLASS,
! 					  PR_DISPLAY_NAME_UNICODE,
  					  PR_CONTENT_UNREAD,
  					  PR_CONTENT_COUNT,
  					  PR_MESSAGE_SIZE,
***************
*** 2654,2660 ****
  
  		const mapi_id_t *fid = (const mapi_id_t *)find_SPropValue_data(&rowset.aRow[i], PR_FID);
  		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);
  		const uint32_t *total = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_CONTENT_COUNT);
  		const uint32_t *child = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_FOLDER_CHILD_COUNT);
--- 2654,2660 ----
  
  		const mapi_id_t *fid = (const mapi_id_t *)find_SPropValue_data(&rowset.aRow[i], PR_FID);
  		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_UNICODE);
  		const uint32_t *unread = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_CONTENT_UNREAD);
  		const uint32_t *total = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_CONTENT_COUNT);
  		const uint32_t *child = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_FOLDER_CHILD_COUNT);
***************
*** 2856,2862 ****
  
  	/* Build the array of Mailbox properties we want to fetch */
  	SPropTagArray = set_SPropTagArray(mem_ctx, 0x4,
! 					  PR_DISPLAY_NAME,
  					  PR_MAILBOX_OWNER_NAME,
  					  PR_MESSAGE_SIZE,
  					  PR_USER_NAME);
--- 2856,2862 ----
  
  	/* Build the array of Mailbox properties we want to fetch */
  	SPropTagArray = set_SPropTagArray(mem_ctx, 0x4,
! 					  PR_DISPLAY_NAME_UNICODE,
  					  PR_MAILBOX_OWNER_NAME,
  					  PR_MESSAGE_SIZE,
  					  PR_USER_NAME);
***************
*** 2876,2882 ****
  	aRow.lpProps = lpProps;
  
  	/* betting that these will never fail */
! 	mailbox_name = (const char *) find_SPropValue_data(&aRow, PR_DISPLAY_NAME);
  	mailbox_owner_name = (const char *) find_SPropValue_data(&aRow, PR_MAILBOX_OWNER_NAME);
  	mailbox_user_name = (const char *) find_SPropValue_data(&aRow, PR_USER_NAME);
  	mailbox_size = (const uint32_t *)find_SPropValue_data (&aRow, PR_MESSAGE_SIZE);
--- 2876,2882 ----
  	aRow.lpProps = lpProps;
  
  	/* betting that these will never fail */
! 	mailbox_name = (const char *) find_SPropValue_data(&aRow, PR_DISPLAY_NAME_UNICODE);
  	mailbox_owner_name = (const char *) find_SPropValue_data(&aRow, PR_MAILBOX_OWNER_NAME);
  	mailbox_user_name = (const char *) find_SPropValue_data(&aRow, PR_USER_NAME);
  	mailbox_size = (const uint32_t *)find_SPropValue_data (&aRow, PR_MESSAGE_SIZE);
diff -cr evolution-mapi-0.28.3.orig/src/libexchangemapi/exchange-mapi-utils.c evolution-mapi-0.28.3/src/libexchangemapi/exchange-mapi-utils.c
*** evolution-mapi-0.28.3.orig/src/libexchangemapi/exchange-mapi-utils.c	2010-03-01 14:28:12.000000000 +0100
--- evolution-mapi-0.28.3/src/libexchangemapi/exchange-mapi-utils.c	2010-03-22 05:01:00.000000000 +0100
***************
*** 44,83 ****
  gchar *
  utf8tolinux (const char *wstring)
  {
- 	TALLOC_CTX 	*mem_ctx;
- 	gchar		*newstr, *retval = NULL;
- 	gint i;
- 	gboolean all_ok = TRUE;
- 
  	g_return_val_if_fail (wstring != NULL, NULL);
  
! 	/* If all letters are with code <128 then there is nothing
! 	   to be converted, thus return the original string copy.
! 	   It's not working always, but should be fine for now.
! 
! 	   This is a temporary hack before the windows_to_utf8 will
! 	   be fixed to not drop some letters.
! 	*/
! 	for (i = 0; all_ok && wstring[i]; i++) {
! 		/* signed char, thus '> 128' means '< 0' */
! 		all_ok = wstring[i] > 0;
! 	}
! 
! 	if (all_ok)
! 		return g_strdup (wstring);
! 
! 	mem_ctx = talloc_init ("ExchangeMAPI_utf8tolinux");
! 
! 	newstr = windows_to_utf8(mem_ctx, wstring);
! 
! 	if (g_utf8_validate (newstr, -1, NULL)) 
! 		retval = g_strdup (newstr);
! 	else
! 		retval = g_strdup (wstring);
! 
! 	talloc_free (mem_ctx);
! 
! 	return retval;
  }
  
  inline gchar *
--- 44,52 ----
  gchar *
  utf8tolinux (const char *wstring)
  {
  	g_return_val_if_fail (wstring != NULL, NULL);
  
! 	return g_strdup (wstring);
  }
  
  inline gchar *
