diff --git a/sflphone-client-gnome/configure.ac b/sflphone-client-gnome/configure.ac
index 94ff05c673d7508e60cf4aff7f0ffd5ed91d4a74..81c1f5cc4b066f407ed42a79db6969f6839dd524 100644
--- a/sflphone-client-gnome/configure.ac
+++ b/sflphone-client-gnome/configure.ac
@@ -61,15 +61,6 @@ PKG_CHECK_MODULES([LIBEDATASERVER], [libedataserver-1.2 >= 2.32], [AC_DEFINE([LI
 PKG_CHECK_MODULES(LIBGNOMEUI, libgnomeui-2.0)
 PKG_CHECK_MODULES(GNOMEDOCUTILS, gnome-doc-utils)
 
-AC_SUBST(SFLGTK_CFLAGS)
-AC_SUBST(SFLGLIB_CFLAGS)
-AC_SUBST(WEBKIT_CFLAGS)
-AC_SUBST(LIBEBOOK_CFLAGS)
-AC_SUBST(LIBEDATASERVER_CFLAGS)
-AC_SUBST(LIBEDATASERVERUI_CFLAGS)
-AC_SUBST(LIBGNOMEUI_CFLAGS)
-AC_SUBST(GNOMEDOCUTILS)
-
 AC_SUBST(SFLGTK_LIBS)
 AC_SUBST(SFLGLIB_LIBS)
 AC_SUBST(WEBKIT_LIBS)
diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 38c5e8ba4d176a9cc5cbafdedddd5d4af054e367..4115f0e792624b5b9e1d72e2a6a255a40015abe4 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -317,11 +317,15 @@ void sflphone_fill_account_list (void)
 
 gboolean sflphone_init (GError **error)
 {
-    if (!dbus_connect (error))
+    if (!dbus_connect (error)) {
         return FALSE;
+    }
 
-    if (!dbus_register (getpid (), "Gtk+ Client", error))
+    if (!dbus_register (getpid (), "Gtk+ Client", error)) {
         return FALSE;
+    }
+    
+    abookfactory_init_factory(); 
 
     // Init icons factory
     init_icon_factory ();
diff --git a/sflphone-client-gnome/src/config/Makefile.am b/sflphone-client-gnome/src/config/Makefile.am
index 871c75f87c05e26434a779bf0b5c5acd513bfeab..1df0702954054bf6fc8310fd0ed36a8eef624416 100644
--- a/sflphone-client-gnome/src/config/Makefile.am
+++ b/sflphone-client-gnome/src/config/Makefile.am
@@ -15,17 +15,17 @@ libconfig_la_SOURCES = \
   audioconf.c \
   utils.c 
 
-libconfig_la_LDFLAGS = @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-			@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-			@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-			@GNOMEDOCUTILS_LDFLAGS@
+libconfig_la_LDFLAGS = $(DBUSGLIB_LDFLAGS) $(LIBNOTIFY_LDFLAGS) \
+			$(SFLGTK_LDFLAGS) $(SFLGLIB_LDFLAGS) $(WEBKIT_LDFLAGS) $(LIBEBOOK_LDFLAGS) \
+			$(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(LIBGNOMEUI_LDFLAGS) \
+			$(GNOMEDOCUTILS_LDFLAGS)
 
-libconfig_la_LIBADD = @DBUSGLIB_LIBS@ @LIBNOTIFY_LIBSI@ \
-			@SFLGTK_LIBS@ @SFLGLIB_LIBS@ @WEBKIT_LIBS@ @LIBEBOOK_LIBS@ \
-			@LIBEDATASERVER_LIBS@ @LIBEDATASERVERUI_LIBS@ @LIBGNOMEUI_LIBS@ \
-			@GNOMEDOCUTILS_LIBS@
+libconfig_la_LIBADD = $(DBUSGLIB_LIBS) $(LIBNOTIFY_LIBSI) \
+			$(SFLGTK_LIBS) $(SFLGLIB_LIBS) $(WEBKIT_LIBS) $(LIBEBOOK_LIBS) \
+			$(LIBEDATASERVER_LIBS) $(LIBEDATASERVERUI_LIBS) $(LIBGNOMEUI_LIBS) \
+			$(GNOMEDOCUTILS_LIBS)
 					  
-libconfig_la_CFLAGS = @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-			@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-			@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-			@GNOMEDOCUTILS_CFLAGS@
+libconfig_la_CFLAGS = $(DBUSGLIB_CFLAGS) $(LIBNOTIFY_CFLAGS) \
+			$(SFLGTK_CFLAGS) $(SFLGLIB_CFLAGS) $(WEBKIT_CFLAGS) $(LIBEBOOK_CFLAGS) \
+			$(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(LIBGNOMEUI_CFLAGS) \
+			$(GNOMEDOCUTILS_CFLAGS)
diff --git a/sflphone-client-gnome/src/config/addressbook-config.c b/sflphone-client-gnome/src/config/addressbook-config.c
index f2da4d5a28e5fca7455b70851ac8d40000b0cf65..7400612b485860c9c5231e4be39374b428d5ff1f 100644
--- a/sflphone-client-gnome/src/config/addressbook-config.c
+++ b/sflphone-client-gnome/src/config/addressbook-config.c
@@ -30,7 +30,8 @@
 
 #include "addressbook-config.h"
 #include "searchbar.h"
-#include <contacts/addressbook/eds.h>
+#include "contacts/addrbookfactory.h"
+#include "contacts/addressbook/eds.h"
 #include <string.h>
 #include <stdlib.h>
 
@@ -209,6 +210,10 @@ addressbook_config_book_active_toggled (
     gchar* name;
     gchar* uid;
 
+    if(!abookfactory_is_addressbook_loaded()) {
+        return;
+    }
+
     // Get path of clicked book active toggle box
     treePath = gtk_tree_path_new_from_string (path);
 
@@ -217,6 +222,8 @@ addressbook_config_book_active_toggled (
         return;
     }
 
+    AddrBookFactory *factory = abookfactory_get_factory();
+
     gtk_tree_model_get_iter (model, &iter, treePath);
 
     // Get active value  at iteration
@@ -232,7 +239,7 @@ addressbook_config_book_active_toggled (
     gtk_tree_path_free (treePath);
 
     // Update current memory stored books data
-    books_get_book_data_by_uid (uid)->active = active;
+    // factory->addrbook->get_book_data_by_uid (uid)->active = active;
 
     // Save data
 
@@ -279,7 +286,14 @@ addressbook_config_fill_book_list()
     GSList *book_list_iterator;
     GtkListStore *store;
     book_data_t *book_data;
-    GSList *books_data = addressbook_get_books_data();
+
+    if(!abookfactory_is_addressbook_loaded()) {
+        return;
+    }
+
+    AddrBookFactory *factory = abookfactory_get_factory();
+
+    GSList *books_data = factory->addrbook->get_books_data();
 
     if (!books_data) {
         DEBUG ("Addressbook: No valid books data (%s:%d)", __FILE__, __LINE__);
diff --git a/sflphone-client-gnome/src/config/addressbook-config.h b/sflphone-client-gnome/src/config/addressbook-config.h
index 78831f6780ede793cf731b6586c0fb1ed283df7d..00faa14c0f44f8c3d3a4a6254cc21c1f23a6d471 100644
--- a/sflphone-client-gnome/src/config/addressbook-config.h
+++ b/sflphone-client-gnome/src/config/addressbook-config.h
@@ -35,7 +35,7 @@
 #include <glib/gtypes.h>
 
 #include "actions.h"
-#include <utils.h>
+#include "utils.h"
 
 G_BEGIN_DECLS
 
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index 53f449959404c04fb005666f8f16ae591f553076..f0ce15bf31fd5203f5097e9fec22913d431e72a6 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -37,6 +37,7 @@
 #include <string.h>
 #include "eel-gconf-extensions.h"
 
+#include "addrbookfactory.h"
 #include "accountconfigdialog.h"
 #include "addressbook-config.h"
 #include "shortcuts-config.h"
@@ -282,9 +283,11 @@ create_general_settings ()
 void
 save_configuration_parameters (void)
 {
+    if(abookfactory_is_addressbook_loaded()) {
+        // Address book config
+        addressbook_config_save_parameters ();
+    }
 
-    // Address book config
-    addressbook_config_save_parameters ();
     hooks_save_parameters ();
 
     // History config
@@ -389,26 +392,17 @@ show_preferences_dialog ()
 
     // General settings tab
     tab = create_general_settings ();
-    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
-                                  _ ("General")));
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("General")));
     gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
 
     // Audio tab
     tab = create_audio_configuration ();
-    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
-                                  _ ("Audio")));
-    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
-
-    // Addressbook tab
-    tab = create_addressbook_settings ();
-    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
-                                  _ ("Address Book")));
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Audio")));
     gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
 
     // Hooks tab
     tab = create_hooks_settings ();
-    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
-                                  _ ("Hooks")));
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Hooks")));
     gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
 
     // Shortcuts tab
@@ -416,6 +410,13 @@ 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()) {
+        // Addressbook tab
+        tab = create_addressbook_settings ();
+        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Address Book")));
+        gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+    }
+    
     // By default, general settings
     gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
     // Highlight the corresponding icon
