diff --git a/gnome/src/actions.c b/gnome/src/actions.c
index 3836d2bbe6e08c78bc072e66a5ba45febae52420..d2ad2971b30a2dd47d45e7ace952010d4abcdced 100644
--- a/gnome/src/actions.c
+++ b/gnome/src/actions.c
@@ -333,7 +333,7 @@ gboolean sflphone_init (GError **error)
     if (!dbus_connect (error) || !dbus_register (getpid (), "Gtk+ Client", error))
         return FALSE;
 
-    abookfactory_init_factory();
+    abook_init();
 
     // Init icons factory
     init_icon_factory ();
diff --git a/gnome/src/config/addressbook-config.c b/gnome/src/config/addressbook-config.c
index e8217491ae6cb2ea2948d667a7cd68cc80e45a2b..fb7b01b0f90aa573e2b2b3fe1a22abb53ae03224 100644
--- a/gnome/src/config/addressbook-config.c
+++ b/gnome/src/config/addressbook-config.c
@@ -31,7 +31,6 @@
 #include "addressbook-config.h"
 #include "searchbar.h"
 #include "contacts/addrbookfactory.h"
-// #include "contacts/addressbook/eds.h"
 #include <string.h>
 #include <stdlib.h>
 
@@ -44,44 +43,33 @@ enum {
     COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID
 };
 
-void
-addressbook_config_load_parameters (AddressBook_Config **settings)
+AddressBook_Config *addressbook_config_load_parameters ()
 {
-
-    GHashTable *_params = NULL;
-    AddressBook_Config *_settings;
-
-    // Allocate a struct
-    _settings = g_new0 (AddressBook_Config, 1);
-
-    // Fetch the settings from D-Bus
-    _params = (GHashTable*) dbus_get_addressbook_settings();
-
-    if (_params == NULL) {
-
-        DEBUG ("Addressbook: No parameters received, use default");
-
-        _settings->enable = 1;
-        _settings->max_results = 30;
-        _settings->display_contact_photo = 0;
-        _settings->search_phone_business = 1;
-        _settings->search_phone_home = 1;
-        _settings->search_phone_mobile = 1;
+    AddressBook_Config *config = g_new0 (AddressBook_Config, 1);
+    GHashTable *params = dbus_get_addressbook_settings();
+
+    if (params == NULL) {
+        config->enable = 1;
+        config->max_results = 30;
+        config->display_contact_photo = 0;
+        config->search_phone_business = 1;
+        config->search_phone_home = 1;
+        config->search_phone_mobile = 1;
     } 
     else {
-        _settings->enable = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_ENABLE));
-        _settings->max_results = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_MAX_RESULTS));
-        _settings->display_contact_photo = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
-        _settings->search_phone_business = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
-        _settings->search_phone_home = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_HOME));
-        _settings->search_phone_mobile = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
+        config->enable = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_ENABLE));
+        config->max_results = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_MAX_RESULTS));
+        config->display_contact_photo = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
+        config->search_phone_business = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
+        config->search_phone_home = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_DISPLAY_PHONE_HOME));
+        config->search_phone_mobile = (size_t) (g_hash_table_lookup (params, ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
     }
 
     DEBUG ("Addressbook: Settings: enabled %d, max_result %d, photo %d, business %d, home %d, mobile %d",
-           _settings->enable, _settings->max_results, _settings->display_contact_photo,
-           _settings->search_phone_business, _settings->search_phone_home, _settings->search_phone_mobile);
+           config->enable, config->max_results, config->display_contact_photo,
+           config->search_phone_business, config->search_phone_home, config->search_phone_mobile);
 
-    *settings = _settings;
+    return config;
 }
 
 void
