[evolution-mapi/gnome-2-30] Bug #600389 - UTF8 characters in contacts not shown properly



commit ef1663c562c9149d3ba621fa02c51b83e2ba3962
Author: Milan Crha <mcrha redhat com>
Date:   Tue Apr 13 20:21:35 2010 +0200

    Bug #600389 - UTF8 characters in contacts not shown properly

 .../exchange-mapi-account-setup.c                  |   12 +-
 src/addressbook/e-book-backend-mapi-gal.c          |   94 ++++----
 src/addressbook/e-book-backend-mapi.c              |  250 ++++++++++++--------
 src/calendar/e-cal-backend-mapi.c                  |  106 ++++++++-
 src/camel/camel-mapi-folder.c                      |   50 +---
 src/camel/camel-mapi-utils.c                       |   12 +-
 src/libexchangemapi/exchange-mapi-cal-utils.c      |   84 ++++----
 src/libexchangemapi/exchange-mapi-cal-utils.h      |   12 -
 src/libexchangemapi/exchange-mapi-connection.c     |   67 +++---
 9 files changed, 398 insertions(+), 289 deletions(-)
---
diff --git a/src/account-setup-eplugin/exchange-mapi-account-setup.c b/src/account-setup-eplugin/exchange-mapi-account-setup.c
index 1664575..2e92650 100644
--- a/src/account-setup-eplugin/exchange-mapi-account-setup.c
+++ b/src/account-setup-eplugin/exchange-mapi-account-setup.c
@@ -121,7 +121,9 @@ create_profile_callback (struct SRowSet *rowset, gpointer data)
 
 	/* If we can find the exact username, then find & return its index. */
 	for (i = 0; i < rowset->cRows; i++) {
-		lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT);
+		lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT_UNICODE);
+		if (!lpProp_account)
+			lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT);
 
 		if (lpProp_account && lpProp_account->value.lpszA &&
 		    !g_strcmp0 (username, lpProp_account->value.lpszA))
@@ -156,8 +158,12 @@ create_profile_callback (struct SRowSet *rowset, gpointer data)
 	gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (store));
 
 	for (i = 0; i < rowset->cRows; i++) {
-		lpProp_fullname = get_SPropValue_SRow(&(rowset->aRow[i]), PR_DISPLAY_NAME);
-		lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT);
+		lpProp_fullname = get_SPropValue_SRow(&(rowset->aRow[i]), PR_DISPLAY_NAME_UNICODE);
+		if (!lpProp_fullname)
+			lpProp_fullname = get_SPropValue_SRow(&(rowset->aRow[i]), PR_DISPLAY_NAME);
+		lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT_UNICODE);
+		if (!lpProp_account)
+			lpProp_account = get_SPropValue_SRow(&(rowset->aRow[i]), PR_ACCOUNT);
 
 		if (lpProp_fullname && lpProp_fullname->value.lpszA &&
 		    lpProp_account && lpProp_account->value.lpszA) {
diff --git a/src/addressbook/e-book-backend-mapi-gal.c b/src/addressbook/e-book-backend-mapi-gal.c
index ecdd389..29ca36c 100644
--- a/src/addressbook/e-book-backend-mapi-gal.c
+++ b/src/addressbook/e-book-backend-mapi-gal.c
@@ -42,52 +42,50 @@ static const struct field_element_mapping {
 
 	} mappings [] = { 
 
-	{ E_CONTACT_UID, PT_STRING8, 0, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_UID, PT_UNICODE, 0, ELEMENT_TYPE_SIMPLE},
 	{ E_CONTACT_REV, PT_SYSTIME, PR_LAST_MODIFICATION_TIME, ELEMENT_TYPE_SIMPLE},
 		
-	{ E_CONTACT_FILE_AS, PT_STRING8, PR_EMS_AB_MANAGER_T, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FULL_NAME, PT_STRING8, PR_DISPLAY_NAME, ELEMENT_TYPE_SIMPLE },
-	{ E_CONTACT_GIVEN_NAME, PT_STRING8, PR_GIVEN_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FAMILY_NAME, PT_STRING8, PR_SURNAME , ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_NICKNAME, PT_STRING8, PR_NICKNAME, ELEMENT_TYPE_SIMPLE },
-
-	{ E_CONTACT_EMAIL_1, PT_STRING8, PROP_TAG(PT_UNICODE, 0x8084), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_EMAIL_2, PT_STRING8, PROP_TAG(PT_UNICODE, 0x8094), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_EMAIL_3, PT_STRING8, PROP_TAG(PT_UNICODE, 0x80a4), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_IM_AIM,  PT_STRING8, PROP_TAG(PT_UNICODE, 0x8062), ELEMENT_TYPE_COMPLEX},	
-		
-	{ E_CONTACT_PHONE_BUSINESS, PT_STRING8, PR_OFFICE_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_HOME, PT_STRING8, PR_HOME_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_MOBILE, PT_STRING8, PR_MOBILE_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_HOME_FAX, PT_STRING8, PR_HOME_FAX_NUMBER ,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_BUSINESS_FAX, PT_STRING8, PR_BUSINESS_FAX_NUMBER,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_PAGER, PT_STRING8, PR_PAGER_TELEPHONE_NUMBER,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_ASSISTANT, PT_STRING8, PR_ASSISTANT_TELEPHONE_NUMBER ,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_COMPANY, PT_STRING8, PR_COMPANY_MAIN_PHONE_NUMBER ,ELEMENT_TYPE_SIMPLE},
-
-	{ E_CONTACT_HOMEPAGE_URL, PT_STRING8, 0x802b001e, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FREEBUSY_URL, PT_STRING8, 0x80d8001e, ELEMENT_TYPE_SIMPLE},
-
-	{ E_CONTACT_ROLE, PT_STRING8, PR_PROFESSION, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_TITLE, PT_STRING8, PR_TITLE, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ORG, PT_STRING8, PR_COMPANY_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ORG_UNIT, PT_STRING8, PR_DEPARTMENT_NAME,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_MANAGER, PT_STRING8, PR_MANAGER_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ASSISTANT, PT_STRING8, PR_ASSISTANT, ELEMENT_TYPE_SIMPLE},
-		
-	{ E_CONTACT_OFFICE, PT_STRING8, PR_OFFICE_LOCATION, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_SPOUSE, PT_STRING8, PR_SPOUSE_NAME, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FILE_AS, PT_UNICODE, PR_EMS_AB_MANAGER_T_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FULL_NAME, PT_UNICODE, PR_DISPLAY_NAME_UNICODE, ELEMENT_TYPE_SIMPLE },
+	{ E_CONTACT_GIVEN_NAME, PT_UNICODE, PR_GIVEN_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FAMILY_NAME, PT_UNICODE, PR_SURNAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_NICKNAME, PT_UNICODE, PR_NICKNAME_UNICODE, ELEMENT_TYPE_SIMPLE },
+
+	{ E_CONTACT_EMAIL_1, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8084), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_EMAIL_2, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8094), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_EMAIL_3, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x80a4), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_IM_AIM,  PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8062), ELEMENT_TYPE_COMPLEX},
+
+	{ E_CONTACT_PHONE_BUSINESS, PT_UNICODE, PR_OFFICE_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_HOME, PT_UNICODE, PR_HOME_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_MOBILE, PT_UNICODE, PR_MOBILE_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_HOME_FAX, PT_UNICODE, PR_HOME_FAX_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_BUSINESS_FAX, PT_UNICODE, PR_BUSINESS_FAX_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_PAGER, PT_UNICODE, PR_PAGER_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_ASSISTANT, PT_UNICODE, PR_ASSISTANT_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_COMPANY, PT_UNICODE, PR_COMPANY_MAIN_PHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_HOMEPAGE_URL, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x802b), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FREEBUSY_URL, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x80d8), ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_ROLE, PT_UNICODE, PR_PROFESSION_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_TITLE, PT_UNICODE, PR_TITLE_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ORG, PT_UNICODE, PR_COMPANY_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ORG_UNIT, PT_UNICODE, PR_DEPARTMENT_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_MANAGER, PT_UNICODE, PR_MANAGER_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ASSISTANT, PT_UNICODE, PR_ASSISTANT_UNICODE, ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_OFFICE, PT_UNICODE, PR_OFFICE_LOCATION_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_SPOUSE, PT_UNICODE, PR_SPOUSE_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
 		
 	{ E_CONTACT_BIRTH_DATE,  PT_SYSTIME, PR_BIRTHDAY, ELEMENT_TYPE_COMPLEX},
 	{ E_CONTACT_ANNIVERSARY, PT_SYSTIME, PR_WEDDING_ANNIVERSARY, ELEMENT_TYPE_COMPLEX},
 		  
-	{ E_CONTACT_NOTE, PT_STRING8, PR_BODY, ELEMENT_TYPE_SIMPLE},
-		
+	{ E_CONTACT_NOTE, PT_UNICODE, PR_BODY_UNICODE, ELEMENT_TYPE_SIMPLE},
 
-	{ E_CONTACT_ADDRESS_HOME, PT_STRING8, 0x801a001e, ELEMENT_TYPE_COMPLEX},
-	{ E_CONTACT_ADDRESS_WORK, PT_STRING8, 0x801c001e, ELEMENT_TYPE_COMPLEX},
+	{ E_CONTACT_ADDRESS_HOME, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x801a), ELEMENT_TYPE_COMPLEX},
+	{ E_CONTACT_ADDRESS_WORK, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x801c), ELEMENT_TYPE_COMPLEX},
 //		{ E_CONTACT_BOOK_URI, ELEMENT_TYPE_SIMPLE, "book_uri"}
-//		{ E_CONTACT_EMAIL, PT_STRING8, 0x8084001e},
 //		{ E_CONTACT_CATEGORIES, },		
 	};
 
@@ -554,8 +552,8 @@ emapidump_gal (struct SRow *gal_entry)
 		gpointer value;
 
 		/* can cast it, no writing to the value; and it'll be freed not before the end of this function */