@@ -432,37 +433,40 @@ show_preferences_dialog ()
     return result;
 }
 
+#define NB_MAX_ENTRIES 5
 
 GtkTreeModel* createModel()
-{
-
-    browser_t browser_entries[5] = {
+{    
+    browser_t browser_entries_full[NB_MAX_ENTRIES] = {
         {_ ("General"), "preferences-system", 0},
         {_ ("Audio"), "multimedia-volume-control", 1},
-        {_ ("Address Book"), "address-book-new", 2},
-        {_ ("Hooks"), "gnome-globe", 3},
-        {_ ("Shortcuts"), "preferences-desktop-keyboard", 4}
+        {_ ("Hooks"), "gnome-globe", 2},
+        {_ ("Shortcuts"), "preferences-desktop-keyboard", 3},
+        {_ ("Address Book"), "address-book-new", 4},
     };
 
     GdkPixbuf *pixbuf;
     GtkTreeIter iter;
     GtkListStore *store;
     GError *error = NULL;
-    gint i;
+    gint i, nb_entries;
+
+    nb_entries = abookfactory_is_addressbook_loaded() ? 5 : 4;
 
     store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
     GtkIconTheme* theme = gtk_icon_theme_get_default();
 
-    for (i = 0; i < 5; i++) {
+
+    for (i = 0; i < nb_entries; i++) {
 
         gtk_list_store_append (store, &iter);
 
-        pixbuf = gtk_icon_theme_load_icon (theme, browser_entries[i].icon_name, 48, 0, &error);
+        pixbuf = gtk_icon_theme_load_icon (theme, browser_entries_full[i].icon_name, 48, 0, &error);
 
         gtk_list_store_set (store, &iter,
                             PIXBUF_COL, pixbuf,
-                            TEXT_COL, browser_entries[i].icon_descr,
-                            PAGE_NUMBER, browser_entries[i].page_number,
+                            TEXT_COL, browser_entries_full[i].icon_descr,
+                            PAGE_NUMBER, browser_entries_full[i].page_number,
                             -1);
 
         if (pixbuf != NULL) {
diff --git a/sflphone-client-gnome/src/contacts/Makefile.am b/sflphone-client-gnome/src/contacts/Makefile.am
index b55c6d194c9ef9f03d42360ef6deede5b37215e9..025bbd14eb69184b7319347a0af7cc4deec2f23e 100644
--- a/sflphone-client-gnome/src/contacts/Makefile.am
+++ b/sflphone-client-gnome/src/contacts/Makefile.am
@@ -10,17 +10,17 @@ libcontacts_la_SOURCES = \
   calltab.c \
   calltree.c \
   history.c \
-  addressbook.c \
+  addrbookfactory.c \
   conferencelist.c
 
-libcontacts_la_LDFLAGS = @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-				@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-				@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-				@GNOMEDOCUTILS_LDFLAGS@ 
+libcontacts_la_LDFLAGS = $(DBUSGLIB_LDFLAGS) $(LIBNOTIFY_LDFLAGS) \
+				$(SFLGTK_LDFLAGS) $(SFLGLIB_LDFLAGS) $(WEBKIT_LDFLAGS) $(LIBEBOOK_LDFLAGS) \
+				$(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(LIBGNOMEUI_LDFLAGS) \
+				$(GNOMEDOCUTILS_LDFLAGS) 
 					  
-libcontacts_la_CFLAGS = @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-				@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-				@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-				@GNOMEDOCUTILS_CFLAGS@
+libcontacts_la_CFLAGS = $(DBUSGLIB_CFLAGS) $(LIBNOTIFY_CFLAGS) \
+				$(SFLGTK_CFLAGS) $(SFLGLIB_CFLAGS) $(WEBKIT_CFLAGS) $(LIBEBOOK_CFLAGS) \
+				$(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(LIBGNOMEUI_CFLAGS) \
+				$(GNOMEDOCUTILS_CFLAGS)
 
-libcontacts_la_LIBADD = ./addressbook/libaddressbook.la
+libcontacts_la_LIBADD = ./addressbook/libevladdrbook.so
diff --git a/sflphone-client-gnome/src/contacts/addrbookfactory.c b/sflphone-client-gnome/src/contacts/addrbookfactory.c
new file mode 100644
index 0000000000000000000000000000000000000000..d53412db808da8581259efe23e4f9d31a59ef53d
--- /dev/null
+++ b/sflphone-client-gnome/src/contacts/addrbookfactory.c
@@ -0,0 +1,116 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
+ *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
+#include "addrbookfactory.h"
+
+#include <glib.h>
+#include <dlfcn.h>
+
+AddrBookFactory addressbookFactory = {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) {
+
+}
+
+void abookfactory_load_module(AddrBookFactory *factory) {
+
+    AddrBookHandle *ab;
+    void *handle;    
+
+    DEBUG("AddressbookFactory: Loading addressbook");
+
+    ab = g_malloc(sizeof(AddrBookHandle));
+
+    handle = dlopen("./src/contacts/addressbook/libevladdrbook.so", RTLD_LAZY);
+    if(handle == NULL) {
+        ERROR("AddressbookFactory: Error: Could not load addressbook");
+        return;
+    }
+
+    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_enabled = dlsym(handle, "addressbook_is_enabled");
+    if(ab->is_enabled == NULL) {
+        ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_is_enabled 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");
+    }
+
+    DEBUG("AddressbookFactory: Loading done");
+    factory->addrbook = ab;
+}
diff --git a/sflphone-client-gnome/src/contacts/addrbookfactory.h b/sflphone-client-gnome/src/contacts/addrbookfactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..9df1cf534b19d8b9ae245c6a12781a7f8944d730
--- /dev/null
+++ b/sflphone-client-gnome/src/contacts/addrbookfactory.h
@@ -0,0 +1,55 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
+ *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
+
+#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 abookfactory_init_factory(); 
+
+AddrBookFactory *abookfactory_get_factory(void);
+
+gboolean abookfactory_is_addressbook_loaded(void);
+
+void abookfactory_scan_directory(AddrBookFactory *);
+
+void abookfactory_load_module(AddrBookFactory *);
+
+#endif
diff --git a/sflphone-client-gnome/src/contacts/addressbook.h b/sflphone-client-gnome/src/contacts/addressbook.h
index e44df3a26e006e3c907125340fb53d8c7650200a..b9dd476b8c3c19b8ce9b1977b31be20e80d68ec1 100644
--- a/sflphone-client-gnome/src/contacts/addressbook.h
+++ b/sflphone-client-gnome/src/contacts/addressbook.h
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
  *  Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com>
+ *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -40,35 +41,55 @@
 #include <gtk/gtk.h>
 #include <addressbook/eds.h>
 
+typedef enum {ABOOK_QUERY_IS, ABOOK_QUERY_BEGINS_WITH, ABOOK_QUERY_CONTAINS} AddrbookSearchType;
+
+typedef struct _addrbookhandle {
+    void (*init) (void);
+    gboolean (*is_ready) (void);
+    gboolean (*is_enabled) (void);
+    gboolean (*is_active) (void);
+    void (*search) (GtkEntry*);
+    GSList *(*get_books_data)(void);
+    GSList *(*get_book_data_by_uid)(gchar *);
+    void (*set_current_book)(gchar *); 
+    void (*set_search_type)(AddrbookSearchType);
+} AddrBookHandle;
+
+/**
+ * Initialize addressbook
+ */
+void addressbook_init();
+
 /**
  * Return addressbook state
  */
-gboolean
-addressbook_is_ready();
+gboolean addressbook_is_ready();
 
 /**
  * Return addressbook state
  */
-gboolean
-addressbook_is_enabled();
+gboolean addressbook_is_enabled();
 
 /**
  * Return if at least one addressbook is active
  */
-gboolean
-addressbook_is_active();
+gboolean addressbook_is_active();
 
 
 /**
  * Perform a search in addressbook
  */
-void
-addressbook_search (GtkEntry*);
+void addressbook_search (GtkEntry*);
 
 /**
- * Initialize addressbook
+ * Get a list of addressbook
  */
-void
-addressbook_init();
+GSList *addressbook_get_books_data(void);
+
+GSList *addressbook_get_book_data_by_uid(gchar *);
+
+void addressbook_set_current_book(void);
+
+void addressbook_set_search_type(AddrbookSearchType);
 
 #endif
diff --git a/sflphone-client-gnome/src/contacts/addressbook/Makefile.am b/sflphone-client-gnome/src/contacts/addressbook/Makefile.am
index bdf18ba57c95b30a541fc529fcdc5e707e4ba3dc..649cc200a1a4bb34748251f1a66c7a41283588c2 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/Makefile.am
+++ b/sflphone-client-gnome/src/contacts/addressbook/Makefile.am
@@ -1,15 +1,19 @@
 include ../../../globals.mak
 
-noinst_LTLIBRARIES = libaddressbook.la
+noinst_PROGRAMS = libevladdrbook.so
 
-libaddressbook_la_SOURCES = eds.c
+libevladdrbook_so_SOURCES = eds.c addressbook.c
 
-libaddressbook_la_LDFLAGS = @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-				@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-				@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-				@GNOMEDOCUTILS_LDFLAGS@
+libevladdrbook_so_LDFLAGS = --shared $(SFLGLIB_LDFLAGS) $(SFLGTK_CFLAGS) $(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(DBUSGLIB_LDFLAGS)
+
+# @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
+#				@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
+#				@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
+#				@GNOMEDOCUTILS_LDFLAGS@
 					  
-libaddressbook_la_CFLAGS = @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-				@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-				@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-				@GNOMEDOCUTILS_CFLAGS@
+libevladdrbook_so_CFLAGS = -fPIC -g -Wall $(SFLGLIB_CFLAGS) $(SFLGTK_CFLAGS) $(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(DBUSGLIB_CFLAGS)
+
+# @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
+#				@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
+#				@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
+#				@GNOMEDOCUTILS_CFLAGS@
diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook/addressbook.c
similarity index 85%
rename from sflphone-client-gnome/src/contacts/addressbook.c
rename to sflphone-client-gnome/src/contacts/addressbook/addressbook.c
index b1cf61e067b1d2e3b6d92dd852fbb5c9d652dc3d..39616d2289ed8fb31fdb6b61a31e2a3c500da14c 100644
--- a/sflphone-client-gnome/src/contacts/addressbook.c
+++ b/sflphone-client-gnome/src/contacts/addressbook/addressbook.c
@@ -27,11 +27,12 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
-
-#include <addressbook.h>
-#include <searchbar.h>
 #include <string.h>
-#include <addressbook-config.h>
+#include <stdio.h>
+
+#include "addressbook.h"
+#include "searchbar.h"
+#include "addressbook-config.h"
 
 static void
 handler_async_search (GList *, gpointer);
@@ -44,15 +45,13 @@ addressbook_search (GtkEntry* entry)
 {
 
     const gchar* query = gtk_entry_get_text (GTK_ENTRY (entry));
-    DEBUG ("Addressbook: Search %s", query);
-
+    printf("Addressbook: Search %s\n", query);
 
     AddressBook_Config *addressbook_config;
 
     activateWaitingLayer();
 
-    addressbook_config_load_parameters (&addressbook_config);
-
+    // addressbook_config_load_parameters (&addressbook_config);
 
     search_async_by_contacts (gtk_entry_get_text (GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config);
 
@@ -66,8 +65,10 @@ addressbook_is_enabled()
 {
     AddressBook_Config *addressbook_config;
 
+    printf("Addresbook: is enabled\n");
+
     // Load the address book parameters
-    addressbook_config_load_parameters (&addressbook_config);
+    // addressbook_config_load_parameters (&addressbook_config);
 
     return (guint) addressbook_config->enable;
 }
@@ -78,6 +79,8 @@ addressbook_is_enabled()
 gboolean
 addressbook_is_ready()
 {
+    printf("Addressbook: is ready\n");
+
     return books_ready();
 }
 
@@ -87,6 +90,7 @@ addressbook_is_ready()
 gboolean
 addressbook_is_active()
 {
+    printf("Addressbook: is active\n");
     return books_active();
 }
 
@@ -100,8 +104,12 @@ addressbook_config_books()
     book_data_t *book_data;
     gchar **list;
 
+    
+
     // Retrieve list of books
-    list = (gchar **) dbus_get_addressbook_list();
+    // list = (gchar **) dbus_get_addressbook_list();
+
+    list = NULL;
 
     if (list == NULL)
         return;
@@ -113,7 +121,7 @@ addressbook_config_books()
 
         // If book_data exists
         if (book_data == NULL) {
-            ERROR ("Addressbook: Error: Could not open book (%s:%d)", __FILE__, __LINE__);
+            printf("Addressbook: Error: Could not open book (%s:%d)\n", __FILE__, __LINE__);
         } else {
             book_data->active = TRUE;
         }
@@ -128,7 +136,7 @@ addressbook_config_books()
 GSList *
 addressbook_get_books_data()
 {
-    DEBUG ("Addressboook: Get books data");
+    printf("Addressbook: Get books data\n");
 
     fill_books_data();
     addressbook_config_books();
@@ -137,6 +145,11 @@ addressbook_get_books_data()
     return get_books_data();
 }
 
+GSList *
+addressbook_get_book_data_by_uid(gchar *uid) 
+{
+}
+
 /**
  * Initialize books.
  * Set active/inactive status depending on config.
@@ -144,7 +157,7 @@ addressbook_get_books_data()
 void
 addressbook_init()
 {
-    DEBUG ("Addressbook: Initialize addressbook");
+    printf("Addressbook: Initialize addressbook\n");
 
     init_eds_mutex();
 
@@ -168,7 +181,7 @@ handler_async_search (GList *hits, gpointer user_data)
     AddressBook_Config *addressbook_config;
     callable_obj_t *j;
 
-    DEBUG ("Addressbook: callback async search");
+    printf("Addressbook: callback async search\n");
 
     // freeing calls
     while ( (j = (callable_obj_t *) g_queue_pop_tail (contacts->callQueue)) != NULL) {
@@ -205,7 +218,7 @@ handler_async_search (GList *hits, gpointer user_data)
                 calllist_add_contact (entry->name, entry->phone_home,
                                       CONTACT_PHONE_HOME, photo);
 
-            // Create entry for mobile phone information
+            // Create entry for mobile phone iddnformation
             if (addressbook_display (addressbook_config,
                                      ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
                 calllist_add_contact (entry->name, entry->phone_mobile,
@@ -224,3 +237,6 @@ handler_async_search (GList *hits, gpointer user_data)
     gtk_widget_grab_focus (GTK_WIDGET (contacts->view));
 }
 
+void addressbook_set_search_type(AddrbookSearchType searchType) {
+
+}
diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c
index e58679cda88c438fe3b801a91dc7fadda75c08d5..842845903d62b6283fa445846d494c542735d490 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.c
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c
@@ -143,7 +143,7 @@ books_active()
     g_mutex_lock(books_data_mutex);
 
     if (books_data == NULL) {
-        DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__);
+        printf("Addressbook: No books data (%s:%d)\n", __FILE__, __LINE__); 
         g_mutex_unlock(books_data_mutex);
         return FALSE;
     }
@@ -176,12 +176,12 @@ books_get_book_data_by_uid (gchar *uid)
     g_mutex_lock(books_data_mutex);
 
     if (books_data == NULL) {
-        DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__);
+        printf("Addressbook: No books data (%s:%d)\n", __FILE__, __LINE__);
         g_mutex_unlock(books_data_mutex);
         return NULL;
     }
 
-    DEBUG ("Addressbook: Get book data by uid: %s", uid);
+    printf("Addressbook: Get book data by uid: %s\n", uid);
 
     // Iterate throw the list
     for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
@@ -189,7 +189,7 @@ books_get_book_data_by_uid (gchar *uid)
         book_data = (book_data_t *) book_list_iterator->data;
 
         if (strcmp (book_data->uid, uid) == 0) {
-            DEBUG ("Addressbook: Book %s found", uid);
+            printf("Addressbook: Book %s found\n", uid);
             g_mutex_unlock(books_data_mutex);
             return book_data;
         }
@@ -197,7 +197,7 @@ books_get_book_data_by_uid (gchar *uid)
 
     g_mutex_unlock(books_data_mutex);
 
-    DEBUG ("Addressbook: Could not found Book %s", uid);
+    printf("Addressbook: Could not found Book %s\n", uid);
     // If no result
     return NULL;
 }
@@ -297,7 +297,7 @@ view_finish_callback (EBookView *book_view, Search_Handler_And_Data *had)
 
     g_free (had);
 
-    DEBUG ("Addressbook: View finish, all book have been processed");
+    printf("Addressbook: View finish, all book have beem processed\n"); 
 
     if (book_view != NULL)
         g_object_unref (book_view);
@@ -314,28 +314,27 @@ view_finish_callback (EBookView *book_view, Search_Handler_And_Data *had)
 void
 eds_query_result_cb (EBook *book, const GError *error, GList *contacts, gpointer user_data)
 {
-    DEBUG ("Addressbook: Search Result callback called");
-
+    printf("Addressbook: Search Result callback called\n");
     if (error) {
-        ERROR ("Addressbook: Error: %s", error->message);
+        printf("Addressbook: Error: %s\n", error->message);
         return;
     }
 #else
 static void
 eds_query_result_cb (EBook *book, EBookStatus status, GList *contacts, gpointer user_data)
 {
-  DEBUG ("Addressbook: Search Result callback called");
+    printf("Addressbook: Search Result callback called\n");
 
-  if (status != E_BOOK_ERROR_OK) {
-      ERROR ("Addressbook: Error: ");
-      return;
-  }
+    if (status != E_BOOK_ERROR_OK) {
+        printf("Addressbook: Error: ");
+        return;
+    }
 #endif
 
     Search_Handler_And_Data *had = (Search_Handler_And_Data *) user_data;
 
     if (contacts == NULL) {
-        DEBUG ("Addressbook: No contact found");
+        printf("Addressbook: No contact found\n");
         had->search_handler (NULL, user_data);
         return;
     }
@@ -392,13 +391,13 @@ eds_query_result_cb (EBook *book, EBookStatus status, GList *contacts, gpointer
 void
 eds_async_open_callback (EBook *book, const GError *error, gpointer closure)
 {
-    DEBUG("Addressbook: Open book callback");
+    printf("Addressbook: Open book callback\n");
 
     ESource *source;
     const gchar *uri;
 
     if(error) {
-        ERROR("Addressbook: Error: %s", error->message);
+        printf("Addressbook: Error: %s\n", error->message);
         return;
     }
 #else
@@ -409,7 +408,7 @@ eds_async_open_callback (EBook *book, EBookStatus status, gpointer closure)
     const gchar *uri;
 
     if(status == E_BOOK_ERROR_OK) {
-        ERROR("Addressbook: Error: ");
+        printf("Addressbook: Error\n");
         return;
     }
 
@@ -418,11 +417,11 @@ eds_async_open_callback (EBook *book, EBookStatus status, gpointer closure)
     Search_Handler_And_Data *had = (Search_Handler_And_Data *) closure;
 
     if (! (source = e_book_get_source (book))) {
-        ERROR("Addressbook: Error: while getting source");
+        printf("Addressbook: Error: while getting source\n");
     }
 
     if (! (uri = e_book_get_uri (book))) {
-        ERROR("Addressbook: Error while getting URI");
+        printf("Addressbook: Error while getting URI\n");
     }
 
     authenticate_source (book);
@@ -434,10 +433,10 @@ eds_async_open_callback (EBook *book, EBookStatus status, gpointer closure)
 
 #ifdef LIBEDATASERVER_VERSION_2_32
     if (!e_book_get_contacts_async (book, had->equery, eds_query_result_cb, had))
-        ERROR("Addressbook: Error: While querying addressbook");
+        printf("Addressbook: Error: While querying addressbook\n");
 #else
     if (e_book_async_get_contacts (book, had->equery, eds_query_result_cb, had))
-        ERROR ("Addressbook: Error: While querying addressbook");
+        printf("Addressbook: Error: While querying addressbook\n");
 #endif
 
 }
@@ -451,12 +450,12 @@ init_eds ()
     GSList *book_list_iterator;
     book_data_t *book_data;
 
-    DEBUG ("Addressbook: Init evolution data server");
+    printf ("Addressbook: Init evolution data server\n");
 
     g_mutex_lock(books_data_mutex);
 
     if (books_data == NULL) {
-        DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__);
+        printf ("Addressbook: No books data (%s:%d)\n", __FILE__, __LINE__);
         g_mutex_unlock(books_data_mutex);
         return;
     }
@@ -480,7 +479,7 @@ init_eds ()
         }
     }
 
-    DEBUG("END EVOLUTION INIT %s, %s, %s", current_uri, current_uid, current_name);
+    printf("END EVOLUTION INIT %s, %s, %s\n", current_uri, current_uid, current_name);
 
     g_mutex_unlock(books_data_mutex);
 }
@@ -562,19 +561,19 @@ fill_books_data ()
     GSList *list, *l;
     ESourceList *source_list = NULL;
 
-    DEBUG ("Addressbook: Fill books data");
+    printf ("Addressbook: Fill books data\n");
 
     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 (%s:%d)", __FILE__, __LINE__);
+        printf ("Addressbook: Error could not initialize source list for addressbook (%s:%d)\n", __FILE__, __LINE__);
         return;
     }
 
     list = e_source_list_peek_groups (source_list);
 
     if (list == NULL) {
-        ERROR ("Addressbook: Address Book source groups are missing (%s:%d)! Check your GConf setup.", __FILE__, __LINE__);
+        printf ("Addressbook: Address Book source groups are missing (%s:%d)! Check your GConf setup.\n", __FILE__, __LINE__);
         return;
     }
 
@@ -664,7 +663,7 @@ determine_default_addressbook()
             current_uri = book_data->uri;
             current_uid = book_data->uid;
             current_name = book_data->name;
-            DEBUG ("Addressbook: No default addressbook found, using %s addressbook as default", book_data->name);
+            printf ("Addressbook: No default addressbook found, using %s addressbook as default\n", book_data->name);
         }
 
         list_element = g_slist_next (list_element);
@@ -680,7 +679,7 @@ empty_books_data()
     book_data_t *book_data;
 
     if (books_data == NULL) {
-        DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__);
+        printf ("Addressbook: No books data (%s:%d)\n", __FILE__, __LINE__);
         return;
     }
 
@@ -701,10 +700,10 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler
     GError *err = NULL;
     EBook *book = NULL;
 
-    DEBUG ("Addressbook: New search by contacts: %s, max_results %d", query, max_results);
+    printf ("Addressbook: New search by contacts: %s, max_results %d\n", query, max_results);
 
     if (strlen (query) < 1) {
-        DEBUG ("Addressbook: Query is empty");
+        printf ("Addressbook: Query is empty\n");
         handler (NULL, user_data);
         return;
     }
@@ -719,20 +718,20 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler
     had->equery = create_query (query, current_test, (AddressBook_Config *) (user_data));
 
     if (!current_uri) {
-        ERROR ("Addressbook: Error: Current addressbook uri not specified");
+        printf ("Addressbook: Error: Current addressbook uri not specified\n");
     }
 
-    DEBUG ("Addressbook: Opening addressbook: uri: %s", current_uri);
-    DEBUG ("Addressbook: Opening addressbook: name: %s", current_name);
+    printf ("Addressbook: Opening addressbook: uri: %s\n", current_uri);
+    pinrtf ("Addressbook: Opening addressbook: name: %s\n", current_name);
 
     book = e_book_new_from_uri(current_uri, &err);
 
     if (err) {
-        ERROR ("Addressbook: Error: Could not open new book: %s", err->message);
+        printf ("Addressbook: Error: Could not open new book: %s\n", err->message);
     }
 
     if (book) {
-        DEBUG ("Addressbook: Created empty book successfully");
+        printf ("Addressbook: Created empty book successfully\n");
 
 #ifdef LIBEDATASERVER_VERSION_2_32
         e_book_open_async (book, TRUE, eds_async_open_callback, had);
@@ -743,7 +742,7 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler
 
 
     } else {
-        ERROR ("Addressbook: Error: No book available");
+        printf ("Addressbook: Error: No book available\n");
     }
 
 }
@@ -778,7 +777,7 @@ set_current_addressbook (const gchar *name)
     g_mutex_lock(books_data_mutex);
 
     if (!books_data) {
-        DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__);
+        printf ("Addressbook: No books data (%s:%d)\n", __FILE__, __LINE__);
         g_mutex_unlock(books_data_mutex);
         return;
     }
@@ -795,7 +794,7 @@ set_current_addressbook (const gchar *name)
         }
     }
 
-    DEBUG("Addressbook: Set current addressbook %s, %s, %s", current_uri, current_uid, current_name);
+    printf("Addressbook: Set current addressbook %s, %s, %s\n", current_uri, current_uid, current_name);
 
     g_mutex_unlock(books_data_mutex);
 }
diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c
index 8ef76b8ff69d7ef2b0e8afde140bba54af183a55..134465f47bebc118afadae0f1b7162214d00127d 100644
--- a/sflphone-client-gnome/src/contacts/searchbar.c
+++ b/sflphone-client-gnome/src/contacts/searchbar.c
@@ -34,6 +34,7 @@
 #include <searchbar.h>
 #include <calltree.h>
 #include <contacts/addressbook/eds.h>
+#include <contacts/addrbookfactory.h>
 
 GtkWidget * searchbox;
 GtkWidget * addressbookentry;
@@ -57,7 +58,10 @@ void searchbar_addressbook_activated (GtkEntry *entry, gchar *arg1 UNUSED, gpoin
 {
     DEBUG ("Searchbar: Entry activated");
 
-    addressbook_search (entry);
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *factory = abookfactory_get_factory();
+        factory->addrbook->search(entry);
+    }
 }
 
 void searchbar_entry_changed (GtkEntry* entry UNUSED, gchar* arg1 UNUSED, gpointer data UNUSED)
@@ -80,9 +84,11 @@ static void cbox_changed_cb (GtkWidget *widget, gpointer user_data UNUSED)
 
     name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget));
 
-    set_current_addressbook (name);
-
-    addressbook_search (GTK_ENTRY (addressbookentry));
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *factory = abookfactory_get_factory();
+        factory->addrbook->set_current_book (name);
+        factory->addrbook->search(GTK_ENTRY(addressbookentry));
+    }
 }
 
 void set_forcus_on_addressbook_searchbar ()
@@ -98,7 +104,16 @@ void update_searchbar_addressbook_list()
     gchar *activeText;
     GSList *book_list_iterator;
     book_data_t *book_data;
-    GSList *books_data = addressbook_get_books_data();
+    GSList *books_data = NULL;
+
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *factory = abookfactory_get_factory();
+        books_data = factory->addrbook->get_books_data();
+    }
+
+    if(books_data == NULL) {
+    	return;
+    }
 
     DEBUG ("Searchbar: Update addressbook list");
 
@@ -138,19 +153,19 @@ void update_searchbar_addressbook_list()
         }
     }
 
-
-
-    if (activeIsSet) {
-        gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbox), &activeIter);
-        set_current_addressbook(activeText);
-    }
-    else {
-        gtk_combo_box_set_active (GTK_COMBO_BOX (cbox), 0);
-        gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox));
-        set_current_addressbook(gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox)));
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *factory = abookfactory_get_factory();
+        if (activeIsSet) {
+            gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbox), &activeIter);
+            factory->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)));
+        }
     }
 
-
     g_free (activeText);
     cboxSignalId = gtk_signal_connect (GTK_OBJECT (cbox), "changed", G_CALLBACK (cbox_changed_cb), NULL);
 }
@@ -158,23 +173,28 @@ void update_searchbar_addressbook_list()
 
 static void select_search_type (GtkWidget *item, GtkEntry  *entry UNUSED)
 {
-    DEBUG ("Searchbar: %s", gtk_menu_item_get_label (GTK_MENU_ITEM (item)));
-
+    
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *factory = abookfactory_get_factory();
 
+        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,
+        gtk_entry_set_icon_tooltip_text (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY,
                                      gtk_menu_item_get_label (GTK_MENU_ITEM (item)));
 
 
-    if (strcmp ("Search is", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
-        set_current_addressbook_test (E_BOOK_QUERY_IS);
-    else if (strcmp ("Search begins with", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
-        set_current_addressbook_test (E_BOOK_QUERY_BEGINS_WITH);
-    else if (strcmp ("Search contains", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
-        set_current_addressbook_test (E_BOOK_QUERY_CONTAINS);
-
-    addressbook_search (GTK_ENTRY (addressbookentry));
+        if (strcmp ("Search is", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
+            factory->addrbook->set_search_type(ABOOK_QUERY_IS);
+        }
+        else if (strcmp ("Search begins with", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
+            factory->addrbook->set_search_type(ABOOK_QUERY_BEGINS_WITH);
+        }
+        else if (strcmp ("Search contains", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) {
+            factory->addrbook->set_search_type(ABOOK_QUERY_CONTAINS);
+        }
 
+        factory->addrbook->search (GTK_ENTRY (addressbookentry));
+    }
 
 }
 
@@ -399,18 +419,24 @@ GtkWidget* contacts_searchbar_new ()
     liststore = gtk_list_store_new (1,G_TYPE_STRING);
 
     // Create combo box to select current addressbook
-    addressbook_init();
+    if(!abookfactory_is_addressbook_loaded()) {
+    	return NULL;
+    }
+
+    AddrBookFactory *factory = abookfactory_get_factory();
+
+    factory->addrbook->init();
 
     GSList *book_list_iterator;
     book_data_t *book_data;
-    GSList *books_data = addressbook_get_books_data();
+    GSList *books_data = factory->addrbook->get_books_data();
 
     // Populate menu
     count = 0;
     gboolean activeIsSet = FALSE;
 
     for (book_list_iterator = books_data; book_list_iterator != NULL;
-            book_list_iterator = book_list_iterator->next) {
+             book_list_iterator = book_list_iterator->next) {
         book_data = (book_data_t *) book_list_iterator->data;
 
         if (book_data->active) {
diff --git a/sflphone-client-gnome/src/dbus/Makefile.am b/sflphone-client-gnome/src/dbus/Makefile.am
index e769b2a8a7a065a4f3c3f47872d06b9908790f07..2fbd96d1daa2bbcf3e8daaf7ec719d40ef4f37f2 100644
--- a/sflphone-client-gnome/src/dbus/Makefile.am
+++ b/sflphone-client-gnome/src/dbus/Makefile.am
@@ -24,15 +24,15 @@ libdbus_la_SOURCES=     \
     dbus.c              \
     $(BUILT_SOURCES)
 
-libdbus_la_LDFLAGS= @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-			@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-			@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-			@GNOMEDOCUTILS_LDFLAGS@
-
-libdbus_la_CFLAGS= @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-			@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-			@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-			@GNOMEDOCUTILS_CFLAGS@
+libdbus_la_LDFLAGS= $(DBUSGLIB_LDFLAGS) $(LIBNOTIFY_LDFLAGS) \
+			$(SFLGTK_LDFLAGS) $(SFLGLIB_LDFLAGS) $(WEBKIT_LDFLAGS) $(LIBEBOOK_LDFLAGS) \
+			$(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(LIBGNOMEUI_LDFLAGS) \
+			$(GNOMEDOCUTILS_LDFLAGS)
+
+libdbus_la_CFLAGS= $(DBUSGLIB_CFLAGS) $(LIBNOTIFY_CFLAGS) \
+			$(SFLGTK_CFLAGS) $(SFLGLIB_CFLAGS) $(WEBKIT_CFLAGS) $(LIBEBOOK_CFLAGS) \
+			$(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(LIBGNOMEUI_CFLAGS) \
+			$(GNOMEDOCUTILS_CFLAGS)
 
 EXTRA_DIST= \
     marshaller.list
diff --git a/sflphone-client-gnome/src/icons/Makefile.am b/sflphone-client-gnome/src/icons/Makefile.am
index 9b89d247c61c6bf8218350f32aa9664dbd62273f..5b5c75fe19f2d32d7537e42d9e8af4da4455388b 100644
--- a/sflphone-client-gnome/src/icons/Makefile.am
+++ b/sflphone-client-gnome/src/icons/Makefile.am
@@ -9,12 +9,12 @@ noinst_libicons_la_HEADER= \
 	icon_factory.h	\
 	pixmaps_data.h
 
-libicons_la_LDFLAGS = @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-			@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-			@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-			@GNOMEDOCUTILS_LDFLAGS@
+libicons_la_LDFLAGS = $(DBUSGLIB_LDFLAGS) $(LIBNOTIFY_LDFLAGS) \
+			$(SFLGTK_LDFLAGS) $(SFLGLIB_LDFLAGS) $(WEBKIT_LDFLAGS) $(LIBEBOOK_LDFLAGS) \
+			$(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(LIBGNOMEUI_LDFLAGS) \
+			$(GNOMEDOCUTILS_LDFLAGS)
 					  
-libicons_la_CFLAGS = @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-			@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-			@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-			@GNOMEDOCUTILS_CFLAGS@
+libicons_la_CFLAGS = $(DBUSGLIB_CFLAGS) $(LIBNOTIFY_CFLAGS) \
+			$(SFLGTK_CFLAGS) $(SFLGLIB_CFLAGS) $(WEBKIT_CFLAGS) $(LIBEBOOK_CFLAGS) \
+			$(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(LIBGNOMEUI_CFLAGS) \
+			$(GNOMEDOCUTILS_CFLAGS)
diff --git a/sflphone-client-gnome/src/toolbar.c b/sflphone-client-gnome/src/toolbar.c
index 470bc43f4c7212fb0e511c72903194e65fc58dc0..5a1fbf189ced99ead5bca9bf48f0965421ce762a 100644
--- a/sflphone-client-gnome/src/toolbar.c
+++ b/sflphone-client-gnome/src/toolbar.c
@@ -87,125 +87,3 @@ call_button (GtkWidget *widget UNUSED, gpointer   data UNUSED)
         calltree_display (current_calls);
     }
 }
-
-
-
-/*
-GtkWidget *create_toolbar ()
-{
-    GtkWidget *ret;
-    GtkWidget *image;
-
-    ret = gtk_toolbar_new();
-    toolbar = ret;
-
-    gtk_toolbar_set_orientation(GTK_TOOLBAR(ret), GTK_ORIENTATION_HORIZONTAL);
-    gtk_toolbar_set_style(GTK_TOOLBAR(ret), GTK_TOOLBAR_ICONS);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/dial.svg");
-    callButton = gtk_tool_button_new (image, _("New call"));
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(callButton), _("New call"));
-#endif
-    g_signal_connect (G_OBJECT (callButton), "clicked",
-            G_CALLBACK (call_button), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(callButton), -1);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/accept.svg");
-    pickupButton = gtk_tool_button_new(image, _("Pick up"));
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(pickupButton), _("Pick up"));
-#endif
-    gtk_widget_set_state( GTK_WIDGET(pickupButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect(G_OBJECT (pickupButton), "clicked",
-            G_CALLBACK (call_button), NULL);
-    gtk_widget_show_all(GTK_WIDGET(pickupButton));
-
-    image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg");
-    hangupButton = gtk_tool_button_new (image, _("Hang up"));
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(hangupButton), _("Hang up"));
-#endif
-    gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect (G_OBJECT (hangupButton), "clicked",
-            G_CALLBACK (hang_up), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/unhold.svg");
-    unholdButton = gtk_tool_button_new (image, _("Hold off"));
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(unholdButton), _("Hold off"));
-#endif
-    gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect (G_OBJECT (unholdButton), "clicked",
-            G_CALLBACK (unhold), NULL);
-    //gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(unholdButton), -1);
-    gtk_widget_show_all(GTK_WIDGET(unholdButton));
-
-    image = gtk_image_new_from_file( ICONS_DIR "/hold.svg");
-    holdButton =  gtk_tool_button_new (image, _("Hold on"));
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(holdButton), _("Hold on"));
-#endif
-    gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect (G_OBJECT (holdButton), "clicked",
-            G_CALLBACK (hold), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(holdButton), -1);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/transfert.svg");
-    transfertButton = gtk_toggle_tool_button_new ();
-    gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(transfertButton), image);
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(transfertButton), _("Transfer"));
-#endif
-    gtk_tool_button_set_label(GTK_TOOL_BUTTON(transfertButton), _("Transfer"));
-    gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE);
-    transfertButtonConnId = g_signal_connect (G_OBJECT (transfertButton), "toggled",
-            G_CALLBACK (transfert), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/history2.svg");
-    historyButton = gtk_toggle_tool_button_new();
-    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (historyButton), image);
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(historyButton), _("History"));
-#endif
-    gtk_tool_button_set_label (GTK_TOOL_BUTTON (historyButton), _("History"));
-    g_signal_connect (G_OBJECT (historyButton), "toggled", G_CALLBACK (toggle_button_cb), history);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(historyButton), -1);
-    active_calltree = current_calls;
-
-    image = gtk_image_new_from_file( ICONS_DIR "/addressbook.svg");
-    contactButton = gtk_toggle_tool_button_new();
-    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (contactButton), image);
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(contactButton), _("Address book"));
-#endif
-    gtk_tool_button_set_label (GTK_TOOL_BUTTON (contactButton), _("Address book"));
-    gtk_widget_set_state( GTK_WIDGET(contactButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect (G_OBJECT (contactButton), "toggled", G_CALLBACK (toggle_button_cb), contacts);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(contactButton), -1);
-
-    image = gtk_image_new_from_file( ICONS_DIR "/mailbox.svg");
-    mailboxButton = gtk_tool_button_new( image , _("Voicemail"));
-    gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(mailboxButton), image);
-    if( account_list_get_size() ==0 ) gtk_widget_set_state( GTK_WIDGET(mailboxButton), GTK_STATE_INSENSITIVE );
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(mailboxButton), _("Voicemail"));
-#endif
-    g_signal_connect (G_OBJECT (mailboxButton), "clicked",
-            G_CALLBACK (call_mailbox), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(mailboxButton), -1);
-
-    recButton = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_RECORD);
-#if GTK_CHECK_VERSION(2,12,0)
-    gtk_widget_set_tooltip_text(GTK_WIDGET(recButton), _("Record"));
-#endif
-    gtk_widget_set_state( GTK_WIDGET(recButton), GTK_STATE_INSENSITIVE);
-    g_signal_connect (G_OBJECT (recButton), "clicked",
-            G_CALLBACK (rec_button), NULL);
-    gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(recButton), -1);
-
-    return ret;
-}
-*/
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 30f37ab51fdee31d6ce761e6c2c288ff08604de7..30cc13d50bbdc4857f9e6a4dff6493178ac83fc0 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -42,9 +42,13 @@
 #include <statusicon.h>
 #include <widget/imwidget.h>
 #include <eel-gconf-extensions.h>
+
+
 #include "uimanager.h"
 #include "statusicon.h"
-#include "contacts/addressbook.h"
+
+#include "contacts/addrbookfactory.h"
+
 #include "accountlist.h"
 #include "config/accountlistconfigdialog.h"
 
@@ -93,6 +97,7 @@ update_actions()
 
     DEBUG ("UIManager: Update action");
 
+
     gtk_action_set_sensitive (GTK_ACTION (newCallAction), TRUE);
     gtk_action_set_sensitive (GTK_ACTION (pickUpAction), FALSE);
     gtk_action_set_sensitive (GTK_ACTION (hangUpAction), FALSE);
@@ -102,12 +107,16 @@ update_actions()
     g_object_ref (recordWidget);
     g_object_ref (holdToolbar);
     g_object_ref (offHoldToolbar);
-    g_object_ref (contactButton);
+    if(abookfactory_is_addressbook_loaded()) {
+        g_object_ref (contactButton);
+    }
     g_object_ref (historyButton);
     g_object_ref (transferToolbar);
     g_object_ref (voicemailToolbar);
     g_object_ref (imToolbar);
 
+    DEBUG("OK1");
+
     if (is_inserted (GTK_WIDGET (hangUpWidget), GTK_WIDGET (toolbar))) {
         gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (hangUpWidget));
     }
@@ -125,8 +134,10 @@ update_actions()
         gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (historyButton));
     }
 
-    if (is_inserted (GTK_WIDGET (contactButton), GTK_WIDGET (toolbar))) {
-        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
+    if(abookfactory_is_addressbook_loaded()) {
+        if (is_inserted (GTK_WIDGET (contactButton), GTK_WIDGET (toolbar))) {
+            gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
+        }
     }
 
     if (is_inserted (GTK_WIDGET (voicemailToolbar), GTK_WIDGET (toolbar))) {
@@ -138,6 +149,8 @@ update_actions()
         gtk_container_remove (GTK_CONTAINER (toolbar),
                               GTK_WIDGET (imToolbar));
     }
+    
+    DEBUG("OK2");
 
     gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), FALSE);
     gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), FALSE);
@@ -145,10 +158,13 @@ update_actions()
     gtk_action_set_sensitive (GTK_ACTION (recordAction), FALSE);
     gtk_widget_set_sensitive (GTK_WIDGET (recordWidget), FALSE);
     gtk_action_set_sensitive (GTK_ACTION (copyAction), FALSE);
-    gtk_widget_set_sensitive (GTK_WIDGET (contactButton), FALSE);
+    if(abookfactory_is_addressbook_loaded()) { 
+        gtk_widget_set_sensitive (GTK_WIDGET (contactButton), FALSE);
+    }
     gtk_widget_set_sensitive (GTK_WIDGET (historyButton), FALSE);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),
-                                 _ ("No address book selected"));
+    if(abookfactory_is_addressbook_loaded()) {
+        gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),_("No address book selected"));
+    }
 
     if (is_inserted (GTK_WIDGET (holdToolbar), GTK_WIDGET (toolbar)))
         gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (holdToolbar));
@@ -170,19 +186,25 @@ update_actions()
         gtk_widget_set_sensitive (GTK_WIDGET (historyButton), TRUE);
     }
 
