--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/component/addressbook-view.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/component/addressbook-view.c	2009-05-27 10:35:40.373696594 +0800
@@ -1056,7 +1056,7 @@
 		merge_context->remaining_contacts = g_list_delete_link (merge_context->remaining_contacts,
 									merge_context->remaining_contacts);
 		eab_merging_book_add_contact (merge_context->target_book, merge_context->current_contact,
-					      merged_contact_cb, merge_context);
+					      merged_contact_cb, NULL, merge_context);
 	} else if (merge_context->pending_removals == 0) {
 		/* Finished */
 
@@ -1108,7 +1108,7 @@
 	/* Start merge */
 
 	eab_merging_book_add_contact (target_book, merge_context->current_contact,
-				      merged_contact_cb, merge_context);
+				      merged_contact_cb, NULL, merge_context);
 
 	return TRUE;
 }
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/merging/eab-contact-merging.h	2009-05-08 09:35:49.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/merging/eab-contact-merging.h	2009-05-27 10:35:40.373902998 +0800
@@ -32,7 +32,8 @@
 
 gboolean  eab_merging_book_add_contact    (EBook           *book,
 					   EContact        *contact,
-					   EBookIdCallback  cb,
+					   EBookIdCallback  id_cb,
+					   EBookCallback    cb,
 					   gpointer         closure);
 gboolean  eab_merging_book_commit_contact (EBook           *book,
 					   EContact        *contact,
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/contact-editor/e-contact-editor.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/contact-editor/e-contact-editor.c	2009-05-27 10:35:40.375154787 +0800
@@ -2984,11 +2984,11 @@
 	if (ce->source_book != ce->target_book) {
 		/* Two-step move; add to target, then remove from source */
 		eab_merging_book_add_contact (ce->target_book, ce->contact,
-					      (EBookIdCallback) contact_added_cb, ecs);
+					      (EBookIdCallback) contact_added_cb, (EBookCallback) contact_modified_cb, ecs);
 	} else {
 		if (ce->is_new_contact)
 			eab_merging_book_add_contact (ce->target_book, ce->contact,
-						      (EBookIdCallback) contact_added_cb, ecs);
+						      (EBookIdCallback) contact_added_cb, (EBookCallback) contact_modified_cb, ecs);
 		else
 			eab_merging_book_commit_contact (ce->target_book, ce->contact,
 							 (EBookCallback) contact_modified_cb, ecs);
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/contact-editor/e-contact-quick-add.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/contact-editor/e-contact-quick-add.c	2009-05-27 10:35:40.375456988 +0800
@@ -127,7 +127,7 @@
 
 	if (status == E_BOOK_ERROR_OK) {
 		if (e_book_is_writable (book))
-			eab_merging_book_add_contact (book, qa->contact, NULL, NULL);
+			eab_merging_book_add_contact (book, qa->contact, NULL, NULL, NULL);
 		else
 			e_error_run (NULL, "addressbook:error-read-only", e_source_peek_name (e_book_get_source (book)), NULL);
 
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/contact-list-editor/e-contact-list-editor.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/contact-list-editor/e-contact-list-editor.c	2009-05-27 10:35:40.375947663 +0800
@@ -969,7 +969,7 @@
 	if (priv->is_new_list)
 		eab_merging_book_add_contact (
 			priv->book, contact, (EBookIdCallback)
-			contact_list_editor_list_added_cb, ecs);
+			contact_list_editor_list_added_cb, NULL, ecs);
 	else
 		eab_merging_book_commit_contact (
 			priv->book, contact, (EBookCallback)
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/merging/eab-contact-merging.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/merging/eab-contact-merging.c	2009-05-27 10:35:40.376295703 +0800
@@ -347,8 +347,7 @@
 	{
 	case GTK_RESPONSE_OK:
 	             lookup->contact = lookup->match;
-		     e_book_async_remove_contact (lookup->book, lookup->match, NULL, lookup);
-		     e_book_async_add_contact (lookup->book, lookup->contact, final_id_cb, lookup);
+		     e_book_async_commit_contact(lookup->book, lookup->contact, final_cb, lookup);
 		     value = 1;
 		     break;
 	case GTK_RESPONSE_CANCEL:
@@ -495,7 +494,8 @@
 gboolean
 eab_merging_book_add_contact (EBook           *book,
 			      EContact        *contact,
-			      EBookIdCallback  cb,
+			      EBookIdCallback  id_cb,
+			      EBookCallback    cb,
 			      gpointer         closure)
 {
 	EContactMergingLookup *lookup;
@@ -505,7 +505,8 @@
 	lookup->op = E_CONTACT_MERGING_ADD;
 	lookup->book = g_object_ref (book);
 	lookup->contact = g_object_ref (contact);
-	lookup->id_cb = cb;
+	lookup->id_cb = id_cb;
+	lookup->cb = cb;
 	lookup->closure = closure;
 	lookup->avoid = NULL;
 	lookup->match = NULL;
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/widgets/e-addressbook-view.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/widgets/e-addressbook-view.c	2009-05-27 10:35:40.376995271 +0800
@@ -1909,7 +1909,7 @@
 			EContact *contact = l->data;
 
 			/* XXX NULL for a callback /sigh */
-			eab_merging_book_add_contact (view->book, contact, NULL /* XXX */, NULL);
+			eab_merging_book_add_contact (view->book, contact, NULL /* XXX */, NULL, NULL);
 		}
 
 		g_list_foreach (contact_list, (GFunc)g_object_unref, NULL);
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/widgets/eab-gui-util.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/widgets/eab-gui-util.c	2009-05-27 10:35:40.377390846 +0800
@@ -709,7 +709,7 @@
 	book = process->destination;
 
 	process->count ++;
-	eab_merging_book_add_contact(book, contact, contact_added_cb, process);
+	eab_merging_book_add_contact(book, contact, contact_added_cb, NULL, process);
 }
 
 static void
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/addressbook/gui/widgets/e-addressbook-table-adapter.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/addressbook/gui/widgets/e-addressbook-table-adapter.c	2009-05-27 10:35:40.377783688 +0800
@@ -229,7 +229,7 @@
 		e_contact_set (contact, col, (void *) val);
 	}
 
-	eab_merging_book_add_contact (eab_model_get_ebook (priv->model), contact, NULL, NULL);
+	eab_merging_book_add_contact (eab_model_get_ebook (priv->model), contact, NULL, NULL, NULL);
 
 	g_object_unref (contact);
 }
--- /export/home/norman/packages/SOURCES/evolution-2.27.2/plugins/vcard-inline/vcard-inline.c	2009-05-25 01:35:00.000000000 +0800
+++ evolution-2.27.2/plugins/vcard-inline/vcard-inline.c	2009-05-27 14:48:29.234976401 +0800
@@ -118,7 +118,7 @@
 
 	for (iter = contact_list; iter != NULL; iter = iter->next)
 		eab_merging_book_add_contact (
-			book, E_CONTACT (iter->data), NULL, NULL);
+			book, E_CONTACT (iter->data), NULL, NULL, NULL);
 
 exit:
 	if (book != NULL)