-		value = (gpointer) find_SPropValue_data (gal_entry, mappings[i].mapi_id);
-		if (mappings[i].element_type == PT_STRING8 && mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
+		value = (gpointer) exchange_mapi_util_find_row_propval (gal_entry, mappings[i].mapi_id);
+		if (mappings[i].element_type == PT_UNICODE && mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
 			if (value)
 				e_contact_set (contact, mappings[i].field_id, value);
 		} else if (mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
@@ -675,8 +673,8 @@ build_restriction_emails_contains (struct mapi_SRestriction *res,
 
 	res->rt = RES_PROPERTY;
 	res->res.resProperty.relop = RES_PROPERTY;
-	res->res.resProperty.ulPropTag = 0x801f001e; /* EMAIL */
-	res->res.resProperty.lpProp.ulPropTag = 0x801f001e; /* EMAIL*/
+	res->res.resProperty.ulPropTag = PROP_TAG(PT_UNICODE, 0x801f); /* EMAIL */
+	res->res.resProperty.lpProp.ulPropTag = PROP_TAG(PT_UNICODE, 0x801f); /* EMAIL*/
 	res->res.resProperty.lpProp.value.lpszA = email;
 
 	return TRUE;
@@ -716,32 +714,32 @@ build_multiple_restriction_emails_contains (struct mapi_SRestriction *res,
 
 	or_res[0].rt = RES_CONTENT;
 	or_res[0].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[0].res.resContent.ulPropTag = PR_EMS_AB_MANAGER_T;
+	or_res[0].res.resContent.ulPropTag = PR_EMS_AB_MANAGER_T_UNICODE;
 	or_res[0].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[1].rt = RES_CONTENT;
 	or_res[1].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[1].res.resContent.ulPropTag = PR_DISPLAY_NAME;
+	or_res[1].res.resContent.ulPropTag = PR_DISPLAY_NAME_UNICODE;
 	or_res[1].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[2].rt = RES_CONTENT;
 	or_res[2].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[2].res.resContent.ulPropTag = PR_GIVEN_NAME;
+	or_res[2].res.resContent.ulPropTag = PR_GIVEN_NAME_UNICODE;
 	or_res[2].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[3].rt = RES_CONTENT;
 	or_res[3].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[3].res.resContent.ulPropTag = 0x8084001e;
+	or_res[3].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x8084);
 	or_res[3].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[4].rt = RES_CONTENT;
 	or_res[4].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[4].res.resContent.ulPropTag = 0x8094001e;
+	or_res[4].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x8094);
 	or_res[4].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[5].rt = RES_CONTENT;
 	or_res[5].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[5].res.resContent.ulPropTag = 0x80a4001e;
+	or_res[5].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x80a4);
 	or_res[5].res.resContent.lpProp.value.lpszA = email;
 
 	res = g_new0 (struct mapi_SRestriction, 1);
diff --git a/src/addressbook/e-book-backend-mapi.c b/src/addressbook/e-book-backend-mapi.c
index 1a50828..abad9a6 100644
--- a/src/addressbook/e-book-backend-mapi.c
+++ b/src/addressbook/e-book-backend-mapi.c
@@ -73,6 +73,69 @@ struct _EBookBackendMAPIPrivate
 #define LOCK() g_mutex_lock (priv->lock)
 #define UNLOCK() g_mutex_unlock (priv->lock)
 
+/* this is a list of all known book MAPI tag IDs;
+   if you add new add it here too, otherwise it may not be fetched */
+static uint32_t known_book_mapi_ids[] = {
+	PR_ASSISTANT_TELEPHONE_NUMBER_UNICODE,
+	PR_ASSISTANT_UNICODE,
+	PR_BIRTHDAY,
+	PR_BODY,
+	PR_BODY_UNICODE,
+	PR_BUSINESS_FAX_NUMBER_UNICODE,
+	PR_COMPANY_MAIN_PHONE_NUMBER_UNICODE,
+	PR_COMPANY_NAME_UNICODE,
+	PR_COUNTRY_UNICODE,
+	PR_DEPARTMENT_NAME_UNICODE,
+	PR_DISPLAY_NAME_UNICODE,
+	PR_EMS_AB_MANAGER_T_UNICODE,
+	PR_FID,
+	PR_GIVEN_NAME_UNICODE,
+	PR_HASATTACH,
+	PR_HOME_ADDRESS_CITY_UNICODE,
+	PR_HOME_ADDRESS_COUNTRY_UNICODE,
+	PR_HOME_ADDRESS_POSTAL_CODE_UNICODE,
+	PR_HOME_ADDRESS_POST_OFFICE_BOX_UNICODE,
+	PR_HOME_ADDRESS_STATE_OR_PROVINCE_UNICODE,
+	PR_HOME_FAX_NUMBER_UNICODE,
+	PR_HOME_TELEPHONE_NUMBER_UNICODE,
+	PR_INSTANCE_NUM,
+	PR_INST_ID,
+	PR_LAST_MODIFICATION_TIME,
+	PR_LOCALITY_UNICODE,
+	PR_MANAGER_NAME_UNICODE,
+	PR_MESSAGE_CLASS,
+	PR_MID,
+	PR_MOBILE_TELEPHONE_NUMBER_UNICODE,
+	PR_NICKNAME_UNICODE,
+	PR_NORMALIZED_SUBJECT_UNICODE,
+	PR_OFFICE_LOCATION_UNICODE,
+	PR_OFFICE_TELEPHONE_NUMBER_UNICODE,
+	PR_PAGER_TELEPHONE_NUMBER_UNICODE,
+	PR_POSTAL_CODE_UNICODE,
+	PR_POST_OFFICE_BOX_UNICODE,
+	PR_PROFESSION_UNICODE,
+	PR_RULE_MSG_NAME,
+	PR_RULE_MSG_PROVIDER,
+	PR_SPOUSE_NAME_UNICODE,
+	PR_STATE_OR_PROVINCE_UNICODE,
+	PR_SUBJECT_UNICODE,
+	PR_SURNAME_UNICODE,
+	PR_TITLE_UNICODE,
+	PR_WEDDING_ANNIVERSARY,
+	PROP_TAG(PT_UNICODE, 0x801a),
+	PROP_TAG(PT_UNICODE, 0x801c),
+	PROP_TAG(PT_UNICODE, 0x801f),
+	PROP_TAG(PT_UNICODE, 0x802b),
+	PROP_TAG(PT_UNICODE, 0x8062),
+	PROP_TAG(PT_UNICODE, 0x8084),
+	PROP_TAG(PT_UNICODE, 0x8093),
+	PROP_TAG(PT_UNICODE, 0x8094),
+	PROP_TAG(PT_UNICODE, 0x80a3),
+	PROP_TAG(PT_UNICODE, 0x80a4),
+	PROP_TAG(PT_UNICODE, 0x80d8),
+	PROP_TAG(PT_UNICODE, 0x812c)
+};
+
 #define ELEMENT_TYPE_SIMPLE 0x01
 #define ELEMENT_TYPE_COMPLEX 0x02 /* fields which require explicit functions to set values into EContact and EGwItem */
 
@@ -94,52 +157,50 @@ static const struct field_element_mapping {
 
 	} mappings [] = { 
 
-	{ E_CONTACT_UID, PT_STRING8, 0, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_UID, PT_UNICODE, 0, ELEMENT_TYPE_SIMPLE},
 	{ E_CONTACT_REV, PT_SYSTIME, PR_LAST_MODIFICATION_TIME, ELEMENT_TYPE_SIMPLE},
 		
-	{ E_CONTACT_FILE_AS, PT_STRING8, PR_EMS_AB_MANAGER_T, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FULL_NAME, PT_STRING8, PR_DISPLAY_NAME, ELEMENT_TYPE_SIMPLE },
-	{ E_CONTACT_GIVEN_NAME, PT_STRING8, PR_GIVEN_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FAMILY_NAME, PT_STRING8, PR_SURNAME , ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_NICKNAME, PT_STRING8, PR_NICKNAME, ELEMENT_TYPE_SIMPLE },
-
-	{ E_CONTACT_EMAIL_1, PT_STRING8, PROP_TAG(PT_STRING8, 0x8084), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_EMAIL_2, PT_STRING8, PROP_TAG(PT_STRING8, 0x8093), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_EMAIL_3, PT_STRING8, PROP_TAG(PT_STRING8, 0x80a3), ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_IM_AIM,  PT_STRING8, PROP_TAG(PT_UNICODE, 0x8062), ELEMENT_TYPE_COMPLEX},	
-		
-	{ E_CONTACT_PHONE_BUSINESS, PT_STRING8, PR_OFFICE_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_HOME, PT_STRING8, PR_HOME_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_MOBILE, PT_STRING8, PR_MOBILE_TELEPHONE_NUMBER, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_HOME_FAX, PT_STRING8, PR_HOME_FAX_NUMBER ,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_BUSINESS_FAX, PT_STRING8, PR_BUSINESS_FAX_NUMBER,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_PAGER, PT_STRING8, PR_PAGER_TELEPHONE_NUMBER,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_ASSISTANT, PT_STRING8, PR_ASSISTANT_TELEPHONE_NUMBER ,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_PHONE_COMPANY, PT_STRING8, PR_COMPANY_MAIN_PHONE_NUMBER ,ELEMENT_TYPE_SIMPLE},
-
-	{ E_CONTACT_HOMEPAGE_URL, PT_STRING8, 0x802b001e, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_FREEBUSY_URL, PT_STRING8, 0x80d8001e, ELEMENT_TYPE_SIMPLE},
-
-	{ E_CONTACT_ROLE, PT_STRING8, PR_PROFESSION, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_TITLE, PT_STRING8, PR_TITLE, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ORG, PT_STRING8, PR_COMPANY_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ORG_UNIT, PT_STRING8, PR_DEPARTMENT_NAME,ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_MANAGER, PT_STRING8, PR_MANAGER_NAME, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_ASSISTANT, PT_STRING8, PR_ASSISTANT, ELEMENT_TYPE_SIMPLE},
-		
-	{ E_CONTACT_OFFICE, PT_STRING8, PR_OFFICE_LOCATION, ELEMENT_TYPE_SIMPLE},
-	{ E_CONTACT_SPOUSE, PT_STRING8, PR_SPOUSE_NAME, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FILE_AS, PT_UNICODE, PR_EMS_AB_MANAGER_T_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FULL_NAME, PT_UNICODE, PR_DISPLAY_NAME_UNICODE, ELEMENT_TYPE_SIMPLE },
+	{ E_CONTACT_GIVEN_NAME, PT_UNICODE, PR_GIVEN_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FAMILY_NAME, PT_UNICODE, PR_SURNAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_NICKNAME, PT_UNICODE, PR_NICKNAME_UNICODE, ELEMENT_TYPE_SIMPLE },
+
+	{ E_CONTACT_EMAIL_1, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8084), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_EMAIL_2, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8093), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_EMAIL_3, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x80a3), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_IM_AIM,  PT_UNICODE, PROP_TAG(PT_UNICODE, 0x8062), ELEMENT_TYPE_COMPLEX},
+
+	{ E_CONTACT_PHONE_BUSINESS, PT_UNICODE, PR_OFFICE_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_HOME, PT_UNICODE, PR_HOME_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_MOBILE, PT_UNICODE, PR_MOBILE_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_HOME_FAX, PT_UNICODE, PR_HOME_FAX_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_BUSINESS_FAX, PT_UNICODE, PR_BUSINESS_FAX_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_PAGER, PT_UNICODE, PR_PAGER_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_ASSISTANT, PT_UNICODE, PR_ASSISTANT_TELEPHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_PHONE_COMPANY, PT_UNICODE, PR_COMPANY_MAIN_PHONE_NUMBER_UNICODE, ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_HOMEPAGE_URL, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x802b), ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_FREEBUSY_URL, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x80d8), ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_ROLE, PT_UNICODE, PR_PROFESSION_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_TITLE, PT_UNICODE, PR_TITLE_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ORG, PT_UNICODE, PR_COMPANY_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ORG_UNIT, PT_UNICODE, PR_DEPARTMENT_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_MANAGER, PT_UNICODE, PR_MANAGER_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_ASSISTANT, PT_UNICODE, PR_ASSISTANT_UNICODE, ELEMENT_TYPE_SIMPLE},
+
+	{ E_CONTACT_OFFICE, PT_UNICODE, PR_OFFICE_LOCATION_UNICODE, ELEMENT_TYPE_SIMPLE},
+	{ E_CONTACT_SPOUSE, PT_UNICODE, PR_SPOUSE_NAME_UNICODE, ELEMENT_TYPE_SIMPLE},
 		
 	{ E_CONTACT_BIRTH_DATE,  PT_SYSTIME, PR_BIRTHDAY, ELEMENT_TYPE_COMPLEX},
 	{ E_CONTACT_ANNIVERSARY, PT_SYSTIME, PR_WEDDING_ANNIVERSARY, ELEMENT_TYPE_COMPLEX},
 		  