+    DEBUG("OK3");
+  
     // If addressbook support has been enabled and all addressbooks are loaded, display the icon
-    if (addressbook_is_enabled() && addressbook_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 (addressbook_is_active()) {
-            gtk_widget_set_sensitive (GTK_WIDGET (contactButton), TRUE);
-            gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),
-                                         _ ("Address book"));
+   
+    if(abookfactory_is_addressbook_loaded()) {
+        AddrBookFactory *bookFactory = abookfactory_get_factory();
+        
+        if (bookFactory->addrbook->is_enabled() && bookFactory->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()) {
+                gtk_widget_set_sensitive (GTK_WIDGET (contactButton), TRUE);
+                gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),_ ("Address book"));
+            }
         }
     }
 
+    DEBUG("OK4");
     // g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
     // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
     // g_signal_handler_unblock (GTK_OBJECT (recordWidget), recordButtonConnId);
@@ -191,6 +213,8 @@ update_actions()
     conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
 
     gboolean instant_messaging_enabled = TRUE;
+    
+    DEBUG("OK4");
 
     if (eel_gconf_key_exists (INSTANT_MESSAGING_ENABLED))
         instant_messaging_enabled = eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED);
@@ -330,7 +354,6 @@ update_actions()
 
             case CONFERENCE_STATE_ACTIVE_ATACHED:
             case CONFERENCE_STATE_ACTIVE_DETACHED:
-                DEBUG("---------------------------------------- CONFERENCE STATE active");
                 gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
                 gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
                 gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
@@ -344,7 +367,6 @@ update_actions()
                 break;
             case CONFERENCE_STATE_ACTIVE_ATTACHED_RECORD:
             case CONFERENCE_STATE_ACTIVE_DETACHED_RECORD:
-                DEBUG("---------------------------------------- CONFERENCE STATE record");
                 gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
                 gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
                 gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
@@ -358,7 +380,6 @@ update_actions()
                 break;
             case CONFERENCE_STATE_HOLD:
             case CONFERENCE_STATE_HOLD_RECORD:
-                DEBUG("---------------------------------------- CONFERENCE STATE hold");
                 gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
                 gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar), TRUE);
                 gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
@@ -387,6 +408,7 @@ update_actions()
             update_voicemail_status();
         }
     }
+    DEBUG("OK5");    
 }
 
 void
@@ -1002,6 +1024,9 @@ uimanager_new (GtkUIManager **_ui_manager)
     GtkWidget *window;
     gchar *path;
     GError *error = NULL;
+    gint nb_entries;
+
+    nb_entries = abookfactory_is_addressbook_loaded() ? 7 : 6;
 
     window = get_main_window();
     ui_manager = gtk_ui_manager_new();