@@ -211,9 +199,8 @@ addressbook_config_book_active_toggled (
     gchar* name;
     gchar* uid;
 
-    if(!abookfactory_is_addressbook_loaded()) {
+    if(!addrbook)
         return;
-    }
 
     // Get path of clicked book active toggle box
     treePath = gtk_tree_path_new_from_string (path);
@@ -223,8 +210,6 @@ addressbook_config_book_active_toggled (
         return;
     }
 
-    AddrBookFactory *factory = abookfactory_get_factory();
-
     gtk_tree_model_get_iter (model, &iter, treePath);
 
     // Get active value  at iteration
@@ -240,7 +225,7 @@ addressbook_config_book_active_toggled (
     gtk_tree_path_free (treePath);
 
     // Update current memory stored books data
-    book_data = factory->addrbook->get_book_data_by_uid(uid);
+    book_data = addrbook->get_book_data_by_uid(uid);
     if(book_data == NULL) {
 	ERROR("Addressbook: Error: Could not find addressbook %s", uid);
     }
@@ -292,14 +277,11 @@ addressbook_config_fill_book_list()
     book_data_t *book_data;
     gchar **book_list;
 
-    if(!abookfactory_is_addressbook_loaded()) {
+    if(!addrbook)
         return;
-    }
-
-    AddrBookFactory *factory = abookfactory_get_factory();
 
     book_list = dbus_get_addressbook_list();
-    GSList *books_data = factory->addrbook->get_books_data(book_list);
+    GSList *books_data = addrbook->get_books_data(book_list);
 
     if (!books_data) {
         DEBUG ("Addressbook: No valid books data (%s:%d)", __FILE__, __LINE__);
@@ -338,7 +320,7 @@ create_addressbook_settings()
     GtkTreeViewColumn *tree_view_column;
 
     // Load the user value
-    addressbook_config_load_parameters (&addressbook_config);
+    addressbook_config = addressbook_config_load_parameters();
 
     ret = gtk_vbox_new (FALSE, 10);
     gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
diff --git a/gnome/src/config/addressbook-config.h b/gnome/src/config/addressbook-config.h
index 3e90ea326ef487e8bdc3273d6d2c3ca03472e96c..5ecd4454864917628259760121df94bcd6c890eb 100644
--- a/gnome/src/config/addressbook-config.h
+++ b/gnome/src/config/addressbook-config.h
@@ -67,12 +67,9 @@ void
 addressbook_config_save_parameters (void);
 
 /**
- * Initialize the address book structure, and retrieve the saved parameters through D-Bus
- *
- * @param settings  The addressbook structure
+ * Return the saved parameters through D-Bus
  */
-void
-addressbook_config_load_parameters (AddressBook_Config **settings);
+AddressBook_Config *addressbook_config_load_parameters();
 
 gboolean
 addressbook_display (AddressBook_Config *settings, const gchar *field);
diff --git a/gnome/src/config/preferencesdialog.c b/gnome/src/config/preferencesdialog.c
index 3e404004954a248c1084b18d83ff36b291ac5226..3d21b4f08a779a5f37253aebc160dd28ed9f73de 100644
--- a/gnome/src/config/preferencesdialog.c
+++ b/gnome/src/config/preferencesdialog.c
@@ -285,7 +285,7 @@ create_general_settings ()
 void
 save_configuration_parameters (void)
 {
-    if(abookfactory_is_addressbook_loaded()) {
+    if (addrbook) {
         // Address book config
         addressbook_config_save_parameters ();
     }
@@ -410,7 +410,7 @@ show_preferences_dialog ()
     gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Shortcuts")));
     gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
 
-    if(abookfactory_is_addressbook_loaded()) {
+    if(addrbook) {
         // Addressbook tab
         tab = create_addressbook_settings ();
         gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Address Book")));
@@ -451,7 +451,7 @@ GtkTreeModel* createModel()
     GError *error = NULL;
     gint i, nb_entries;
 
-    nb_entries = abookfactory_is_addressbook_loaded() ? 5 : 4;
+    nb_entries = addrbook ? 5 : 4;
 
     store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
     GtkIconTheme* theme = gtk_icon_theme_get_default();
diff --git a/gnome/src/contacts/addrbookfactory.c b/gnome/src/contacts/addrbookfactory.c
index 964596452aa72b925c8b72244e0f7d0ab1728486..91d694aad2da5c0078ce27d91bd461437eb91218 100644
--- a/gnome/src/contacts/addrbookfactory.c
+++ b/gnome/src/contacts/addrbookfactory.c
@@ -37,89 +37,8 @@
 #include <glib.h>
 #include <dlfcn.h>
 
-static void handler_async_search(GList *hits, gpointer user_data);
+AddrBookHandle *addrbook = NULL;
 
-AddrBookFactory addressbookFactory = { .addrbook = NULL };
-
-AddrBookFactory *abookfactory_get_factory(void) {
-    return &addressbookFactory;
-}
-
-gboolean abookfactory_is_addressbook_loaded(void) {
-   return (addressbookFactory.addrbook != NULL) ? TRUE : FALSE;
-}
-
-void abookfactory_init_factory() {
-    abookfactory_load_module(&addressbookFactory);
-} 
-
-void abookfactory_scan_directory(AddrBookFactory *factory UNUSED) {
-    
-}
-
-void abookfactory_load_module(AddrBookFactory *factory)
-{
-    gchar *plugindir = PLUGINS_DIR;
-    gchar *pluginpath = g_strdup_printf("%s/libevladdrbook.so", plugindir);
-
-    DEBUG("AddressbookFactory: Loading addressbook: %s", pluginpath);
-
-    void *handle = dlopen(pluginpath, RTLD_LAZY);
-    g_free(pluginpath);
-    if(handle == NULL) {
-        ERROR("AddressbookFactory: Error: Could not load addressbook");
-        return;
-    }
-
-    AddrBookHandle *ab = g_malloc(sizeof(AddrBookHandle));
-
-    ab->init = dlsym(handle, "addressbook_init");
-    if(ab->init == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook_init function");
- 
-    ab->is_ready = dlsym(handle, "addressbook_is_ready");
-    if(ab->is_ready == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_is_ready function");
-
-    ab->is_active = dlsym(handle, "addressbook_is_active");
-    if(ab->is_active == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_is_active function");
-
-    ab->search = dlsym(handle, "addressbook_search");
-    if(ab->search == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_search function");
-
-    ab->get_books_data = dlsym(handle, "addressbook_get_books_data");
-    if(ab->get_books_data == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_get_books_data function");
-
-    ab->get_book_data_by_uid = dlsym(handle, "addressbook_get_book_data_by_uid");
-    if(ab->get_book_data_by_uid == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_get_books_data_by_uid function");
-
-    ab->set_current_book = dlsym(handle, "addressbook_set_current_book");
-    if(ab->set_current_book == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_ser_current_book");
-
-    ab->set_search_type = dlsym(handle, "addressbook_set_search_type");
-    if(ab->set_search_type == NULL)
-        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_set_search_type");
-
-    ab->search_cb = handler_async_search;
-
-    DEBUG("AddressbookFactory: Loading done");
-    factory->addrbook = ab;
-}
-
-void
-free_hit (Hit *h)
-{
-    g_free (h->name);
-    g_free (h->phone_business);
-    g_free (h->phone_home);
-    g_free (h->phone_mobile);
-    g_free (h);
-}
 
 /**
  * Callback called after all book have been processed
@@ -127,52 +46,73 @@ free_hit (Hit *h)
 static void
 handler_async_search (GList *hits, gpointer user_data)
 {
-    GList *i;
-
-    // Retrieve the address book parameters
     AddressBook_Config *addressbook_config = user_data;
 
-    // reset previous results
     calltree_reset (contacts);
     calllist_reset (contacts);
 
-    for (i = hits; i != NULL; i = i->next) {
+    for (GList *i = hits; i != NULL; i = i->next) {
         GdkPixbuf *photo = NULL;
         Hit *entry = i->data;
         if (!entry)
           continue;
 
-        // Get the photo
         if (addressbook_display (addressbook_config,
                                  ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))
             photo = entry->photo;
 
-        // Create entry for business phone information
         if (addressbook_display (addressbook_config,
                                  ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))
             calllist_add_contact (entry->name, entry->phone_business,
                                   CONTACT_PHONE_BUSINESS, photo);
 
-        // Create entry for home phone information
         if (addressbook_display (addressbook_config,
                                  ADDRESSBOOK_DISPLAY_PHONE_HOME))
             calllist_add_contact (entry->name, entry->phone_home,
                                   CONTACT_PHONE_HOME, photo);
 
-        // Create entry for mobile phone iddnformation
         if (addressbook_display (addressbook_config,
                                  ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
             calllist_add_contact (entry->name, entry->phone_mobile,
                                   CONTACT_PHONE_MOBILE, photo);
 
-        free_hit (entry);
+        g_free (entry->name);
+        g_free (entry->phone_business);
+        g_free (entry->phone_home);
+        g_free (entry->phone_mobile);
+        g_free (entry);
     }
 
     g_list_free (hits);
+    gtk_widget_grab_focus(GTK_WIDGET (contacts->view));
+}
+
+void abook_init()
+{
+    void *handle = dlopen(PLUGINS_DIR"/libevladdrbook.so", RTLD_LAZY);
+
+    if(handle == NULL) {
+        ERROR("Addressbook: Error: Could not load addressbook");
+        return;
+    }
+
+    addrbook = g_malloc(sizeof(AddrBookHandle));
+
+#define LOAD(func) do { \
+        addrbook-> func = dlsym(handle, "addressbook_" #func); \
+        if (addrbook-> func == NULL) \
+            ERROR("Addressbook: Couldn't load " # func); \
+    } while(0)
 
-    // Deactivate waiting image
-    // deactivateWaitingLayer();
 
+    LOAD(init);
+    LOAD(is_ready);
+    LOAD(is_active);
+    LOAD(search);
+    LOAD(get_books_data);
+    LOAD(get_book_data_by_uid);
+    LOAD(set_current_book);
+    LOAD(set_search_type);
 
-    gtk_widget_grab_focus (GTK_WIDGET (contacts->view));
+    addrbook->search_cb = handler_async_search;
 }
diff --git a/gnome/src/contacts/addrbookfactory.h b/gnome/src/contacts/addrbookfactory.h
index eb83053a4db45597321b5fc810e2654afe09cd9c..7452d58f9566d8e2822f2a9cc604372d741a4af6 100644
--- a/gnome/src/contacts/addrbookfactory.h
+++ b/gnome/src/contacts/addrbookfactory.h
@@ -32,24 +32,10 @@
 #ifndef __ADDRBOOKFACTORY_H__
 #define __ADDRBOOKFACTORY_H__
 
-#include <dlfcn.h>
-#include <gtk/gtk.h>
 #include "addressbook.h"
 
-typedef struct _addrbookfactory {
-    gboolean is_loaded;
-    AddrBookHandle *addrbook;
-} AddrBookFactory;
+void abook_init();
 
-void abookfactory_init_factory(); 
+extern AddrBookHandle *addrbook;
 
-AddrBookFactory *abookfactory_get_factory(void);
-
-gboolean abookfactory_is_addressbook_loaded(void);
-
-void abookfactory_scan_directory(AddrBookFactory *);
-
-void abookfactory_load_module(AddrBookFactory *);
-
-void free_hit(Hit *);
 #endif
diff --git a/gnome/src/contacts/searchbar.c b/gnome/src/contacts/searchbar.c
index 947f7b39e674b54893916dfb0fde8d7da764bf29..637c9dbacfc4d6ba999cf53b253007d23591aa72 100644
--- a/gnome/src/contacts/searchbar.c
+++ b/gnome/src/contacts/searchbar.c
@@ -58,14 +58,8 @@ GdkPixbuf *missed_pixbuf = NULL;
 
 void searchbar_addressbook_activated (GtkEntry *entry, gchar *arg1 UNUSED, gpointer data UNUSED)
 {
-    DEBUG ("Searchbar: Entry activated");
-
-    if(abookfactory_is_addressbook_loaded()) {
-        AddrBookFactory *factory = abookfactory_get_factory();
-	AddressBook_Config *addressbook_config; 
-        addressbook_config_load_parameters(&addressbook_config);
-        factory->addrbook->search(factory->addrbook->search_cb, entry, addressbook_config);
-    }
+    if(addrbook)
+        addrbook->search(addrbook->search_cb, entry, addressbook_config_load_parameters());
 }
 
 void searchbar_entry_changed (GtkEntry* entry UNUSED, gchar* arg1 UNUSED, gpointer data UNUSED)
@@ -82,14 +76,12 @@ void searchbar_entry_changed (GtkEntry* entry UNUSED, gchar* arg1 UNUSED, gpoint
 
 static void cbox_changed_cb (GtkWidget *widget, gpointer user_data UNUSED)
 {
-    if(abookfactory_is_addressbook_loaded()) {
-        DEBUG("Searchbar: Set new addressbook");
-        AddrBookFactory *factory = abookfactory_get_factory();
-        factory->addrbook->set_current_book (gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget)));
-        AddressBook_Config *addressbook_config;
-        addressbook_config_load_parameters(&addressbook_config);
-        factory->addrbook->search(factory->addrbook->search_cb, GTK_ENTRY(addressbookentry), addressbook_config);
-    }
+    if(!addrbook)
+        return;
+
+    addrbook->set_current_book (gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget)));
+    AddressBook_Config *addressbook_config = addressbook_config_load_parameters();
+    addrbook->search(addrbook->search_cb, GTK_ENTRY(addressbookentry), addressbook_config);
 }
 
 void set_focus_on_addressbook_searchbar ()
@@ -105,10 +97,8 @@ void update_searchbar_addressbook_list()
     book_data_t *book_data;
     GSList *books_data = NULL;
 
-    if(abookfactory_is_addressbook_loaded()) {
-        AddrBookFactory *factory = abookfactory_get_factory();
-        books_data = factory->addrbook->get_books_data(dbus_get_addressbook_list());
-    }
+    if (addrbook)
+        books_data = addrbook->get_books_data(dbus_get_addressbook_list());
 
     if(books_data == NULL) {
         ERROR("Searchbar: No books data found");
@@ -148,16 +138,15 @@ void update_searchbar_addressbook_list()
         }
     }
 
-    if(abookfactory_is_addressbook_loaded()) {
-        AddrBookFactory *factory = abookfactory_get_factory();
+    if(addrbook) {
         if (activeIsSet) {
             gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbox), &activeIter);
-            factory->addrbook->set_current_book(activeText);
+            addrbook->set_current_book(activeText);
         }
         else {
             gtk_combo_box_set_active (GTK_COMBO_BOX (cbox), 0);
             gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox));
-            factory->addrbook->set_current_book(gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox)));
+            addrbook->set_current_book(gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox)));
         }
     }
 
@@ -169,9 +158,7 @@ void update_searchbar_addressbook_list()
 static void select_search_type (GtkWidget *item, GtkEntry  *entry UNUSED)
 {
     
-    if(abookfactory_is_addressbook_loaded()) {
-        AddrBookFactory *factory = abookfactory_get_factory();
-
+    if(addrbook) {
         DEBUG ("Searchbar: %s", gtk_menu_item_get_label (GTK_MENU_ITEM (item)));
 
         gtk_entry_set_icon_tooltip_text (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY,
@@ -179,18 +166,17 @@ static void select_search_type (GtkWidget *item, GtkEntry  *entry UNUSED)
 
 
         if (g_strcmp0 ("Search is", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
-            factory->addrbook->set_search_type(ABOOK_QUERY_IS);
+            addrbook->set_search_type(ABOOK_QUERY_IS);
         }
         else if (g_strcmp0 ("Search begins with", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
-            factory->addrbook->set_search_type(ABOOK_QUERY_BEGINS_WITH);
+            addrbook->set_search_type(ABOOK_QUERY_BEGINS_WITH);
         }
         else if (g_strcmp0 ("Search contains", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
-            factory->addrbook->set_search_type(ABOOK_QUERY_CONTAINS);
+            addrbook->set_search_type(ABOOK_QUERY_CONTAINS);
         }
   
-        AddressBook_Config *addressbook_config;
-        addressbook_config_load_parameters(&addressbook_config);
-        factory->addrbook->search (factory->addrbook->search_cb, GTK_ENTRY (addressbookentry), addressbook_config);
+        AddressBook_Config *addressbook_config = addressbook_config_load_parameters();
+        addrbook->search (addrbook->search_cb, GTK_ENTRY (addressbookentry), addressbook_config);
     }
 
 }
@@ -388,19 +374,16 @@ GtkWidget* contacts_searchbar_new ()
     liststore = gtk_list_store_new (1,G_TYPE_STRING);
 
     // Create combo box to select current addressbook
-    if(!abookfactory_is_addressbook_loaded()) {
+    if(!addrbook)
     	return NULL;
-    }
 
     book_list = dbus_get_addressbook_list();
 
-    AddrBookFactory *factory = abookfactory_get_factory();
-    
-    factory->addrbook->init(book_list);
+    addrbook->init(book_list);
 
     GSList *book_list_iterator;
     book_data_t *book_data;
-    GSList *books_data = factory->addrbook->get_books_data(book_list);
+    GSList *books_data = addrbook->get_books_data(book_list);
     
     // Populate menu
     count = 0;
diff --git a/gnome/src/dbus/dbus.c b/gnome/src/dbus/dbus.c
index 37248332d485f03537eab798a2644e742406cffc..6d8da167ac59d0d40fec87c1dcd492ec2ef54fa8 100644
--- a/gnome/src/dbus/dbus.c
+++ b/gnome/src/dbus/dbus.c
@@ -1762,12 +1762,9 @@ dbus_get_audio_manager (void)
 GHashTable*
 dbus_get_addressbook_settings (void)
 {
-
     GError *error = NULL;
     GHashTable *results = NULL;
 
-    //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
-
     org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings (
         configurationManagerProxy, &results, &error);
 
diff --git a/gnome/src/uimanager.c b/gnome/src/uimanager.c
index adf8baadc4ae12a9cfb703875585c568bbda0c45..059203d1c4b5dd71463aeea55ccb33675fb76271 100644
--- a/gnome/src/uimanager.c
+++ b/gnome/src/uimanager.c
@@ -114,7 +114,7 @@ update_actions()
     g_object_ref(recordWidget_);
     g_object_ref(holdToolbar_);
     g_object_ref(offHoldToolbar_);
-    if (abookfactory_is_addressbook_loaded())
+    if (addrbook)
         g_object_ref(contactButton_);
 
     g_object_ref(historyButton_);
@@ -127,7 +127,7 @@ update_actions()
     remove_from_toolbar(transferToolbar_);
     remove_from_toolbar(historyButton_);
 
-    if (abookfactory_is_addressbook_loaded())
+    if (addrbook)
         remove_from_toolbar(contactButton_);
 
     remove_from_toolbar(voicemailToolbar_);
@@ -140,11 +140,11 @@ update_actions()
     gtk_widget_set_sensitive(recordWidget_, FALSE);
     gtk_action_set_sensitive(copyAction_, FALSE);
 
-    if (abookfactory_is_addressbook_loaded())
+    if (addrbook)
         gtk_widget_set_sensitive(contactButton_, FALSE);
 
     gtk_widget_set_sensitive(historyButton_, FALSE);
-    if (abookfactory_is_addressbook_loaded())
+    if (addrbook)
         gtk_widget_set_tooltip_text(contactButton_, _("No address book selected"));
 
     remove_from_toolbar(holdToolbar_);
@@ -163,16 +163,14 @@ update_actions()
     }
 
     // If addressbook support has been enabled and all addressbooks are loaded, display the icon
-    if (abookfactory_is_addressbook_loaded()) {
-        AddrBookFactory *bookFactory = abookfactory_get_factory();
-        AddressBook_Config *addressbook_config;
-        addressbook_config_load_parameters(&addressbook_config);
+    if (addrbook) {
+        AddressBook_Config *addressbook_config = addressbook_config_load_parameters();
 
-        if (addressbook_config->enable && bookFactory->addrbook->is_ready()) {
+        if (addressbook_config->enable && addrbook->is_ready()) {
             gtk_toolbar_insert(GTK_TOOLBAR(toolbar_), GTK_TOOL_ITEM(contactButton_), -1);
 
             // Make the icon clickable only if at least one address book is active
-            if (bookFactory->addrbook->is_active()) {
+            if (addrbook->is_active()) {
                 gtk_widget_set_sensitive(contactButton_, TRUE);
                 gtk_widget_set_tooltip_text(contactButton_, _("Address book"));
             }
@@ -1041,7 +1039,7 @@ static const GtkToggleActionEntry toggle_menu_entries[] = {
 
 GtkUIManager *uimanager_new(void)
 {
-    gint nb_entries = abookfactory_is_addressbook_loaded() ? 7 : 6;
+    gint nb_entries = addrbook ? 7 : 6;
 
     GtkWidget *window = get_main_window();
     GtkUIManager *ui_manager = gtk_ui_manager_new();
@@ -1065,7 +1063,7 @@ GtkUIManager *uimanager_new(void)
 
     g_free(path);
 
-    if (abookfactory_is_addressbook_loaded()) {
+    if (addrbook) {
         // These actions must be loaded dynamically and is not specified in the xml description
         gtk_ui_manager_add_ui(ui_manager, manager_id, "/ViewMenu",
                 "Addressbook",
@@ -1581,7 +1579,7 @@ create_toolbar_actions(GtkUIManager *ui_manager)
 		    "/ToolbarActions/StartPlaybackRecordToolbar");
     stopRecordWidget_ = gtk_ui_manager_get_widget(ui_manager,
 		    "/ToolbarActions/StopPlaybackRecordToolbar");
-    if (abookfactory_is_addressbook_loaded())
+    if (addrbook)
         contactButton_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/AddressbookToolbar");
 
     // Set the handler ID for the transfer