-	{ E_CONTACT_NOTE, PT_STRING8, PR_BODY, ELEMENT_TYPE_SIMPLE},
-		
+	{ E_CONTACT_NOTE, PT_UNICODE, PR_BODY_UNICODE, ELEMENT_TYPE_SIMPLE},
 
-	{ E_CONTACT_ADDRESS_HOME, PT_STRING8, 0x801a001e, ELEMENT_TYPE_COMPLEX},
-	{ E_CONTACT_ADDRESS_WORK, PT_STRING8, 0x801c001e, ELEMENT_TYPE_COMPLEX},
+	{ E_CONTACT_ADDRESS_HOME, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x801a), ELEMENT_TYPE_COMPLEX},
+	{ E_CONTACT_ADDRESS_WORK, PT_UNICODE, PROP_TAG(PT_UNICODE, 0x801c), ELEMENT_TYPE_COMPLEX},
 //		{ E_CONTACT_BOOK_URI, ELEMENT_TYPE_SIMPLE, "book_uri"}
-//		{ E_CONTACT_EMAIL, PT_STRING8, 0x8084001e},
 //		{ E_CONTACT_CATEGORIES, },		
 	};
 
@@ -212,8 +273,8 @@ build_restriction_emails_contains (struct mapi_SRestriction *res,
 
 	res->rt = RES_PROPERTY;
 	res->res.resProperty.relop = RES_PROPERTY;
-	res->res.resProperty.ulPropTag = 0x801f001e; /* EMAIL */
-	res->res.resProperty.lpProp.ulPropTag = 0x801f001e; /* EMAIL*/
+	res->res.resProperty.ulPropTag = PROP_TAG(PT_UNICODE, 0x801f); /* EMAIL */
+	res->res.resProperty.lpProp.ulPropTag = PROP_TAG(PT_UNICODE, 0x801f); /* EMAIL*/
 	res->res.resProperty.lpProp.value.lpszA = email;
 
 	return TRUE;
@@ -252,32 +313,32 @@ build_multiple_restriction_emails_contains (struct mapi_SRestriction *res,
 
 	or_res[0].rt = RES_CONTENT;
 	or_res[0].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[0].res.resContent.ulPropTag = PR_EMS_AB_MANAGER_T;
+	or_res[0].res.resContent.ulPropTag = PR_EMS_AB_MANAGER_T_UNICODE;
 	or_res[0].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[1].rt = RES_CONTENT;
 	or_res[1].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[1].res.resContent.ulPropTag = PR_DISPLAY_NAME;
+	or_res[1].res.resContent.ulPropTag = PR_DISPLAY_NAME_UNICODE;
 	or_res[1].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[2].rt = RES_CONTENT;
 	or_res[2].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[2].res.resContent.ulPropTag = PR_GIVEN_NAME;
+	or_res[2].res.resContent.ulPropTag = PR_GIVEN_NAME_UNICODE;
 	or_res[2].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[3].rt = RES_CONTENT;
 	or_res[3].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[3].res.resContent.ulPropTag = 0x8084001e;
+	or_res[3].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x8084);
 	or_res[3].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[4].rt = RES_CONTENT;
 	or_res[4].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[4].res.resContent.ulPropTag = 0x8094001e;
+	or_res[4].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x8094);
 	or_res[4].res.resContent.lpProp.value.lpszA = email;
 
 	or_res[5].rt = RES_CONTENT;
 	or_res[5].res.resContent.fuzzy = FL_FULLSTRING | FL_IGNORECASE;
-	or_res[5].res.resContent.ulPropTag = 0x80a4001e;
+	or_res[5].res.resContent.ulPropTag = PROP_TAG(PT_UNICODE, 0x80a4);
 	or_res[5].res.resContent.lpProp.value.lpszA = email;
 
 	res = g_new0 (struct mapi_SRestriction, 1);
@@ -462,9 +523,9 @@ mapi_book_build_props (struct SPropValue ** value, struct SPropTagArray * SPropT
 	props = g_new0 (struct SPropValue, 50); //FIXME: Correct value tbd
 	set_str_value ( E_CONTACT_FILE_AS, SPropTagArray->aulPropTag[0]);
 
-	set_str_value (E_CONTACT_FULL_NAME, PR_DISPLAY_NAME);
+	set_str_value (E_CONTACT_FULL_NAME, PR_DISPLAY_NAME_UNICODE);
 	set_SPropValue_proptag(&props[i++], PR_MESSAGE_CLASS, (const void *)IPM_CONTACT);
-	set_str_value (E_CONTACT_FILE_AS, PR_NORMALIZED_SUBJECT);
+	set_str_value (E_CONTACT_FILE_AS, PR_NORMALIZED_SUBJECT_UNICODE);
 	set_str_value (E_CONTACT_EMAIL_1,  SPropTagArray->aulPropTag[1]);
 //	set_str_value (E_CONTACT_EMAIL_1,  SPropTagArray->aulPropTag[2]);
 	set_str_value (E_CONTACT_FILE_AS,  SPropTagArray->aulPropTag[5]);
@@ -478,29 +539,28 @@ mapi_book_build_props (struct SPropValue ** value, struct SPropTagArray * SPropT
 //	set_str_value ( E_CONTACT_EMAIL_3, SPropTagArray->aulPropTag[12]);
 	
 	set_str_value (E_CONTACT_HOMEPAGE_URL, SPropTagArray->aulPropTag[6]);
-	set_str_value (E_CONTACT_FREEBUSY_URL, 0x812C001E);
-	
+	set_str_value (E_CONTACT_FREEBUSY_URL, PROP_TAG(PT_UNICODE, 0x812c));
 
-	set_str_value ( E_CONTACT_PHONE_BUSINESS, PR_OFFICE_TELEPHONE_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_HOME, PR_HOME_TELEPHONE_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_MOBILE, PR_MOBILE_TELEPHONE_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_HOME_FAX, PR_HOME_FAX_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_BUSINESS_FAX, PR_BUSINESS_FAX_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_PAGER, PR_PAGER_TELEPHONE_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_ASSISTANT, PR_ASSISTANT_TELEPHONE_NUMBER);
-	set_str_value ( E_CONTACT_PHONE_COMPANY, PR_COMPANY_MAIN_PHONE_NUMBER);
+	set_str_value ( E_CONTACT_PHONE_BUSINESS, PR_OFFICE_TELEPHONE_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_HOME, PR_HOME_TELEPHONE_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_MOBILE, PR_MOBILE_TELEPHONE_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_HOME_FAX, PR_HOME_FAX_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_BUSINESS_FAX, PR_BUSINESS_FAX_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_PAGER, PR_PAGER_TELEPHONE_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_ASSISTANT, PR_ASSISTANT_TELEPHONE_NUMBER_UNICODE);
+	set_str_value ( E_CONTACT_PHONE_COMPANY, PR_COMPANY_MAIN_PHONE_NUMBER_UNICODE);
 
-	set_str_value (E_CONTACT_MANAGER, PR_MANAGER_NAME);
-	set_str_value (E_CONTACT_ASSISTANT, PR_ASSISTANT);
-	set_str_value (E_CONTACT_ORG, PR_COMPANY_NAME);
-	set_str_value (E_CONTACT_ORG_UNIT, PR_DEPARTMENT_NAME);
-	set_str_value (E_CONTACT_ROLE, PR_PROFESSION);
-	set_str_value (E_CONTACT_TITLE, PR_TITLE);
+	set_str_value (E_CONTACT_MANAGER, PR_MANAGER_NAME_UNICODE);
+	set_str_value (E_CONTACT_ASSISTANT, PR_ASSISTANT_UNICODE);
+	set_str_value (E_CONTACT_ORG, PR_COMPANY_NAME_UNICODE);
+	set_str_value (E_CONTACT_ORG_UNIT, PR_DEPARTMENT_NAME_UNICODE);
+	set_str_value (E_CONTACT_ROLE, PR_PROFESSION_UNICODE);
+	set_str_value (E_CONTACT_TITLE, PR_TITLE_UNICODE);
 
-	set_str_value (E_CONTACT_OFFICE, PR_OFFICE_LOCATION);
-	set_str_value (E_CONTACT_SPOUSE, PR_SPOUSE_NAME);
+	set_str_value (E_CONTACT_OFFICE, PR_OFFICE_LOCATION_UNICODE);
+	set_str_value (E_CONTACT_SPOUSE, PR_SPOUSE_NAME_UNICODE);
 
-	set_str_value (E_CONTACT_NOTE, PR_BODY);
+	set_str_value (E_CONTACT_NOTE, PR_BODY_UNICODE);
 
 	//BDAY AND ANNV
 	if (e_contact_get (contact, E_CONTACT_BIRTH_DATE)) {
@@ -546,11 +606,11 @@ mapi_book_build_props (struct SPropValue ** value, struct SPropTagArray * SPropT
 
 		contact_addr = e_contact_get (contact, E_CONTACT_ADDRESS_HOME);
 		set_SPropValue_proptag (&props[i++], SPropTagArray->aulPropTag[8], contact_addr->street);
-		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_POST_OFFICE_BOX, contact_addr->ext);
-		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_CITY, contact_addr->locality);
-		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_STATE_OR_PROVINCE, contact_addr->region);
-		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_POSTAL_CODE, contact_addr->code);
-		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_COUNTRY, contact_addr->country);				
+		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_POST_OFFICE_BOX_UNICODE, contact_addr->ext);
+		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_CITY_UNICODE, contact_addr->locality);
+		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_STATE_OR_PROVINCE_UNICODE, contact_addr->region);
+		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_POSTAL_CODE_UNICODE, contact_addr->code);
+		set_SPropValue_proptag (&props[i++], PR_HOME_ADDRESS_COUNTRY_UNICODE, contact_addr->country);
 	}
 
 	if (e_contact_get (contact, E_CONTACT_ADDRESS_WORK)) {
@@ -558,11 +618,11 @@ mapi_book_build_props (struct SPropValue ** value, struct SPropTagArray * SPropT
 
 		contact_addr = e_contact_get (contact, E_CONTACT_ADDRESS_WORK);
 		set_SPropValue_proptag (&props[i++], SPropTagArray->aulPropTag[9], contact_addr->street);
-		set_SPropValue_proptag (&props[i++], PR_POST_OFFICE_BOX, contact_addr->ext);
-		set_SPropValue_proptag (&props[i++], PR_LOCALITY, contact_addr->locality);
-		set_SPropValue_proptag (&props[i++], PR_STATE_OR_PROVINCE, contact_addr->region);
-		set_SPropValue_proptag (&props[i++], PR_POSTAL_CODE, contact_addr->code);
-		set_SPropValue_proptag (&props[i++], PR_COUNTRY, contact_addr->country);				
+		set_SPropValue_proptag (&props[i++], PR_POST_OFFICE_BOX_UNICODE, contact_addr->ext);
+		set_SPropValue_proptag (&props[i++], PR_LOCALITY_UNICODE, contact_addr->locality);
+		set_SPropValue_proptag (&props[i++], PR_STATE_OR_PROVINCE_UNICODE, contact_addr->region);
+		set_SPropValue_proptag (&props[i++], PR_POSTAL_CODE_UNICODE, contact_addr->code);
+		set_SPropValue_proptag (&props[i++], PR_COUNTRY_UNICODE, contact_addr->country);
 	}
 
 	
@@ -825,7 +885,7 @@ e_book_backend_mapi_get_contact (EBookBackend *backend,
 			
 			exchange_mapi_util_mapi_ids_from_uid (id, &fid, &mid);
 			exchange_mapi_connection_fetch_item (priv->fid, mid, 
-							NULL, 0, 
+							known_book_mapi_ids, G_N_ELEMENTS (known_book_mapi_ids),
 							NULL, NULL, 
 							create_contact_item, contact, 
 							MAPI_OPTIONS_FETCH_ALL);
@@ -892,7 +952,7 @@ static const uint32_t GetPropsList[] = {
 	PR_MID,
 	PR_INST_ID,
 	PR_INSTANCE_NUM,
-	PR_SUBJECT,
+	PR_SUBJECT_UNICODE,
 	PR_MESSAGE_CLASS,
 	PR_HASATTACH,
 /* FIXME: is this tag fit to check if a recipient table exists or not ? */
@@ -905,7 +965,7 @@ static const uint16_t n_GetPropsList = G_N_ELEMENTS (GetPropsList);
 gboolean
 mapi_book_build_name_id_for_getprops (struct mapi_nameid *nameid, gpointer data)
 {
-	mapi_nameid_lid_add(nameid, 0x8084, PSETID_Address); /* PT_STRING8 - EmailOriginalDisplayName */
+	mapi_nameid_lid_add(nameid, 0x8084, PSETID_Address); /* PT_UNICODE - EmailOriginalDisplayName */
 //	mapi_nameid_lid_add(nameid, 0x8020, PSETID_Address);
 //	mapi_nameid_lid_add(nameid, 0x8021, PSETID_Address);
 	mapi_nameid_lid_add(nameid, 0x8094, PSETID_Address);
@@ -1043,8 +1103,8 @@ emapidump_contact(struct mapi_SPropValue_array *properties)
 		gpointer value;
 
 		/* can cast it, no writing to the value; and it'll be freed not before the end of this function */
-		value = (gpointer) find_mapi_SPropValue_data (properties, mappings[i].mapi_id);
-		if (mappings[i].element_type == PT_STRING8 && mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
+		value = (gpointer) exchange_mapi_util_find_array_propval (properties, mappings[i].mapi_id);
+		if (mappings[i].element_type == PT_UNICODE && mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
 			if (value)
 				e_contact_set (contact, mappings[i].field_id, value);
 		} else if (mappings[i].contact_type == ELEMENT_TYPE_SIMPLE) {
@@ -1097,20 +1157,20 @@ emapidump_contact(struct mapi_SPropValue_array *properties)
 					contact_addr.address_format = NULL;
 					contact_addr.po = NULL;
 					contact_addr.street = (char *)value;
-					contact_addr.ext = (char *)find_mapi_SPropValue_data (properties, PR_HOME_ADDRESS_POST_OFFICE_BOX);
-					contact_addr.locality = (char *)find_mapi_SPropValue_data (properties, PR_HOME_ADDRESS_CITY);
-					contact_addr.region = (char *)find_mapi_SPropValue_data (properties, PR_HOME_ADDRESS_STATE_OR_PROVINCE);
-					contact_addr.code = (char *)find_mapi_SPropValue_data (properties, PR_HOME_ADDRESS_POSTAL_CODE);
-					contact_addr.country = (char *)find_mapi_SPropValue_data (properties, PR_HOME_ADDRESS_COUNTRY);
+					contact_addr.ext = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_HOME_ADDRESS_POST_OFFICE_BOX_UNICODE);
+					contact_addr.locality = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_HOME_ADDRESS_CITY_UNICODE);
+					contact_addr.region = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_HOME_ADDRESS_STATE_OR_PROVINCE_UNICODE);
+					contact_addr.code = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_HOME_ADDRESS_POSTAL_CODE_UNICODE);
+					contact_addr.country = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_HOME_ADDRESS_COUNTRY_UNICODE);
 				} else {
 					contact_addr.address_format = NULL;
 					contact_addr.po = NULL;
 					contact_addr.street = (char *)value;
-					contact_addr.ext = (char *)find_mapi_SPropValue_data (properties, PR_POST_OFFICE_BOX);
-					contact_addr.locality = (char *)find_mapi_SPropValue_data (properties, PR_LOCALITY);
-					contact_addr.region = (char *)find_mapi_SPropValue_data (properties, PR_STATE_OR_PROVINCE);
-					contact_addr.code = (char *)find_mapi_SPropValue_data (properties, PR_POSTAL_CODE);
-					contact_addr.country = (char *)find_mapi_SPropValue_data (properties, PR_COUNTRY);
+					contact_addr.ext = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_POST_OFFICE_BOX_UNICODE);
+					contact_addr.locality = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_LOCALITY_UNICODE);
+					contact_addr.region = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_STATE_OR_PROVINCE_UNICODE);
+					contact_addr.code = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_POSTAL_CODE_UNICODE);
+					contact_addr.country = (gchar *)exchange_mapi_util_find_array_propval (properties, PR_COUNTRY_UNICODE);
 				}
 				e_contact_set (contact, mappings[i].field_id, &contact_addr);
 			}