@@ -1037,10 +1062,8 @@ uimanager_new (GtkUIManager **_ui_manager)
     action_group = gtk_action_group_new ("SFLphoneWindowActions");
     // To translate label and tooltip entries
     gtk_action_group_set_translation_domain (action_group, "sflphone-client-gnome");
-    gtk_action_group_add_actions (action_group, menu_entries,
-                                  G_N_ELEMENTS (menu_entries), window);
-    gtk_action_group_add_toggle_actions (action_group, toggle_menu_entries,
-                                         G_N_ELEMENTS (toggle_menu_entries), window);
+    gtk_action_group_add_actions (action_group, menu_entries, G_N_ELEMENTS (menu_entries), window);
+    gtk_action_group_add_toggle_actions (action_group, toggle_menu_entries, nb_entries, window);
     //gtk_action_group_add_radio_actions (action_group, radio_menu_entries, G_N_ELEMENTS (radio_menu_entries), CALLTREE_CALLS, G_CALLBACK (calltree_switch_cb), window);
     gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
 
@@ -1689,8 +1712,10 @@ create_toolbar_actions (GtkUIManager *ui_manager, GtkWidget **widget)
                                            "/ToolbarActions/InstantMessagingToolbar");
     historyButton = gtk_ui_manager_get_widget (ui_manager,
                     "/ToolbarActions/HistoryToolbar");
