diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c
index b9af570599a37bcd0af682b7fee3348299939a36..e70e55efd1c93ba4e5532a15ce2080aea7348de7 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.c
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c
@@ -309,7 +309,128 @@ eds_async_open_callback(EBook *book, EBookStatus status, gpointer closure)
     else {
         WARN("Addressbook: Got error when opening book");
 	gchar *state_string;
-		      
+	switch ( status ){
+	case E_BOOK_ERROR_INVALID_ARG :
+	  state_string = g_strdup("E_BOOK_ERROR_INVALID_ARG");
+	  break;
+	case E_BOOK_ERROR_BUSY :
+	  state_string = g_strdup("E_BOOK_ERROR_BUSY");
+	  break;
+	case E_BOOK_ERROR_REPOSITORY_OFFLINE :
+	  state_string = g_strdup("E_BOOK_ERROR_REPOSITORY_OFFLINE");
+	  break;
+	case E_BOOK_ERROR_NO_SUCH_BOOK :
+	  state_string = g_strdup("E_BOOK_ERROR_NO_SUCH_BOOK");
+	  break;
+	case E_BOOK_ERROR_NO_SELF_CONTACT :
+	  state_string = g_strdup("E_BOOK_ERROR_NO_SELF_CONTACT");
+	  break;
+	case E_BOOK_ERROR_SOURCE_NOT_LOADED:
+	  state_string = g_strdup("E_BOOK_ERROR_SOURCE_NOT_LOADED");
+	  break;
+	case E_BOOK_ERROR_SOURCE_ALREADY_LOADED :
+	  state_string = g_strdup("E_BOOK_ERROR_SOURCE_ALREADY_LOADED");
+	  break;
+	case E_BOOK_ERROR_PERMISSION_DENIED :
+	  state_string = g_strdup("E_BOOK_ERROR_PERMISSION_DENIED");
+	  break;
+	case E_BOOK_ERROR_CONTACT_NOT_FOUND :
+	  state_string = g_strdup("E_BOOK_ERROR_CONTACT_NOT_FOUND");
+	  break;
+	case E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS :
+	  state_string = g_strdup("E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS");
+	  break;
+	case E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED :
+	  state_string = g_strdup("E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED");
+	  break;
+	case E_BOOK_ERROR_CANCELLED :
+	  state_string = g_strdup("E_BOOK_ERROR_CANCELLED");
+	  break;
+	case E_BOOK_ERROR_COULD_NOT_CANCEL :
+	  state_string = g_strdup("E_BOOK_ERROR_COULD_NOT_CANCEL");
+	  break;
+	case E_BOOK_ERROR_AUTHENTICATION_FAILED :
+	  state_string = g_strdup("E_BOOK_ERROR_AUTHENTICATION_FAILED");
+	  break;
+	case E_BOOK_ERROR_AUTHENTICATION_REQUIRED :
+	  state_string = g_strdup("E_BOOK_ERROR_AUTHENTICATION_REQUIRED");
+	  break;
+	case E_BOOK_ERROR_TLS_NOT_AVAILABLE :
+	  state_string = g_strdup("E_BOOK_ERROR_TLS_NOT_AVAILABLE");
+	  break;
+	case E_BOOK_ERROR_CORBA_EXCEPTION :
+	  state_string = g_strdup("E_BOOK_ERROR_CORBA_EXCEPTION");
+	  break;
+	case E_BOOK_ERROR_NO_SUCH_SOURCE :
+	  state_string = g_strdup("E_BOOK_ERROR_NO_SUCH_SOURCE");
+	  break;
+	case E_BOOK_ERROR_OFFLINE_UNAVAILABLE :
+	  state_string = g_strdup("E_BOOK_ERROR_OFFLINE_UNAVAILABLE");
+	  break;
+	case E_BOOK_ERROR_OTHER_ERROR :
+	  state_string = g_strdup("E_BOOK_ERROR_OTHER_ERROR");
+	  break;
+	case E_BOOK_ERROR_INVALID_SERVER_VERSION :
+	  state_string = g_strdup("E_BOOK_ERROR_INVALID_SERVER_VERSION");
+	  break;
+	default:
+	  break;
+
+	}
+
+	ERROR("%s", state_string);
+
+	g_free(state_string);
+    }
+}
+
+/**
+ * Initialize address book
+ */
+void
+init(OpenAsyncHandler callback)
+{
+  GSList *list, *l;
+  ESourceList *source_list = NULL;
+  remaining_books_to_open = 0;
+  books_data = NULL;
+
+  source_list = e_source_list_new_for_gconf_default("/apps/evolution/addressbook/sources");
+  
+  if (source_list == NULL)
+    {
+      ERROR("Addressbook: Error could not initialize source list for addressbook");
+      return;
+    }
+
+  list = e_source_list_peek_groups(source_list);
+
+  if (!list) {
+    WARN("Addressbook: Address Book source groups are missing! Check your GConf setup.");
+    return;
+  }
+
+  Open_Handler_And_Data *had = g_new (Open_Handler_And_Data, 1);
+  had->handler = callback;
+
+  for (l = list; l != NULL; l = l->next)
+    {
+
+      ESourceGroup *group = l->data;
+      GSList *sources = NULL, *m;
+      sources = e_source_group_peek_sources(group);
+      for (m = sources; m != NULL; m = m->next)
+        {
+	  DEBUG("Addressbook: Group name %s", e_source_group_peek_name(group));
+	  DEBUG("Addressbook: Group uid %s", e_source_group_peek_uid(group));
+
+          ESource *source = m->data;
+          EBook *book = e_book_new(source, NULL);
+          if (book != NULL)
+            {
+              // Keep count of remaining books to open
+              remaining_books_to_open++;
+	      
               // Asynchronous open
               e_book_async_open(book, FALSE, eds_async_open_callback, had);
             }