@@ -1335,7 +1395,7 @@ book_view_thread (gpointer data)
                 	}
 		} else {
 			if (!exchange_mapi_connection_fetch_items (priv->fid, NULL, NULL,
-							NULL, 0, 
+							known_book_mapi_ids, G_N_ELEMENTS (known_book_mapi_ids),
 							NULL, NULL, 
 							create_contact_cb, book_view, 
 							MAPI_OPTIONS_FETCH_ALL)) {
@@ -1444,7 +1504,7 @@ build_cache (EBookBackendMAPI *ebmapi)
 	e_file_cache_freeze_changes (E_FILE_CACHE (priv->cache));
 	
 	if (!exchange_mapi_connection_fetch_items (priv->fid, NULL, NULL,
-						NULL, 0, 
+						known_book_mapi_ids, G_N_ELEMENTS (known_book_mapi_ids),
 						NULL, NULL, 
 						cache_contact_cb, ebmapi, 
 						MAPI_OPTIONS_FETCH_ALL)) {
@@ -1489,7 +1549,7 @@ update_cache (EBookBackendMAPI *ebmapi)
 	e_file_cache_freeze_changes (E_FILE_CACHE (priv->cache));
 	
 	if (!exchange_mapi_connection_fetch_items ( priv->fid, &res, NULL,
-						NULL, 0, 
+						known_book_mapi_ids, G_N_ELEMENTS (known_book_mapi_ids),
 						NULL, NULL, 
 						cache_contact_cb, ebmapi, 
 						MAPI_OPTIONS_FETCH_ALL)) {
diff --git a/src/calendar/e-cal-backend-mapi.c b/src/calendar/e-cal-backend-mapi.c
index e020f85..b96a411 100644
--- a/src/calendar/e-cal-backend-mapi.c
+++ b/src/calendar/e-cal-backend-mapi.c
@@ -91,6 +91,81 @@ struct _ECalBackendMAPIPrivate {
 	SyncDelta 		*dlock;
 };
 
+/* this is a list of all known calendar MAPI tag IDs;
+   if you add new add it here too, otherwise it may not be fetched */
+static uint32_t known_cal_mapi_ids[] = {
+	PR_7BIT_DISPLAY_NAME_UNICODE,
+	PR_ADDRTYPE,
+	PR_ATTACH_DATA_BIN,
+	PR_ATTACH_FILENAME_UNICODE,
+	PR_ATTACH_LONG_FILENAME_UNICODE,
+	PR_ATTACH_METHOD,
+	PR_BODY,
+	PR_BODY_UNICODE,
+	PR_CONVERSATION_TOPIC_UNICODE,
+	PR_CREATION_TIME,
+	PR_DISPLAY_NAME_UNICODE,
+	PR_DISPLAY_TYPE,
+	PR_END_DATE,
+	PR_FID,
+	PR_GIVEN_NAME_UNICODE,
+	PR_HTML,
+	PR_ICON_INDEX,
+	PR_IMPORTANCE,
+	PR_LAST_MODIFICATION_TIME,
+	PR_MESSAGE_CLASS,
+	PR_MESSAGE_FLAGS,
+	PR_MID,
+	PR_MSG_EDITOR_FORMAT,
+	PR_NORMALIZED_SUBJECT_UNICODE,
+	PR_OBJECT_TYPE,
+	PR_OWNER_APPT_ID,
+	PR_PRIORITY,
+	PR_PROCESSED,
+	PR_RCVD_REPRESENTING_ADDRTYPE,
+	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_UNICODE,
+	PR_RCVD_REPRESENTING_NAME_UNICODE,
+	PR_RECIPIENT_DISPLAY_NAME_UNICODE,
+	PR_RECIPIENTS_FLAGS,
+	PR_RECIPIENT_TRACKSTATUS,
+	PR_RECIPIENT_TYPE,
+	PR_RENDERING_POSITION,
+	PR_RESPONSE_REQUESTED,
+	PR_RTF_IN_SYNC,
+	PR_SENDER_ADDRTYPE,
+	PR_SENDER_EMAIL_ADDRESS_UNICODE,
+	PR_SENDER_NAME_UNICODE,
+	PR_SEND_INTERNET_ENCODING,
+	PR_SENSITIVITY,
+	PR_SENT_REPRESENTING_ADDRTYPE,
+	PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE,
+	PR_SENT_REPRESENTING_NAME_UNICODE,
+	PR_SMTP_ADDRESS_UNICODE,
+	PR_START_DATE,
+	PR_SUBJECT_UNICODE,
+	PROP_TAG(PT_BINARY, 0x0003),
+	PROP_TAG(PT_BINARY, 0x0023),
+	PROP_TAG(PT_BINARY, 0x8216),
+	PROP_TAG(PT_BINARY, 0x825E),
+	PROP_TAG(PT_BINARY, 0x825F),
+	PROP_TAG(PT_BOOLEAN, 0x8126),
+	PROP_TAG(PT_BOOLEAN, 0x8215),
+	PROP_TAG(PT_BOOLEAN, 0x8223),
+	PROP_TAG(PT_BOOLEAN, 0x8503),
+	PROP_TAG(PT_DOUBLE, 0x8102),
+	PROP_TAG(PT_LONG, 0x8101),
+	PROP_TAG(PT_LONG, 0x8201),
+	PROP_TAG(PT_LONG, 0x8205),
+	PROP_TAG(PT_STRING8, 0x8208),
+	PROP_TAG(PT_SYSTIME, 0x8104),
+	PROP_TAG(PT_SYSTIME, 0x8105),
+	PROP_TAG(PT_SYSTIME, 0x810F),
+	PROP_TAG(PT_SYSTIME, 0x820D),
+	PROP_TAG(PT_SYSTIME, 0x820E),
+	PROP_TAG(PT_SYSTIME, 0x8502),
+	PROP_TAG(PT_SYSTIME, 0x8560)
+};
+
 #define PARENT_TYPE E_TYPE_CAL_BACKEND_SYNC
 static ECalBackendClass *parent_class = NULL;
 
@@ -617,7 +692,7 @@ get_deltas (gpointer handle)
 	/* FIXME: GetProps does not seem to work for tasks :-( */
 	if (kind == ICAL_VTODO_COMPONENT) {
 		if (!exchange_mapi_connection_fetch_items (priv->fid, use_restriction ? &res : NULL, NULL,
-						NULL, 0, NULL, NULL, 
+						known_cal_mapi_ids, G_N_ELEMENTS (known_cal_mapi_ids), NULL, NULL, 
 						mapi_cal_get_changes_cb, cbmapi, 
 						MAPI_OPTIONS_FETCH_ALL)) {
 			/* FIXME: String : We need to restart evolution-data-server */
@@ -719,7 +794,7 @@ get_deltas (gpointer handle)
 
 		if (kind == ICAL_VTODO_COMPONENT) {
 			if (!exchange_mapi_connection_fetch_items (priv->fid, &res, NULL,
-						NULL, 0, NULL, NULL,
+						known_cal_mapi_ids, G_N_ELEMENTS (known_cal_mapi_ids), NULL, NULL,
 						mapi_cal_get_changes_cb, cbmapi,
 						MAPI_OPTIONS_FETCH_ALL)) {
 				e_cal_backend_notify_error (E_CAL_BACKEND (cbmapi), _("Error fetching changes from the server."));
@@ -1057,7 +1132,7 @@ populate_cache (ECalBackendMAPI *cbmapi)
 	/* FIXME: GetProps does not seem to work for tasks :-( */
 	if (kind == ICAL_VTODO_COMPONENT) {
 		if (!exchange_mapi_connection_fetch_items (priv->fid, NULL, NULL,
-						NULL, 0, NULL, NULL, 
+						known_cal_mapi_ids, G_N_ELEMENTS (known_cal_mapi_ids), NULL, NULL, 
 						mapi_cal_cache_create_cb, cbmapi, 
 						MAPI_OPTIONS_FETCH_ALL)) {
 			e_cal_backend_notify_error (E_CAL_BACKEND (cbmapi), _("Could not create cache file"));
@@ -1312,6 +1387,19 @@ e_cal_backend_mapi_open (ECalBackendSync *backend, EDataCal *cal, gboolean only_
 		return status;
 }
 
+static uint32_t req_props_list[] = {
+	PR_OWNER_APPT_ID,
+	PROP_TAG(PT_LONG, 0x8201),
+	PROP_TAG(PT_BINARY, 0x0023),
+	PROP_TAG(PT_BINARY, 0x0003),
+	PR_SENT_REPRESENTING_NAME_UNICODE,
+	PR_SENT_REPRESENTING_ADDRTYPE,
+	PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE,
+	PR_SENDER_NAME_UNICODE,
+	PR_SENDER_ADDRTYPE,
+	PR_SENDER_EMAIL_ADDRESS_UNICODE
+};	
+
 static gboolean 
 capture_req_props (FetchItemsCallbackData *item_data, gpointer data)
 {
@@ -1327,12 +1415,12 @@ capture_req_props (FetchItemsCallbackData *item_data, gpointer data)
 		cbdata->appt_seq = *ui32;
 	cbdata->cleanglobalid = (const struct Binary_r *)find_mapi_SPropValue_data(properties, PROP_TAG(PT_BINARY, 0x0023));
 	cbdata->globalid = (const struct Binary_r *)find_mapi_SPropValue_data(properties, PROP_TAG(PT_BINARY, 0x0003));
-	cbdata->username = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME);
+	cbdata->username = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME_UNICODE);
 	cbdata->useridtype = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_ADDRTYPE);
-	cbdata->userid = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS);
-	cbdata->ownername = exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME);
+	cbdata->userid = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE);
+	cbdata->ownername = exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME_UNICODE);
 	cbdata->owneridtype = exchange_mapi_util_find_array_propval (properties, PR_SENDER_ADDRTYPE);
-	cbdata->ownerid = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS);
+	cbdata->ownerid = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS_UNICODE);
 
 	return TRUE;
 }
@@ -1352,7 +1440,7 @@ get_server_data (ECalBackendMAPI *cbmapi, icalcomponent *comp, struct cbdata *cb
 	uid = icalcomponent_get_uid (comp);
 	exchange_mapi_util_mapi_id_from_string (uid, &mid);
 	if (exchange_mapi_connection_fetch_item (priv->fid, mid, 
-					NULL, 0, 
+					req_props_list, G_N_ELEMENTS (req_props_list),
 					NULL, NULL, 
 					capture_req_props, cbdata, 
 					MAPI_OPTIONS_FETCH_GENERIC_STREAMS))
@@ -1372,7 +1460,7 @@ get_server_data (ECalBackendMAPI *cbmapi, icalcomponent *comp, struct cbdata *cb
 	cast_mapi_SPropValue (&(res.res.resProperty.lpProp), &sprop);
 
 	exchange_mapi_connection_fetch_items (priv->fid, &res, NULL,
-					NULL, 0, 
+					req_props_list, G_N_ELEMENTS (req_props_list),
 					NULL, NULL, 
 					capture_req_props, cbdata, 
 					MAPI_OPTIONS_FETCH_GENERIC_STREAMS);
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index ab6f1e9..66fb6aa 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -561,14 +561,12 @@ mapi_update_cache (CamelFolder *folder, GSList *list, CamelFolderChangeInfo **ch
  				/* Build a SRow structure */
  				aRow = &recip->out_SRow;
 
- 				type = (uint32_t *) find_SPropValue_data (aRow, PR_RECIPIENT_TYPE);
+ 				type = (uint32_t *) exchange_mapi_util_find_row_propval (aRow, PR_RECIPIENT_TYPE);
 
 				if (type) {
- 					name = (const char *) find_SPropValue_data (aRow, PR_DISPLAY_NAME);
- 					name = name ? name : (const char *) find_SPropValue_data (aRow, PR_RECIPIENT_DISPLAY_NAME);
- 					name = name ? name : (const char *) find_SPropValue_data (aRow, 
- 												 PR_RECIPIENT_DISPLAY_NAME_UNICODE);
- 					name = name ? name : (const char *) find_SPropValue_data (aRow, 
+					name = (const gchar *) exchange_mapi_util_find_row_propval (aRow, PR_DISPLAY_NAME_UNICODE);
+					name = name ? name : (const gchar *) exchange_mapi_util_find_row_propval (aRow, PR_RECIPIENT_DISPLAY_NAME_UNICODE);
+					name = name ? name : (const gchar *) exchange_mapi_util_find_row_propval (aRow,
  												 PR_7BIT_DISPLAY_NAME_UNICODE);
  					display_name = name ? name : recip->email_id;
  					formatted_id = camel_internet_address_format_address(display_name, recip->email_id);
@@ -988,28 +986,20 @@ camel_mapi_folder_fetch_summary (CamelStore *store, const mapi_id_t fid, struct
 
 	const guint32 summary_prop_list[] = {
 		PR_INTERNET_CPID,
-		PR_SUBJECT,
 		PR_SUBJECT_UNICODE,
 		PR_MESSAGE_SIZE,
 		PR_MESSAGE_DELIVERY_TIME,
 		PR_MESSAGE_FLAGS,
-		PR_SENT_REPRESENTING_NAME,
 		PR_SENT_REPRESENTING_NAME_UNICODE,
-		PR_SENT_REPRESENTING_EMAIL_ADDRESS,
 		PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE,
 		PR_SENT_REPRESENTING_ADDRTYPE,
-		PR_SENT_REPRESENTING_ADDRTYPE_UNICODE,
 		PR_LAST_MODIFICATION_TIME,
 		PR_INTERNET_MESSAGE_ID,
 		PR_INTERNET_REFERENCES,
 		PR_IN_REPLY_TO_ID,
-		PR_DISPLAY_TO,
 		PR_DISPLAY_TO_UNICODE,
-		PR_DISPLAY_CC,
 		PR_DISPLAY_CC_UNICODE,
-		PR_DISPLAY_BCC,
 		PR_DISPLAY_BCC_UNICODE,
-		PR_TRANSPORT_MESSAGE_HEADERS,
 		PR_TRANSPORT_MESSAGE_HEADERS_UNICODE
 	};
 
@@ -1172,19 +1162,14 @@ static const uint32_t camel_GetPropsList[] = {
 	PR_MID, 
 	PR_INTERNET_CPID,
 
-
-	PR_TRANSPORT_MESSAGE_HEADERS,
 	PR_TRANSPORT_MESSAGE_HEADERS_UNICODE,
 	PR_MESSAGE_CLASS, 
-	PR_MESSAGE_CLASS_UNICODE, 
 	PR_MESSAGE_SIZE, 
 	PR_MESSAGE_FLAGS, 
 	PR_MESSAGE_DELIVERY_TIME, 
 	PR_MSG_EDITOR_FORMAT, 
 
-	PR_SUBJECT, 
 	PR_SUBJECT_UNICODE, 
-	PR_CONVERSATION_TOPIC, 
 	PR_CONVERSATION_TOPIC_UNICODE, 
 
 	/*Properties used for message threading.*/
@@ -1199,11 +1184,8 @@ static const uint32_t camel_GetPropsList[] = {
  	/*PR_BODY_HTML, */
  	/*PR_BODY_HTML_UNICODE, */
 
-	PR_DISPLAY_TO, 
 	PR_DISPLAY_TO_UNICODE, 
-	PR_DISPLAY_CC, 
 	PR_DISPLAY_CC_UNICODE, 
-	PR_DISPLAY_BCC, 
 	PR_DISPLAY_BCC_UNICODE, 
 
 	PR_CREATION_TIME, 
@@ -1216,25 +1198,16 @@ static const uint32_t camel_GetPropsList[] = {
 	PR_OWNER_APPT_ID, 
 	PR_PROCESSED, 
 
-	PR_SENT_REPRESENTING_NAME, 
 	PR_SENT_REPRESENTING_NAME_UNICODE, 
 	PR_SENT_REPRESENTING_ADDRTYPE, 
-	PR_SENT_REPRESENTING_ADDRTYPE_UNICODE, 
-	PR_SENT_REPRESENTING_EMAIL_ADDRESS, 
 	PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE, 
 
-	PR_SENDER_NAME, 
 	PR_SENDER_NAME_UNICODE, 
 	PR_SENDER_ADDRTYPE, 
-	PR_SENDER_ADDRTYPE_UNICODE, 
-	PR_SENDER_EMAIL_ADDRESS, 
 	PR_SENDER_EMAIL_ADDRESS_UNICODE, 
 
-	PR_RCVD_REPRESENTING_NAME, 
 	PR_RCVD_REPRESENTING_NAME_UNICODE, 
 	PR_RCVD_REPRESENTING_ADDRTYPE, 
-	PR_RCVD_REPRESENTING_ADDRTYPE_UNICODE, 
-	PR_RCVD_REPRESENTING_EMAIL_ADDRESS, 
 	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_UNICODE
 };
 
@@ -1371,7 +1344,7 @@ fetch_item_cb (FetchItemsCallbackData *item_data, gpointer data)
 
 		if (appointment_body_str && *appointment_body_str) {
 			body = g_new0(ExchangeMAPIStream, 1);
-			body->proptag = PR_BODY;
+			body->proptag = PR_BODY_UNICODE;
 			body->value = g_byte_array_new ();
 			body->value = g_byte_array_append (body->value, appointment_body_str, strlen ((const char *)appointment_body_str));
 
@@ -1443,12 +1416,11 @@ mapi_mime_set_recipient_list (CamelMimeMessage *msg, MapiItem *item)
 		aRow = &recip->out_SRow;
 		
 		/*Name is probably available in one of these props.*/
-		name = (const char *) find_SPropValue_data (aRow, PR_DISPLAY_NAME);
-		name = name ? name : (const char *) find_SPropValue_data (aRow, PR_RECIPIENT_DISPLAY_NAME);
-		name = name ? name : (const char *) find_SPropValue_data (aRow, PR_RECIPIENT_DISPLAY_NAME_UNICODE);
-		name = name ? name : (const char *) find_SPropValue_data (aRow, PR_7BIT_DISPLAY_NAME_UNICODE);
+		name = (const gchar *) exchange_mapi_util_find_row_propval (aRow, PR_DISPLAY_NAME_UNICODE);
+		name = name ? name : (const gchar *) exchange_mapi_util_find_row_propval (aRow, PR_RECIPIENT_DISPLAY_NAME_UNICODE);
+		name = name ? name : (const gchar *) exchange_mapi_util_find_row_propval (aRow, PR_7BIT_DISPLAY_NAME_UNICODE);
 
-		type = (uint32_t *) find_SPropValue_data (aRow, PR_RECIPIENT_TYPE);
+		type = (uint32_t *) exchange_mapi_util_find_row_propval (aRow, PR_RECIPIENT_TYPE);
 		
 		/*Fallbacks. Not good*/
 		display_name = name ? g_strdup (name) : g_strdup (recip->email_id);
@@ -1748,11 +1720,11 @@ mapi_mime_classify_attachments (GSList *attachments, GSList **inline_attachs, GS
 		part = camel_mime_part_new ();
 
 		filename = (const char *) exchange_mapi_util_find_SPropVal_array_propval(attach->lpProps, 
-											 PR_ATTACH_LONG_FILENAME);
+											 PR_ATTACH_LONG_FILENAME_UNICODE);
 
 		if (!(filename && *filename))
 			filename = (const char *) exchange_mapi_util_find_SPropVal_array_propval(attach->lpProps, 
-												 PR_ATTACH_FILENAME);
+												 PR_ATTACH_FILENAME_UNICODE);
 		camel_mime_part_set_filename(part, g_strdup(filename));
 		camel_content_type_set_param (((CamelDataWrapper *) part)->mime_type, "name", filename);
 
diff --git a/src/camel/camel-mapi-utils.c b/src/camel/camel-mapi-utils.c
index 4209aba..482ba47 100644
--- a/src/camel/camel-mapi-utils.c
+++ b/src/camel/camel-mapi-utils.c
@@ -99,11 +99,11 @@ mapi_item_add_recipient (const char *recipients, OlMailRecipientType type, GSLis
 	str = "SMTP";
 	set_SPropValue_proptag (&(recipient->in.ext_lpProps[2]), PR_ADDRTYPE, (const void *)(str));
 	str = recipient->email_id;
-	set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS, (const void *)(str));
+	set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS_UNICODE, (gconstpointer )(str));
 	/* FIXME: Please add the correct names here instead of the e-mail ID */
-	set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_GIVEN_NAME, (const void *)(str));
-	set_SPropValue_proptag (&(recipient->in.ext_lpProps[5]), PR_DISPLAY_NAME, (const void *)(str));
-	set_SPropValue_proptag (&(recipient->in.ext_lpProps[6]), PR_7BIT_DISPLAY_NAME, (const void *)(str));
+	set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_GIVEN_NAME_UNICODE, (gconstpointer )(str));
+	set_SPropValue_proptag (&(recipient->in.ext_lpProps[5]), PR_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
+	set_SPropValue_proptag (&(recipient->in.ext_lpProps[6]), PR_7BIT_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
 
 	bVal = FALSE;
 	set_SPropValue_proptag (&(recipient->in.ext_lpProps[7]), PR_SEND_RICH_INFO, &bVal);
@@ -223,11 +223,11 @@ mapi_item_add_attach (MapiItem *item, CamelMimePart *part, CamelStream *content_
 
 	if (filename) {
 		set_SPropValue_proptag(&(item_attach->lpProps[i++]), 
-				       PR_ATTACH_FILENAME,
+				       PR_ATTACH_FILENAME_UNICODE,
 				       (const void *) g_strdup(filename));
 
 		set_SPropValue_proptag(&(item_attach->lpProps[i++]), 
-				       PR_ATTACH_LONG_FILENAME, 
+				       PR_ATTACH_LONG_FILENAME_UNICODE,
 				       (const void *) g_strdup(filename));
 	}
 
diff --git a/src/libexchangemapi/exchange-mapi-cal-utils.c b/src/libexchangemapi/exchange-mapi-cal-utils.c
index 526b487..2af64ff 100644
--- a/src/libexchangemapi/exchange-mapi-cal-utils.c
+++ b/src/libexchangemapi/exchange-mapi-cal-utils.c
@@ -248,8 +248,8 @@ exchange_mapi_cal_util_fetch_attachments (ECalComponent *comp, GSList **attach_l
 			flag = 0xFFFFFFFF;
 			set_SPropValue_proptag(&(attach_item->lpProps[1]), PR_RENDERING_POSITION, (const void *) (&flag));
 
-			set_SPropValue_proptag(&(attach_item->lpProps[2]), PR_ATTACH_FILENAME, (const void *) g_strdup(split_name));
-			set_SPropValue_proptag(&(attach_item->lpProps[3]), PR_ATTACH_LONG_FILENAME, (const void *) g_strdup(split_name));
+			set_SPropValue_proptag(&(attach_item->lpProps[2]), PR_ATTACH_FILENAME_UNICODE, (gconstpointer ) g_strdup(split_name));
+			set_SPropValue_proptag(&(attach_item->lpProps[3]), PR_ATTACH_LONG_FILENAME_UNICODE, (gconstpointer ) g_strdup(split_name));
 
 			stream = g_new0 (ExchangeMAPIStream, 1);
 			stream->proptag = PR_ATTACH_DATA_BIN; 
@@ -324,7 +324,7 @@ exchange_mapi_cal_util_fetch_organizer (ECalComponent *comp, GSList **recip_list
 		str = icalparameter_get_cn (param);
 		if (!(str && *str)) 
 			str = "";
-		set_SPropValue_proptag (&(recipient->in.req_lpProps[4]), PR_RECIPIENT_DISPLAY_NAME, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.req_lpProps[4]), PR_RECIPIENT_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
 
 		/* External recipient properties - set them only when the recipient is unresolved */
 		recipient->in.ext_cValues = 5;
@@ -337,13 +337,13 @@ exchange_mapi_cal_util_fetch_organizer (ECalComponent *comp, GSList **recip_list
 		str = "SMTP";
 		set_SPropValue_proptag (&(recipient->in.ext_lpProps[2]), PR_ADDRTYPE, (const void *)(str));
 		str = recipient->email_id;
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS_UNICODE, (gconstpointer )(str));
 
 		param = icalproperty_get_first_parameter (org_prop, ICAL_CN_PARAMETER);
 		str = icalparameter_get_cn (param);
 		if (!(str && *str)) 
 			str = "";
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_DISPLAY_NAME, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
 
 		*recip_list = g_slist_append (*recip_list, recipient);
 	}
@@ -397,7 +397,7 @@ exchange_mapi_cal_util_fetch_recipients (ECalComponent *comp, GSList **recip_lis
 		param = icalproperty_get_first_parameter (att_prop, ICAL_CN_PARAMETER);
 		str = icalparameter_get_cn (param);
 		str = (str) ? str : recipient->email_id;
-		set_SPropValue_proptag (&(recipient->in.req_lpProps[4]), PR_RECIPIENT_DISPLAY_NAME, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.req_lpProps[4]), PR_RECIPIENT_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
 
 		/* External recipient properties - set them only when the recipient is unresolved */
 		recipient->in.ext_cValues = 7;
@@ -410,14 +410,14 @@ exchange_mapi_cal_util_fetch_recipients (ECalComponent *comp, GSList **recip_lis
 		str = "SMTP";
 		set_SPropValue_proptag (&(recipient->in.ext_lpProps[2]), PR_ADDRTYPE, (const void *)(str));
 		str = recipient->email_id;
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[3]), PR_SMTP_ADDRESS_UNICODE, (gconstpointer )(str));
 
 		param = icalproperty_get_first_parameter (att_prop, ICAL_CN_PARAMETER);
 		str = icalparameter_get_cn (param);
 		str = (str) ? str : recipient->email_id;
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_GIVEN_NAME, (const void *)(str));
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[5]), PR_DISPLAY_NAME, (const void *)(str));
-		set_SPropValue_proptag (&(recipient->in.ext_lpProps[6]), PR_7BIT_DISPLAY_NAME, (const void *)(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[4]), PR_GIVEN_NAME_UNICODE, (gconstpointer )(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[5]), PR_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
+		set_SPropValue_proptag (&(recipient->in.ext_lpProps[6]), PR_7BIT_DISPLAY_NAME_UNICODE, (gconstpointer )(str));
 
 		*recip_list = g_slist_append (*recip_list, recipient);
 
@@ -449,9 +449,9 @@ set_attachments_to_cal_component (ECalComponent *comp, GSList *attach_list, cons
 		attach = (const char *)stream->value->data;
 		len = stream->value->len;
 
-		str = (const char *) exchange_mapi_util_find_SPropVal_array_propval(attach_item->lpProps, PR_ATTACH_LONG_FILENAME);
+		str = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval(attach_item->lpProps, PR_ATTACH_LONG_FILENAME_UNICODE);
 		if (!(str && *str))
-			str = (const char *) exchange_mapi_util_find_SPropVal_array_propval(attach_item->lpProps, PR_ATTACH_FILENAME);
+			str = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval(attach_item->lpProps, PR_ATTACH_FILENAME_UNICODE);
 		attach_file_url = g_strconcat (local_store_uri, G_DIR_SEPARATOR_S, uid, "-", str, NULL);
 		filename = g_filename_from_uri (attach_file_url, NULL, NULL);
 
@@ -499,9 +499,9 @@ ical_attendees_from_props (icalcomponent *ical_comp, GSList *recipients, gboolea
 			prop = icalproperty_new_organizer (val);
 
 			/* CN */
-			str = (const char *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_RECIPIENT_DISPLAY_NAME);
+			str = (const gchar *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_RECIPIENT_DISPLAY_NAME_UNICODE);
 			if (!str)
-				str = (const char *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_DISPLAY_NAME);
+				str = (const gchar *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_DISPLAY_NAME_UNICODE);
 			if (str) {
 				param = icalparameter_new_cn (str);
 				icalproperty_add_parameter (prop, param);
@@ -510,9 +510,9 @@ ical_attendees_from_props (icalcomponent *ical_comp, GSList *recipients, gboolea
 			prop = icalproperty_new_attendee (val);
 
 			/* CN */
-			str = (const char *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_RECIPIENT_DISPLAY_NAME);
+			str = (const gchar *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_RECIPIENT_DISPLAY_NAME_UNICODE);
 			if (!str)
-				str = (const char *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_DISPLAY_NAME);
+				str = (const gchar *) exchange_mapi_util_find_row_propval (&recip->out_SRow, PR_DISPLAY_NAME_UNICODE);
 			if (str) {
 				param = icalparameter_new_cn (str);
 				icalproperty_add_parameter (prop, param);
@@ -700,15 +700,15 @@ exchange_mapi_cal_util_mapi_props_to_comp (icalcomponent_kind kind, const gchar
 
 	utc_zone = icaltimezone_get_utc_timezone ();
 
-	subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_SUBJECT);
+	subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_SUBJECT_UNICODE);
 	if (!subject)
-		subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_NORMALIZED_SUBJECT);
+		subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_NORMALIZED_SUBJECT_UNICODE);
 	if (!subject)
-		subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_CONVERSATION_TOPIC);
+		subject = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_CONVERSATION_TOPIC_UNICODE);
 	if (!subject)
 		subject = ""; 
 
-	body = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_BODY);
+	body = (const gchar *)exchange_mapi_util_find_array_propval(properties, PR_BODY_UNICODE);
 	if (!body) {
 		body_stream = exchange_mapi_util_find_stream (streams, PR_HTML);
 		body = body_stream ? (const gchar *) body_stream->value->data : ""; 
@@ -815,12 +815,12 @@ exchange_mapi_cal_util_mapi_props_to_comp (icalcomponent_kind kind, const gchar
 			ical_attendees_from_props (ical_comp, recipients, (b && *b));
 			if (icalcomponent_get_first_property (ical_comp, ICAL_ORGANIZER_PROPERTY) == NULL) {
 				gchar *val;
-//				const char *sender_name = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME);
+//				const gchar *sender_name = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME_UNICODE);
 				const char *sender_email_type = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_ADDRTYPE);
-				const char *sender_email = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS);
-				const char *sent_name = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME);
+				const gchar *sender_email = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS_UNICODE);
+				const gchar *sent_name = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME_UNICODE);
 				const char *sent_email_type = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_ADDRTYPE);
-				const char *sent_email = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS);
+				const gchar *sent_email = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE);
 
 				if (!g_utf8_collate (sender_email_type, "EX"))
 					sender_email = exchange_mapi_util_ex_to_smtp (sender_email);
@@ -1027,12 +1027,12 @@ fetch_server_data_cb (FetchItemsCallbackData *item_data, gpointer data)
 	cbdata->appt_id = ui32 ? *ui32 : 0;
 	ui32 = (const uint32_t *)find_mapi_SPropValue_data(properties, PROP_TAG(PT_LONG, 0x8201));
 	cbdata->appt_seq = ui32 ? *ui32 : 0;
-	cbdata->username = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME);
+	cbdata->username = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME_UNICODE);
 	cbdata->useridtype = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_ADDRTYPE);