-    contactButton = gtk_ui_manager_get_widget (ui_manager,
-                    "/ToolbarActions/AddressbookToolbar");
+    if(abookfactory_is_addressbook_loaded()) {
+        contactButton = gtk_ui_manager_get_widget (ui_manager,
+                        "/ToolbarActions/AddressbookToolbar");
+    }
 
     // Set the handler ID for the transfer
     transfertButtonConnId
diff --git a/sflphone-client-gnome/src/widget/Makefile.am b/sflphone-client-gnome/src/widget/Makefile.am
index 86e945c1ba08ef646c7c246a671e58fbe1379fdf..9fd6d7d29074352351b4b4d66ef6fb0982a51c7b 100644
--- a/sflphone-client-gnome/src/widget/Makefile.am
+++ b/sflphone-client-gnome/src/widget/Makefile.am
@@ -7,17 +7,17 @@ libwidget_la_SOURCES = \
 		minidialog.c \
 		imwidget.c
 
-libwidget_la_LDFLAGS = @DBUSGLIB_LDFLAGS@ @LIBNOTIFY_LDFLAGS@ \
-			@SFLGTK_LDFLAGS@ @SFLGLIB_LDFLAGS@ @WEBKIT_LDFLAGS@ @LIBEBOOK_LDFLAGS@ \
-			@LIBEDATASERVER_LDFLAGS@ @LIBEDATASERVERUI_LDFLAGS@ @LIBGNOMEUI_LDFLAGS@ \
-			@GNOMEDOCUTILS_LDFLAGS@
+libwidget_la_LDFLAGS = $(DBUSGLIB_LDFLAGS) $(LIBNOTIFY_LDFLAGS) \
+			$(SFLGTK_LDFLAGS) $(SFLGLIB_LDFLAGS) $(WEBKIT_LDFLAGS) $(LIBEBOOK_LDFLAGS) \
+			$(LIBEDATASERVER_LDFLAGS) $(LIBEDATASERVERUI_LDFLAGS) $(LIBGNOMEUI_LDFLAGS) \
+			$(GNOMEDOCUTILS_LDFLAGS)
 
