Index: evolution-data-server/servers/exchange/storage/Makefile.am
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/Makefile.am,v
retrieving revision 1.11
diff -u -p -r1.11 Makefile.am
--- evolution-data-server/servers/exchange/storage/Makefile.am	7 Dec 2005 11:21:19 -0000	1.11
+++ evolution-data-server/servers/exchange/storage/Makefile.am	19 Jun 2006 11:31:16 -0000
@@ -106,7 +106,8 @@ libexchange_storageinclude_HEADERS = 			
 	exchange-hierarchy-webdav.h				\
 	exchange-hierarchy-foreign.h				\
 	exchange-oof.h						\
-	exchange-types.h					
+	exchange-types.h					\
+	exchange-esource.h
 
 %-$(API_VERSION).pc: %.pc
 	cp $< $@
Index: evolution-exchange/addressbook/e-book-backend-exchange.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/addressbook/e-book-backend-exchange.c,v
retrieving revision 1.53
diff -u -p -r1.53 e-book-backend-exchange.c
--- evolution-exchange/addressbook/e-book-backend-exchange.c	10 May 2006 10:57:24 -0000	1.53
+++ evolution-exchange/addressbook/e-book-backend-exchange.c	19 Jun 2006 11:39:44 -0000
@@ -55,6 +55,7 @@
 #include <mapi.h>
 #include <exchange-account.h>
 #include <exchange-hierarchy.h>
+#include <exchange-esource.h>
 #include <e-folder-exchange.h>
 #include "e-book-backend-exchange.h"
 #include "exchange-component.h"
@@ -1942,6 +1943,9 @@ e_book_backend_exchange_start_book_view 
 						  http_status_to_pas (status));
 		bonobo_object_unref (book_view);
 
+		/* also update the folder list */
+		exchange_account_rescan_tree (bepriv->account);
+
 	default:
 		break;
 	}
@@ -2308,12 +2312,25 @@ e_book_backend_exchange_remove (EBookBac
 {
 	EBookBackendExchange *be = E_BOOK_BACKEND_EXCHANGE (backend);
 	EBookBackendExchangePrivate *bepriv = be->priv;
-	ExchangeAccountFolderResult result;
-	const char *uri;
+	ExchangeAccountFolderResult result = EXCHANGE_ACCOUNT_FOLDER_GENERIC_ERROR;
+	const char *int_uri = NULL;
 
 	d(printf("ebbe_remove(%p, %p)\n", backend, book));
-	uri = e_folder_exchange_get_internal_uri (bepriv->folder);
-	result = exchange_account_remove_folder (bepriv->account, uri);
+	int_uri = e_folder_exchange_get_internal_uri (bepriv->folder);
+	if (int_uri)
+		result = exchange_account_remove_folder (bepriv->account, int_uri);
+	else {
+		ExchangeAccount *account;
+
+		/* internal URI is NULL, mostly the case where folder doesn't exists anymore 
+		 * in the server, update the gconf sources. 
+		 */
+		account = exchange_component_get_account_for_uri (global_exchange_component, NULL);
+		if (exchange_account_get_context (account)) {
+			remove_folder_esource (account, EXCHANGE_CONTACTS_FOLDER, bepriv->exchange_uri);
+			result = EXCHANGE_ACCOUNT_FOLDER_OK;
+		}
+	}
 	if (result == EXCHANGE_ACCOUNT_FOLDER_OK)
 		return GNOME_Evolution_Addressbook_Success;
 	else if (result == EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST)