-	cbdata->userid = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS);
-	cbdata->ownername = exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME);
+	cbdata->userid = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE);
+	cbdata->ownername = exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME_UNICODE);
 	cbdata->owneridtype = exchange_mapi_util_find_array_propval (properties, PR_SENDER_ADDRTYPE);
-	cbdata->ownerid = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS);
+	cbdata->ownerid = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS_UNICODE);
 
 	cbdata->comp = comp; 
 
@@ -1086,12 +1086,12 @@ update_attendee_status (struct mapi_SPropValue_array *properties, mapi_id_t mid)
 
 	fetch_server_data (mid, &cbdata);
 
-	att = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS);
+	att = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE);
 	addrtype = exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_ADDRTYPE);
 	if (addrtype && !g_ascii_strcasecmp (addrtype, "EX"))
 		att = exchange_mapi_util_ex_to_smtp (att);
 
-	att_sentby = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS);
+	att_sentby = exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS_UNICODE);
 	addrtype = exchange_mapi_util_find_array_propval (properties, PR_SENDER_ADDRTYPE);
 	if (addrtype && !g_ascii_strcasecmp (addrtype, "EX"))
 		att_sentby = exchange_mapi_util_ex_to_smtp (att_sentby);
@@ -1197,12 +1197,12 @@ update_server_object (struct mapi_SPropValue_array *properties, GSList *attachme
 		icalcomponent_kind kind = icalcomponent_isa (e_cal_component_get_icalcomponent(comp));
 
 		cbdata.comp = comp;
-		cbdata.username = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME);
+		cbdata.username = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_NAME_UNICODE);
 		cbdata.useridtype = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_ADDRTYPE);