-libwidget_la_LIBADD = @DBUSGLIB_LIBS@ @LIBNOTIFY_LIBS@
-			@SFLGTK_LIBS@ @SFLGLIB_LIBS@ @WEBKIT_LIBS@ @LIBEBOOK_LIBS@ \
-			@LIBEDATASERVER_LIBS@ @LIBEDATASERVERUI_LIBS@ @LIBGNOMEUI_LIBS@ \
-			@GNOMEDOCUTILS_LIBS@
+libwidget_la_LIBADD = $(DBUSGLIB_LIBS) $(LIBNOTIFY_LIBS)
+			$(SFLGTK_LIBS) $(SFLGLIB_LIBS) $(WEBKIT_LIBS) $(LIBEBOOK_LIBS) \
+			$(LIBEDATASERVER_LIBS) $(LIBEDATASERVERUI_LIBS) $(LIBGNOMEUI_LIBS) \
+			$(GNOMEDOCUTILS_LIBS)
 					  
-libwidget_la_CFLAGS = @DBUSGLIB_CFLAGS@ @LIBNOTIFY_CFLAGS@ \
-			@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @WEBKIT_CFLAGS@ @LIBEBOOK_CFLAGS@ \
-			@LIBEDATASERVER_CFLAGS@ @LIBEDATASERVERUI_CFLAGS@ @LIBGNOMEUI_CFLAGS@ \
-			@GNOMEDOCUTILS_CFLAGS@
+libwidget_la_CFLAGS = $(DBUSGLIB_CFLAGS) $(LIBNOTIFY_CFLAGS) \
+			$(SFLGTK_CFLAGS) $(SFLGLIB_CFLAGS) $(WEBKIT_CFLAGS) $(LIBEBOOK_CFLAGS) \
+			$(LIBEDATASERVER_CFLAGS) $(LIBEDATASERVERUI_CFLAGS) $(LIBGNOMEUI_CFLAGS) \
+			$(GNOMEDOCUTILS_CFLAGS)