-		cbdata.userid = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS);
-		cbdata.ownername = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME);
+		cbdata.userid = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENDER_EMAIL_ADDRESS_UNICODE);
+		cbdata.ownername = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_NAME_UNICODE);
 		cbdata.owneridtype = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_ADDRTYPE);
-		cbdata.ownerid = (const char *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS);
+		cbdata.ownerid = (const gchar *) exchange_mapi_util_find_array_propval (properties, PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE);
 		cbdata.is_modify = FALSE;
 		cbdata.msgflags = MSGFLAG_READ;
 		cbdata.meeting_type = MEETING_REQUEST_RCVD;
@@ -1666,12 +1666,12 @@ exchange_mapi_cal_util_build_props (struct SPropValue **value, struct SPropTagAr
 	text = icalcomponent_get_summary (ical_comp);
 	if (!(text && *text)) 
 		text = "";
-	set_SPropValue_proptag(&props[i++], PR_SUBJECT, 					/* propcount++ */ 
+	set_SPropValue_proptag(&props[i++], PR_SUBJECT_UNICODE,						/* propcount++ */
 					(const void *) text);
-	set_SPropValue_proptag(&props[i++], PR_NORMALIZED_SUBJECT, 				/* propcount++ */ 
+	set_SPropValue_proptag(&props[i++], PR_NORMALIZED_SUBJECT_UNICODE,				/* propcount++ */
 					(const void *) text);
 	if (cbdata->appt_seq == 0)
-		set_SPropValue_proptag(&props[i++], PR_CONVERSATION_TOPIC, 			/* propcount++ */
+		set_SPropValue_proptag(&props[i++], PR_CONVERSATION_TOPIC_UNICODE,			/* propcount++ */
 						(const void *) text);
 	text = NULL;
 
@@ -1683,7 +1683,7 @@ exchange_mapi_cal_util_build_props (struct SPropValue **value, struct SPropTagAr
 	text = icalcomponent_get_description (ical_comp);
 	if (!(text && *text) || !g_utf8_validate (text, -1, NULL)) 
 		text = "";
-	set_SPropValue_proptag(&props[i++], PR_BODY, 						/* propcount++ */
+	set_SPropValue_proptag(&props[i++], PR_BODY_UNICODE,						/* propcount++ */
 					(const void *) text);
 	text = NULL;
 
@@ -1694,17 +1694,17 @@ exchange_mapi_cal_util_build_props (struct SPropValue **value, struct SPropTagAr
 	flag32 = prop ? get_imp_prop_from_priority (icalproperty_get_priority (prop)) : IMPORTANCE_NORMAL;
 	set_SPropValue_proptag(&props[i++], PR_IMPORTANCE, (const void *) &flag32); 		/* propcount++ */
 
-	set_SPropValue_proptag(&props[i++], PR_SENT_REPRESENTING_NAME, 
+	set_SPropValue_proptag(&props[i++], PR_SENT_REPRESENTING_NAME_UNICODE,
 		(const void *) cbdata->ownername); 						/* propcount++ */
 	set_SPropValue_proptag(&props[i++], PR_SENT_REPRESENTING_ADDRTYPE, 
 		(const void *) cbdata->owneridtype); 						/* propcount++ */
-	set_SPropValue_proptag(&props[i++], PR_SENT_REPRESENTING_EMAIL_ADDRESS, 
+	set_SPropValue_proptag(&props[i++], PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE,
 		(const void *) cbdata->ownerid); 						/* propcount++ */
-	set_SPropValue_proptag(&props[i++], PR_SENDER_NAME, 
+	set_SPropValue_proptag(&props[i++], PR_SENDER_NAME_UNICODE,
 		(const void *) cbdata->username); 						/* propcount++ */
 	set_SPropValue_proptag(&props[i++], PR_SENDER_ADDRTYPE, 
 		(const void *) cbdata->useridtype); 						/* propcount++ */
-	set_SPropValue_proptag(&props[i++], PR_SENDER_EMAIL_ADDRESS, 
+	set_SPropValue_proptag(&props[i++], PR_SENDER_EMAIL_ADDRESS_UNICODE,
 		(const void *) cbdata->userid); 						/* propcount++ */
 
 	flag32 = cbdata->msgflags;
diff --git a/src/libexchangemapi/exchange-mapi-cal-utils.h b/src/libexchangemapi/exchange-mapi-cal-utils.h
index 3a6f2db..35140f6 100644
--- a/src/libexchangemapi/exchange-mapi-cal-utils.h
+++ b/src/libexchangemapi/exchange-mapi-cal-utils.h
@@ -105,11 +105,8 @@ static const uint32_t cal_GetPropsList[] = {
 	PR_FID, 
 	PR_MID, 
 
-	PR_SUBJECT, 
 	PR_SUBJECT_UNICODE, 
-	PR_NORMALIZED_SUBJECT, 
 	PR_NORMALIZED_SUBJECT_UNICODE, 
-	PR_CONVERSATION_TOPIC, 
 	PR_CONVERSATION_TOPIC_UNICODE, 
 	PR_BODY, 
 	PR_BODY_UNICODE, 
@@ -125,25 +122,16 @@ static const uint32_t cal_GetPropsList[] = {
 	PR_PROCESSED, 
 	PR_MSG_EDITOR_FORMAT, 
 
-	PR_SENT_REPRESENTING_NAME, 
 	PR_SENT_REPRESENTING_NAME_UNICODE, 
 	PR_SENT_REPRESENTING_ADDRTYPE, 
-	PR_SENT_REPRESENTING_ADDRTYPE_UNICODE, 
-	PR_SENT_REPRESENTING_EMAIL_ADDRESS, 
 	PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE, 
 
-	PR_SENDER_NAME, 
 	PR_SENDER_NAME_UNICODE, 
 	PR_SENDER_ADDRTYPE, 
-	PR_SENDER_ADDRTYPE_UNICODE, 
-	PR_SENDER_EMAIL_ADDRESS, 
 	PR_SENDER_EMAIL_ADDRESS_UNICODE, 
 
-	PR_RCVD_REPRESENTING_NAME, 
 	PR_RCVD_REPRESENTING_NAME_UNICODE, 
 	PR_RCVD_REPRESENTING_ADDRTYPE, 
-	PR_RCVD_REPRESENTING_ADDRTYPE_UNICODE, 
-	PR_RCVD_REPRESENTING_EMAIL_ADDRESS, 
 	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_UNICODE
 };
 
diff --git a/src/libexchangemapi/exchange-mapi-connection.c b/src/libexchangemapi/exchange-mapi-connection.c
index 34c1ae4..4a45885 100644
--- a/src/libexchangemapi/exchange-mapi-connection.c
+++ b/src/libexchangemapi/exchange-mapi-connection.c
@@ -367,7 +367,7 @@ exchange_mapi_util_read_body_stream (mapi_object_t *obj_message, GSList **stream
 		if (editor != olEditorText && editor != olEditorHTML) 
 			editor = olEditorHTML;
 	} else {
-		const uint32_t *ui32 = (const uint32_t *) get_SPropValue(lpProps, PR_MSG_EDITOR_FORMAT);
+		const uint32_t *ui32 = (const uint32_t *) exchange_mapi_util_find_SPropVal_array_propval(lpProps, PR_MSG_EDITOR_FORMAT);
 		/* if PR_MSG_EDITOR_FORMAT doesn't exist, set it to PLAINTEXT */
 		editor = ui32 ? *ui32 : olEditorText;
 	}
@@ -379,9 +379,9 @@ exchange_mapi_util_read_body_stream (mapi_object_t *obj_message, GSList **stream
 	retval = -1;
 	switch (editor) {
 		case olEditorText:
-			if ((data = (const char *) get_SPropValue (lpProps, PR_BODY_UNICODE)) != NULL)
+			if ((data = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (lpProps, PR_BODY_UNICODE)) != NULL)
 				proptag = PR_BODY_UNICODE;
-			else if ((data = (const char *) get_SPropValue (lpProps, PR_BODY)) != NULL)
+			else if ((data = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (lpProps, PR_BODY)) != NULL)
 				proptag = PR_BODY;
 			if (data) {
 				size_t size = strlen(data)+1;
@@ -392,9 +392,9 @@ exchange_mapi_util_read_body_stream (mapi_object_t *obj_message, GSList **stream
 			break;
 		case olEditorHTML: 
 			/* Fixme : */
- 			/*if ((data = (const char *) get_SPropValue (lpProps, PR_BODY_HTML_UNICODE)) != NULL) */
+			/*if ((data = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (lpProps, PR_BODY_HTML_UNICODE)) != NULL) */
  			/*	proptag = PR_BODY_HTML_UNICODE; */
-			if ((data = (const char *) get_SPropValue (lpProps, PR_BODY_HTML)) != NULL)
+			if ((data = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (lpProps, PR_BODY_HTML)) != NULL)
 				proptag = PR_BODY_HTML;
 
 			if (data) {
@@ -407,7 +407,7 @@ exchange_mapi_util_read_body_stream (mapi_object_t *obj_message, GSList **stream
 			}
 			break;
 		case olEditorRTF: 
-			rtf_in_sync = (const bool *) get_SPropValue (lpProps, PR_RTF_IN_SYNC);
+			rtf_in_sync = (const bool *) exchange_mapi_util_find_SPropVal_array_propval (lpProps, PR_RTF_IN_SYNC);
 //			if (!(rtf_in_sync && *rtf_in_sync))
 			{
 				mapi_object_t obj_stream;
@@ -785,10 +785,10 @@ mapidump_PAB_gal_entry (struct SRow *aRow)
 	const char	*account;
 	ExchangeMAPIGALEntry *gal_entry;
 
-	addrtype = (const char *)find_SPropValue_data(aRow, PR_ADDRTYPE_UNICODE);
-	name = (const char *)find_SPropValue_data(aRow, PR_DISPLAY_NAME_UNICODE);
-	email = (const char *)find_SPropValue_data(aRow, PR_SMTP_ADDRESS_UNICODE);
-	account = (const char *)find_SPropValue_data(aRow, PR_ACCOUNT_UNICODE);
+	addrtype = (const gchar *)exchange_mapi_util_find_row_propval (aRow, PR_ADDRTYPE);
+	name = (const gchar *)exchange_mapi_util_find_row_propval (aRow, PR_DISPLAY_NAME_UNICODE);
+	email = (const gchar *)exchange_mapi_util_find_row_propval (aRow, PR_SMTP_ADDRESS_UNICODE);
+	account = (const gchar *)exchange_mapi_util_find_row_propval (aRow, PR_ACCOUNT_UNICODE);
 
 	printf("[%s] %s:\n\tName: %-25s\n\tEmail: %-25s\n", 
 	       addrtype, account, name, email);
@@ -822,7 +822,7 @@ exchange_mapi_util_get_gal (GPtrArray *contacts_array)
 					  PR_SMTP_ADDRESS_UNICODE,
 					  PR_DISPLAY_TYPE,
 					  PR_OBJECT_TYPE,
-					  PR_ADDRTYPE_UNICODE,
+					  PR_ADDRTYPE,
 					  PR_OFFICE_TELEPHONE_NUMBER_UNICODE,
 					  PR_OFFICE_LOCATION_UNICODE,
 					  PR_TITLE_UNICODE,
@@ -886,12 +886,12 @@ exchange_mapi_util_get_recipients (mapi_object_t *obj_message, GSList **recip_li
 
 		recipient->mem_ctx = talloc_init ("ExchangeMAPI_GetRecipients");
 
-		recipient->email_id = talloc_steal (recipient->mem_ctx, (const char *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_SMTP_ADDRESS));
+		recipient->email_id = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_SMTP_ADDRESS_UNICODE));
 		/* fallback */
 		if (!recipient->email_id) {
 			const char *addrtype = talloc_steal (recipient->mem_ctx, (const char *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_ADDRTYPE));
 			if (addrtype && !g_ascii_strcasecmp(addrtype, "SMTP"))
-				recipient->email_id = talloc_steal (recipient->mem_ctx, (const char *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_EMAIL_ADDRESS));
+				recipient->email_id = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_EMAIL_ADDRESS_UNICODE));
 		}
 		/* fail */
 		if (!recipient->email_id) {
@@ -928,9 +928,9 @@ set_recipient_properties (TALLOC_CTX *mem_ctx, struct SRow *aRow, ExchangeMAPIRe
 		struct SPropValue sprop; 
 		const gchar *dn = NULL, *email = NULL; 
 
-		dn = (const gchar *) get_SPropValue (recipient->in.ext_lpProps, PR_DISPLAY_NAME);
+		dn = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (recipient->in.ext_lpProps, PR_DISPLAY_NAME_UNICODE);
 		dn = (dn) ? dn : "";
-		email = (const gchar *) get_SPropValue (recipient->in.ext_lpProps, PR_SMTP_ADDRESS);
+		email = (const gchar *) exchange_mapi_util_find_SPropVal_array_propval (recipient->in.ext_lpProps, PR_SMTP_ADDRESS_UNICODE);
 		email = (email) ? email : "";
 		oneoff_eid = exchange_mapi_util_entryid_generate_oneoff (mem_ctx, dn, email, FALSE);
 		set_SPropValue_proptag (&sprop, PR_ENTRYID, (const void *)(oneoff_eid));
@@ -968,7 +968,7 @@ exchange_mapi_util_modify_recipients (TALLOC_CTX *mem_ctx, mapi_object_t *obj_me
 					  PR_DISPLAY_TYPE,
 					  PR_TRANSMITTABLE_DISPLAY_NAME_UNICODE,
 					  PR_EMAIL_ADDRESS_UNICODE,
-					  PR_ADDRTYPE_UNICODE,
+					  PR_ADDRTYPE,
 					  PR_SEND_RICH_INFO,
 					  PR_7BIT_DISPLAY_NAME_UNICODE,
 					  PR_SMTP_ADDRESS_UNICODE);
@@ -1091,7 +1091,7 @@ exchange_mapi_util_check_restriction (mapi_id_t fid, struct mapi_SRestriction *r
 					  PR_MID,
 					  PR_INST_ID,
 					  PR_INSTANCE_NUM,
-					  PR_SUBJECT,
+					  PR_SUBJECT_UNICODE,
 					  PR_MESSAGE_CLASS,
 					  PR_LAST_MODIFICATION_TIME,
 					  PR_HASATTACH,
@@ -1837,7 +1837,7 @@ exchange_mapi_rename_folder (mapi_id_t fid, const char *new_name)
 	}
 
 	props = talloc_zero(mem_ctx, struct SPropValue);
-	set_SPropValue_proptag (props, PR_DISPLAY_NAME, new_name);
+	set_SPropValue_proptag (props, PR_DISPLAY_NAME_UNICODE, new_name);
 
 	retval = SetProps(&obj_folder, props, 1);
 	if (retval != MAPI_E_SUCCESS) {
@@ -2770,13 +2770,13 @@ get_child_folders(TALLOC_CTX *mem_ctx, ExchangeMAPIFolderCategory folder_hier, m
 		ExchangeMAPIFolder *folder = NULL;
 		gchar *newname = NULL;
 
-		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);
-		const uint32_t *folder_size = (const uint32_t *)find_SPropValue_data(&rowset.aRow[i], PR_MESSAGE_SIZE);
+		const mapi_id_t *fid = (const mapi_id_t *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_FID);
+		const gchar *class = (const gchar *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_CONTAINER_CLASS);
+		const gchar *name = (const gchar *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_DISPLAY_NAME_UNICODE);
+		const uint32_t *unread = (const uint32_t *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_CONTENT_UNREAD);
+		const uint32_t *total = (const uint32_t *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_CONTENT_COUNT);
+		const uint32_t *child = (const uint32_t *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_FOLDER_CHILD_COUNT);
+		const uint32_t *folder_size = (const uint32_t *)exchange_mapi_util_find_row_propval (&rowset.aRow[i], PR_MESSAGE_SIZE);
 
 		if (!class)
 			class = IPF_NOTE;
@@ -2867,7 +2867,7 @@ mapi_get_ren_additional_fids (mapi_object_t *obj_store, GHashTable **folder_list
 	aRow.cValues = count;
 	aRow.lpProps = lpProps;
 
-	entryids = (const struct BinaryArray_r *) find_SPropValue_data(&aRow, PR_ADDITIONAL_REN_ENTRYIDS);
+	entryids = (const struct BinaryArray_r *) exchange_mapi_util_find_row_propval (&aRow, PR_ADDITIONAL_REN_ENTRYIDS);
 
 	/* Iterate through MV_BINARY */
 	if (entryids) {
@@ -2995,10 +2995,10 @@ exchange_mapi_get_folders_list (GSList **mapi_folders)
 	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_UNICODE);
-	mailbox_user_name = (const char *) find_SPropValue_data(&aRow, PR_USER_NAME_UNICODE);
-	mailbox_size = (const uint32_t *)find_SPropValue_data (&aRow, PR_MESSAGE_SIZE);
+	mailbox_name = (const gchar *) exchange_mapi_util_find_row_propval (&aRow, PR_DISPLAY_NAME_UNICODE);
+	mailbox_owner_name = (const gchar *) exchange_mapi_util_find_row_propval (&aRow, PR_MAILBOX_OWNER_NAME_UNICODE);
+	mailbox_user_name = (const gchar *) exchange_mapi_util_find_row_propval (&aRow, PR_USER_NAME_UNICODE);
+	mailbox_size = (const uint32_t *)exchange_mapi_util_find_row_propval  (&aRow, PR_MESSAGE_SIZE);
 
 	/* Prepare the directory listing */
 	retval = GetDefaultFolder(&obj_store, &mailbox_id, olFolderTopInformationStore);
@@ -3135,8 +3135,7 @@ exchange_mapi_util_ex_to_smtp (const gchar *ex_address)
 
 	mem_ctx = talloc_init("ExchangeMAPI_EXtoSMTP");
 
-	SPropTagArray = set_SPropTagArray(mem_ctx, 0x2,
-					  PR_SMTP_ADDRESS,
+	SPropTagArray = set_SPropTagArray(mem_ctx, 0x1,
 					  PR_SMTP_ADDRESS_UNICODE);
 
 	retval = ResolveNames(global_mapi_session, (const char **)str_array, SPropTagArray, &SRowSet, &flaglist, 0);
@@ -3144,9 +3143,7 @@ exchange_mapi_util_ex_to_smtp (const gchar *ex_address)
 		retval = ResolveNames(global_mapi_session, (const char **)str_array, SPropTagArray, &SRowSet, &flaglist, MAPI_UNICODE);
 
 	if (retval == MAPI_E_SUCCESS && SRowSet && SRowSet->cRows == 1) {
-		smtp_addr = (const char *) find_SPropValue_data(SRowSet->aRow, PR_SMTP_ADDRESS);
-		if (!smtp_addr)
-			smtp_addr = (const char *) find_SPropValue_data(SRowSet->aRow, PR_SMTP_ADDRESS_UNICODE);
+		smtp_addr = (const gchar *) exchange_mapi_util_find_row_propval (SRowSet->aRow, PR_SMTP_ADDRESS_UNICODE);
 	}
 
 	talloc_free (mem_ctx);



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