diff --git a/sflphone-gtk/src/config/addressbook-config.c b/sflphone-gtk/src/config/addressbook-config.c
index 7437396f1ad0dfaf85c9876877763f2fc428c6a4..29451d2b225f3d8464f5048b608854af69932832 100644
--- a/sflphone-gtk/src/config/addressbook-config.c
+++ b/sflphone-gtk/src/config/addressbook-config.c
@@ -18,159 +18,317 @@
  */
 
 #include "addressbook-config.h"
+#include <contacts/addressbook/eds.h>
 
 AddressBook_Config *addressbook_config;
+GtkWidget *book_tree_view;
 
-void addressbook_load_parameters (AddressBook_Config **settings) {
+enum
+{
+  COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME
+};
 
-    GHashTable *_params = NULL;
-    AddressBook_Config *_settings;
+void
+addressbook_config_load_parameters(AddressBook_Config **settings)
+{
 
-    // Allocate a struct
-    _settings = g_new0 (AddressBook_Config, 1);
+  GHashTable *_params = NULL;
+  AddressBook_Config *_settings;
 
-    // Fetch the settings from D-Bus
-    _params = (GHashTable*) dbus_get_addressbook_settings ();
+  // Allocate a struct
+  _settings = g_new0 (AddressBook_Config, 1);
 
-    if (_params == NULL) {
-        _settings->max_results = 30;
-        _settings->display_contact_photo = 0;
-        _settings->search_phone_business = 1;
-        _settings->search_phone_home = 1;
-        _settings->search_phone_mobile = 1;
+  // Fetch the settings from D-Bus
+  _params = (GHashTable*) dbus_get_addressbook_settings();
+
+  if (_params == NULL)
+    {
+      _settings->max_results = 30;
+      _settings->display_contact_photo = 0;
+      _settings->search_phone_business = 1;
+      _settings->search_phone_home = 1;
+      _settings->search_phone_mobile = 1;
     }
-    else {
-        _settings->max_results =  (guint)(g_hash_table_lookup (_params, ADDRESSBOOK_MAX_RESULTS));
-        _settings->display_contact_photo = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
-        _settings->search_phone_business = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
-        _settings->search_phone_home = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_HOME));
-        _settings->search_phone_mobile = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
+  else
+    {
+      _settings->max_results = (guint) (g_hash_table_lookup(_params,
+          ADDRESSBOOK_MAX_RESULTS));
+      _settings->display_contact_photo = (guint) (g_hash_table_lookup(_params,
+          ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
+      _settings->search_phone_business = (guint) (g_hash_table_lookup(_params,
+          ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
+      _settings->search_phone_home = (guint) (g_hash_table_lookup(_params,
+          ADDRESSBOOK_DISPLAY_PHONE_HOME));
+      _settings->search_phone_mobile = (guint) (g_hash_table_lookup(_params,
+          ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
     }
 
-    *settings = _settings;
+  *settings = _settings;
 }
 
-void addressbook_save_parameters (void) {
+void
+addressbook_config_save_parameters(void)
+{
 
-    GHashTable *params = NULL;
+  GHashTable *params = NULL;
 
-    params = g_hash_table_new (NULL, g_str_equal);
-    g_hash_table_replace (params, (gpointer)ADDRESSBOOK_MAX_RESULTS, (gpointer)addressbook_config->max_results);
-    g_hash_table_replace (params, (gpointer)ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, (gpointer)addressbook_config->display_contact_photo);
-    g_hash_table_replace (params, (gpointer)ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, (gpointer)addressbook_config->search_phone_business);
-    g_hash_table_replace (params, (gpointer)ADDRESSBOOK_DISPLAY_PHONE_HOME, (gpointer)addressbook_config->search_phone_home);
-    g_hash_table_replace (params, (gpointer)ADDRESSBOOK_DISPLAY_PHONE_MOBILE, (gpointer)addressbook_config->search_phone_mobile);
+  params = g_hash_table_new(NULL, g_str_equal);
+  g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS,
+      (gpointer) addressbook_config->max_results);
+  g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO,
+      (gpointer) addressbook_config->display_contact_photo);
+  g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS,
+      (gpointer) addressbook_config->search_phone_business);
+  g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME,
+      (gpointer) addressbook_config->search_phone_home);
+  g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE,
+      (gpointer) addressbook_config->search_phone_mobile);
 
-    dbus_set_addressbook_settings (params);
+  dbus_set_addressbook_settings(params);
 
-    // Decrement the reference count
-    g_hash_table_unref (params);
+  // Decrement the reference count
+  g_hash_table_unref(params);
 }
 
-static void max_results_cb (GtkRange* scale) {
+static void
+max_results_cb(GtkRange* scale)
+{
 
-    addressbook_config->max_results = (guint) gtk_range_get_value (GTK_RANGE (scale));
+  addressbook_config->max_results = (guint) gtk_range_get_value(GTK_RANGE (scale));
 }
 
-static void display_contact_photo_cb (GtkWidget *widget) {
+static void
+display_contact_photo_cb(GtkWidget *widget)
+{
 
-    addressbook_config->display_contact_photo = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+  addressbook_config->display_contact_photo
+      = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 }
 
-static void search_phone_business_cb (GtkWidget *widget) {
+static void
+search_phone_business_cb(GtkWidget *widget)
+{
 
-    addressbook_config->search_phone_business = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+  addressbook_config->search_phone_business
+      = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 }
 
-static void search_phone_home_cb (GtkWidget *widget) {
+static void
+search_phone_home_cb(GtkWidget *widget)
+{
 
-    addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+  addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active(
+      GTK_TOGGLE_BUTTON(widget));
 }
 
-static void search_phone_mobile_cb (GtkWidget *widget) {
+static void
+search_phone_mobile_cb(GtkWidget *widget)
+{
 
-    addressbook_config->search_phone_mobile = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+  addressbook_config->search_phone_mobile
+      = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 }
 
-GtkWidget* create_addressbook_settings () {
-
-    GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item;
-
-    // Load the user value
-    addressbook_load_parameters (&addressbook_config);
-
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-
-    result_frame = gtk_frame_new(_("Search Parameters"));
-    gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
-    gtk_widget_show (result_frame);
-
-    table = gtk_table_new ( 5, 3,  FALSE/* homogeneous */);
-    gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-    gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-    gtk_widget_show(table);
-    gtk_container_add( GTK_CONTAINER (result_frame) , table );
-
-    // SCALE BUTTON - NUMBER OF RESULTS
-    label = gtk_label_new (_("Maximum result number for a request: "));
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
-    value = gtk_hscale_new_with_range (25.0 , 50.0 , 5.0);
-    gtk_label_set_mnemonic_widget (GTK_LABEL (label), value);
-    gtk_scale_set_digits (GTK_SCALE(value) , 0);
-    gtk_scale_set_value_pos (GTK_SCALE(value) , GTK_POS_RIGHT);
-    gtk_range_set_value (GTK_RANGE( value ) , addressbook_config->max_results);
-    g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL );
-    gtk_table_attach ( GTK_TABLE( table ), value, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    // PHOTO DISPLAY
-    photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo);
-    g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), photo, 0, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    label = gtk_label_new (_("Search for and display: "));
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    item = gtk_check_button_new_with_mnemonic( _("_Business phone"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business);
-    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    item = gtk_check_button_new_with_mnemonic( _("_Home phone"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home);
-    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    item = gtk_check_button_new_with_mnemonic( _("_Mobile phone"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile);
-    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
-
-    gtk_widget_show_all(ret);
+/**
+ * Toggle active value of book on click and update changes to the deamon
+ * and in configuration files
+ */
+static void
+addressbook_config_book_active_toggled(
+    GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data)
+{
+  GtkTreeIter iter;
+  GtkTreePath *treePath;
+  GtkTreeModel *model;
+  gboolean active;
+  char* name;
+
+  // Get path of clicked book active toggle box
+  treePath = gtk_tree_path_new_from_string(path);
+  model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
+  gtk_tree_model_get_iter(model, &iter, treePath);
+
+  // Get active value and name at iteration
+  gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active,
+      COLUMN_BOOK_NAME, &name, -1);
+
+  // Toggle active value
+  active = !active;
+
+  // Store value
+  gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1);
+
+  gtk_tree_path_free(treePath);
+
+  printf("%s : %d\n", name, active);
+  printf("Not implemented !\n");
+}
 
-    return ret;
+static void
+addressbook_config_fill_book_list()
+{
+  GtkTreeIter list_store_iterator;
+  GSList *book_list_iterator;
+  GtkListStore *store;
+  EBook *book;
+  ESource *source;
+
+  // Get model of view and clear it
+  store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view)));
+  gtk_list_store_clear(store);
+
+  // Get list of books
+  GSList *books = get_books();
+
+  // Populate window
+  for (book_list_iterator = books; book_list_iterator != NULL; book_list_iterator
+      = book_list_iterator->next)
+    {
+      book = (EBook *) book_list_iterator->data;
+      source = e_book_get_source(book);
+      gtk_list_store_append(store, &list_store_iterator);
+      gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE, TRUE,
+      COLUMN_BOOK_NAME, e_source_peek_name(source), -1);
+    }
+}
 
+GtkWidget*
+create_addressbook_settings()
+{
+
+  GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item;
+
+  GtkListStore *store;
+  GtkCellRenderer *renderer;
+  GtkTreeSelection *tree_selection;
+  GtkTreeViewColumn *tree_view_column;
+  GtkWidget *scrolled_window, *hbox;
+
+  // Load the user value
+  addressbook_config_load_parameters(&addressbook_config);
+
+  ret = gtk_vbox_new(FALSE, 10);
+  gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+  result_frame = gtk_frame_new(_("General"));
+  gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
+  gtk_widget_show (result_frame);
+
+  table = gtk_table_new ( 5, 3, FALSE/* homogeneous */);
+  gtk_table_set_row_spacings( GTK_TABLE(table), 10);
+  gtk_table_set_col_spacings( GTK_TABLE(table), 10);
+  gtk_widget_show(table);
+  gtk_container_add( GTK_CONTAINER (result_frame) , table );
+
+  // SCALE BUTTON - NUMBER OF RESULTS
+      hbox = gtk_hbox_new(FALSE, 0);
+      label = gtk_label_new (_("Maximum results: "));
+      gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
+      value = gtk_hscale_new_with_range (25.0 , 50.0 , 5.0);
+      gtk_label_set_mnemonic_widget (GTK_LABEL (label), value);
+      gtk_scale_set_digits (GTK_SCALE(value) , 0);
+      gtk_scale_set_value_pos (GTK_SCALE(value) , GTK_POS_RIGHT);
+      gtk_range_set_value (GTK_RANGE( value ) , addressbook_config->max_results);
+      g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL );
+      gtk_box_pack_start(GTK_BOX(hbox),value,TRUE,TRUE,10);
+      gtk_table_attach ( GTK_TABLE( table ), hbox, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0);
+  gtk_widget_show_all(hbox);
+
+  // PHOTO DISPLAY
+  photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo);
+  g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL);
+  gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+  result_frame = gtk_frame_new(_("Fields"));
+  gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
+  gtk_widget_show (result_frame);
+
+  table = gtk_table_new ( 5, 3, FALSE);
+  gtk_table_set_row_spacings( GTK_TABLE(table), 10);
+  gtk_table_set_col_spacings( GTK_TABLE(table), 10);
+  gtk_widget_show(table);
+  gtk_container_add( GTK_CONTAINER (result_frame) , table );
+
+  item = gtk_check_button_new_with_mnemonic( _("_Business phone"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business);
+  g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL);
+  gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+  item = gtk_check_button_new_with_mnemonic( _("_Home phone"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home);
+  g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL);
+  gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+  item = gtk_check_button_new_with_mnemonic( _("_Mobile phone"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile);
+  g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL);
+  gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+  result_frame = gtk_frame_new(_("Books"));
+  gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0);
+  gtk_widget_show (result_frame);
+
+  scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+
+  gtk_container_add( GTK_CONTAINER (result_frame) , scrolled_window );
+
+  store = gtk_list_store_new(2,
+          G_TYPE_BOOLEAN,             // Active
+          G_TYPE_STRING              // Name
+          );
+
+  // Create tree view with list store
+  book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+
+  // Get tree selection manager
+  tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view));
+
+  // Active column
+  renderer = gtk_cell_renderer_toggle_new();
+  tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL);
+  gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column);
+
+  // Toggle active property on clicked
+  g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view);
+
+  // Name column
+  renderer = gtk_cell_renderer_text_new();
+  tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL);
+  gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column);
+
+  g_object_unref(G_OBJECT(store));
+  gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view);
+
+  addressbook_config_fill_book_list();
+
+  gtk_widget_show_all(ret);
+
+  return ret;
 }
 
-gboolean addressbook_display (AddressBook_Config *settings, const gchar *field) {
+gboolean
+addressbook_display(AddressBook_Config *settings, const gchar *field)
+{
 
-    gboolean display = FALSE;
+  gboolean display = FALSE;
 
-    if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0)
-        display = (settings->display_contact_photo == 1)? TRUE : FALSE;
+  if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0)
+    display = (settings->display_contact_photo == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0)
-        display = (settings->search_phone_business == 1)? TRUE : FALSE;
+  else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0)
+    display = (settings->search_phone_business == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0)
-        display = (settings->search_phone_home == 1)? TRUE : FALSE;
+  else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0)
+    display = (settings->search_phone_home == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0)
-        display = (settings->search_phone_mobile == 1)? TRUE : FALSE;
+  else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0)
+    display = (settings->search_phone_mobile == 1) ? TRUE : FALSE;
 
-    else
-        display = FALSE;
+  else
+    display = FALSE;
 
-    return display;
+  return display;
 }
diff --git a/sflphone-gtk/src/config/addressbook-config.h b/sflphone-gtk/src/config/addressbook-config.h
index 7e6e7438e5c8643f4185c4b3124ce6898d949fe8..ec7a8d16360e56090421b60120bcd26cd63221b7 100644
--- a/sflphone-gtk/src/config/addressbook-config.h
+++ b/sflphone-gtk/src/config/addressbook-config.h
@@ -33,29 +33,34 @@ G_BEGIN_DECLS
 #define ADDRESSBOOK_DISPLAY_PHONE_HOME       "ADDRESSBOOK_DISPLAY_PHONE_HOME"
 #define ADDRESSBOOK_DISPLAY_PHONE_MOBILE     "ADDRESSBOOK_DISPLAY_PHONE_MOBILE"
 
-typedef struct _AddressBook_Config {
-    guint max_results;
-    guint display_contact_photo;
-    guint search_phone_home;
-    guint search_phone_business;
-    guint search_phone_mobile;
+typedef struct _AddressBook_Config
+{
+  guint max_results;
+  guint display_contact_photo;
+  guint search_phone_home;
+  guint search_phone_business;
+  guint search_phone_mobile;
 } AddressBook_Config;
 
 /**
  * Save the parameters through D-BUS
  */
-void addressbook_save_parameters (void);
+void
+addressbook_config_save_parameters(void);
 
 /**
  * Initialize the address book structure, and retrieve the saved parameters through D-Bus
  *
  * @param settings  The addressbook structure
  */
-void addressbook_load_parameters (AddressBook_Config **settings);
+void
+addressbook_config_load_parameters(AddressBook_Config **settings);
 
-gboolean addressbook_display (AddressBook_Config *settings, const gchar *field);
+gboolean
+addressbook_display(AddressBook_Config *settings, const gchar *field);
 
-GtkWidget* create_addressbook_settings ();
+GtkWidget*
+create_addressbook_settings();
 
 G_END_DECLS
 
diff --git a/sflphone-gtk/src/config/configwindow.c b/sflphone-gtk/src/config/configwindow.c
index 222816c9cee858e38aa614251778153da643fc82..87dfc907fa3f299f4a1d9743a62b16d9beecf91a 100644
--- a/sflphone-gtk/src/config/configwindow.c
+++ b/sflphone-gtk/src/config/configwindow.c
@@ -862,7 +862,7 @@ void config_window_set_stun_visible()
 
 void save_configuration_parameters (void) {
 
-    addressbook_save_parameters ();
+    addressbook_config_save_parameters ();
     hooks_save_parameters ();
 
 }
diff --git a/sflphone-gtk/src/contacts/addressbook.c b/sflphone-gtk/src/contacts/addressbook.c
index 5dddf09f9bda76ebaa01089d38821f947dd3feba..083d7ade72bb053b47ec98cd988782c7d62243e8 100644
--- a/sflphone-gtk/src/contacts/addressbook.c
+++ b/sflphone-gtk/src/contacts/addressbook.c
@@ -21,10 +21,12 @@
 #include <searchbar.h>
 #include <addressbook-config.h>
 
-static void handler_async_search (GList *, gpointer);
+static void
+handler_async_search(GList *, gpointer);
 
 void
-addressbook_search(GtkEntry* entry){
+addressbook_search(GtkEntry* entry)
+{
 
   AddressBook_Config *addressbook_config;
 
@@ -32,60 +34,71 @@ addressbook_search(GtkEntry* entry){
   activateWaitingLayer();
 
   // Load the address book parameters
-  addressbook_load_parameters (&addressbook_config);
+  addressbook_config_load_parameters(&addressbook_config);
 
   // Start the asynchronous search as soon as we have an entry */
-  search_async (gtk_entry_get_text (GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config);
+  search_async(gtk_entry_get_text(GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search,
+      addressbook_config);
 }
 
 void
-addressbook_init(){
+addressbook_init()
+{
   init();
 }
 
-static void handler_async_search (GList *hits, gpointer user_data) {
+static void
+handler_async_search(GList *hits, gpointer user_data)
+{
 
-    GList *i;
-    GdkPixbuf *photo = NULL;
-    AddressBook_Config *addressbook_config;
-    call_t *j;
+  GList *i;
+  GdkPixbuf *photo = NULL;
+  AddressBook_Config *addressbook_config;
+  call_t *j;
 
-    // freeing calls
-    while((j = (call_t *)g_queue_pop_tail (contacts->callQueue)) != NULL)
+  // freeing calls
+  while ((j = (call_t *) g_queue_pop_tail(contacts->callQueue)) != NULL)
     {
-        free_call_t(j);
+      free_call_t(j);
     }
 
-    // Retrieve the address book parameters
-    addressbook_config = (AddressBook_Config*) user_data;
+  // Retrieve the address book parameters
+  addressbook_config = (AddressBook_Config*) user_data;
 
-    // reset previous results
-    calltree_reset(contacts);
-    calllist_reset(contacts);
+  // reset previous results
+  calltree_reset(contacts);
+  calllist_reset(contacts);
 
-    for (i = hits; i != NULL; i = i->next)
+  for (i = hits; i != NULL; i = i->next)
     {
-        Hit *entry;
-        entry = i->data;
-        if (entry)
+      Hit *entry;
+      entry = i->data;
+      if (entry)
         {
-            /* 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 information */
-            if (addressbook_display (addressbook_config, ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
-                calllist_add_contact (entry->name, entry->phone_mobile, CONTACT_PHONE_MOBILE, photo);
+          /* 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 information */
+          if (addressbook_display(addressbook_config,
+              ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
+            calllist_add_contact(entry->name, entry->phone_mobile,
+                CONTACT_PHONE_MOBILE, photo);
         }
-        free_hit(entry);
+      free_hit(entry);
     }
-    g_list_free(hits);
+  g_list_free(hits);
 
-    // Deactivate waiting image
-    deactivateWaitingLayer();
+  // Deactivate waiting image
+  deactivateWaitingLayer();
 }
diff --git a/sflphone-gtk/src/contacts/addressbook/eds.c b/sflphone-gtk/src/contacts/addressbook/eds.c
index b2a6d4c9e445c16a5158214b44a008bb03016ac0..7552640abd00ca1985a743db97fb0a9840bcd98f 100644
--- a/sflphone-gtk/src/contacts/addressbook/eds.c
+++ b/sflphone-gtk/src/contacts/addressbook/eds.c
@@ -30,211 +30,248 @@
 #include <pango/pango.h>
 #include "eds.h"
 
-typedef struct _Handler_And_Data {
-    int                 search_id;
-    SearchAsyncHandler  handler;
-    gpointer            user_data;
-    GList              *hits;
-    int                 max_results_remaining;
-    int                 book_views_remaining;
+typedef struct _Handler_And_Data
+{
+  int search_id;
+  SearchAsyncHandler handler;
+  gpointer user_data;
+  GList *hits;
+  int max_results_remaining;
+  int book_views_remaining;
 } Handler_And_Data;
 
 static GSList *books = NULL;
 static int pixbuf_size = 32;
 
-static EContactField search_fields[] = { E_CONTACT_FULL_NAME, E_CONTACT_PHONE_BUSINESS, E_CONTACT_NICKNAME, 0 };
+static EContactField search_fields[] =
+  { E_CONTACT_FULL_NAME, E_CONTACT_PHONE_BUSINESS, E_CONTACT_NICKNAME, 0 };
 static int n_search_fields = G_N_ELEMENTS (search_fields) - 1;
 
-    void
-free_hit (Hit *h)
+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);
+  g_free(h->name);
+  g_free(h->phone_business);
+  g_free(h->phone_home);
+  g_free(h->phone_mobile);
+  g_free(h);
 }
 
 /**
  * Split a string of tokens separated by whitespace into an array of tokens.
  */
-    static GArray *
-split_query_string (const gchar *str)
+static GArray *
+split_query_string(const gchar *str)
 {
-    GArray *parts = g_array_sized_new (FALSE, FALSE, sizeof (char *), 2);
-    PangoLogAttr *attrs;
-    guint str_len = strlen (str), word_start = 0, i;
-
-    attrs = g_new0 (PangoLogAttr, str_len + 1);
-    /* TODO: do we need to specify a particular language or is NULL ok? */
-    pango_get_log_attrs (str, -1, -1, NULL, attrs, str_len + 1);
-
-    for (i = 0; i < str_len + 1; i++) {
-        char *start_word, *end_word, *word;
-        if (attrs[i].is_word_end) {
-            start_word = g_utf8_offset_to_pointer (str, word_start);
-            end_word = g_utf8_offset_to_pointer (str, i);
-            word  = g_strndup (start_word, end_word - start_word);
-            g_array_append_val (parts, word);
+  GArray *parts = g_array_sized_new(FALSE, FALSE, sizeof (char *), 2);
+  PangoLogAttr *attrs;
+  guint str_len = strlen (str), word_start = 0, i;
+
+  attrs = g_new0 (PangoLogAttr, str_len + 1);
+  /* TODO: do we need to specify a particular language or is NULL ok? */
+  pango_get_log_attrs (str, -1, -1, NULL, attrs, str_len + 1);
+
+  for (i = 0; i < str_len + 1; i++)
+    {
+      char *start_word, *end_word, *word;
+      if (attrs[i].is_word_end)
+        {
+          start_word = g_utf8_offset_to_pointer (str, word_start);
+          end_word = g_utf8_offset_to_pointer (str, i);
+          word = g_strndup (start_word, end_word - start_word);
+          g_array_append_val (parts, word);
         }
-        if (attrs[i].is_word_start) {
-            word_start = i;
+      if (attrs[i].is_word_start)
+        {
+          word_start = i;
         }
     }
-    g_free (attrs);
-    return parts;
+  g_free (attrs);
+  return parts;
 }
 
-/**
- * Create a query which looks for the specified string in a contact's full name, email addresses and
- * nick name.
- */
-    static EBookQuery*
-create_query (const char* s)
+  /**
+   * Create a query which looks for the specified string in a contact's full name, email addresses and
+   * nick name.
+   */
+static EBookQuery*
+create_query(const char* s)
 {
-    EBookQuery *query;
-    GArray *parts = split_query_string (s);
-    EBookQuery ***field_queries;
-    EBookQuery **q;
-    EBookQuery **phone;
-    guint j;
-    int i;
-
-    q = g_new0 (EBookQuery *, n_search_fields);
-    field_queries = g_new0 (EBookQuery **, n_search_fields);
-
-    for (i = 0; i < n_search_fields; i++) {
-        field_queries[i] = g_new0 (EBookQuery *, parts->len);
-        for (j = 0; j < parts->len; j++) {
-            field_queries[i][j] = e_book_query_field_test (search_fields[i], E_BOOK_QUERY_CONTAINS, g_array_index (parts, gchar *, j));
+  EBookQuery *query;
+  GArray *parts = split_query_string(s);
+  EBookQuery ***field_queries;
+  EBookQuery **q;
+  EBookQuery **phone;
+  guint j;
+  int i;
+
+  q = g_new0 (EBookQuery *, n_search_fields);
+  field_queries = g_new0 (EBookQuery **, n_search_fields);
+
+  for (i = 0; i < n_search_fields; i++)
+    {
+      field_queries[i] = g_new0 (EBookQuery *, parts->len);
+      for (j = 0; j < parts->len; j++)
+        {
+          field_queries[i][j] = e_book_query_field_test(search_fields[i],
+              E_BOOK_QUERY_CONTAINS, g_array_index (parts, gchar *, j));
         }
-        q[i] = e_book_query_and (parts->len, field_queries[i], TRUE);
+      q[i] = e_book_query_and(parts->len, field_queries[i], TRUE);
     }
-    g_array_free (parts, TRUE);
+  g_array_free(parts, TRUE);
 
-    phone = g_new0 (EBookQuery *, 3);
-    phone[0] = e_book_query_field_exists (E_CONTACT_PHONE_BUSINESS);
-    phone[1] = e_book_query_field_exists (E_CONTACT_PHONE_HOME);
-    phone[2] = e_book_query_field_exists (E_CONTACT_PHONE_MOBILE);
+  phone = g_new0 (EBookQuery *, 3);
+  phone[0] = e_book_query_field_exists(E_CONTACT_PHONE_BUSINESS);
+  phone[1] = e_book_query_field_exists(E_CONTACT_PHONE_HOME);
+  phone[2] = e_book_query_field_exists(E_CONTACT_PHONE_MOBILE);
 
-    query = e_book_query_andv (e_book_query_or (n_search_fields, q, FALSE), e_book_query_or (3, phone, FALSE), NULL);
+  query = e_book_query_andv(e_book_query_or(n_search_fields, q, FALSE),
+      e_book_query_or(3, phone, FALSE), NULL);
 
-    for (i = 0; i < n_search_fields; i++) {
-        g_free (field_queries[i]);
+  for (i = 0; i < n_search_fields; i++)
+    {
+      g_free(field_queries[i]);
     }
-    g_free (field_queries);
-    g_free (q);
-    g_free (phone);
+  g_free(field_queries);
+  g_free(q);
+  g_free(phone);
 
-    return query;
+  return query;
 }
 
 static GdkPixbuf*
-pixbuf_from_contact (EContact *contact)
+pixbuf_from_contact(EContact *contact)
 {
-    GdkPixbuf *pixbuf = NULL;
-    EContactPhoto *photo = e_contact_get (contact, E_CONTACT_PHOTO);
-    if (photo) {
-        GdkPixbufLoader *loader;
 
-        loader = gdk_pixbuf_loader_new ();
+  GdkPixbuf *pixbuf = NULL;
+  EContactPhoto *photo = e_contact_get(contact, E_CONTACT_PHOTO);
+  if (photo)
+    {
+      GdkPixbufLoader *loader;
+
+      loader = gdk_pixbuf_loader_new();
 
-        if (photo->type == E_CONTACT_PHOTO_TYPE_INLINED) {
-            if (gdk_pixbuf_loader_write (loader, (guchar *) photo->data.inlined.data, photo->data.inlined.length, NULL))
-                pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+      if (photo->type == E_CONTACT_PHOTO_TYPE_INLINED)
+        {
+          if (gdk_pixbuf_loader_write(loader,
+              (guchar *) photo->data.inlined.data, photo->data.inlined.length,
+              NULL))
+            pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
         }
 
-        if (pixbuf) {
-            GdkPixbuf *tmp;
-            gint width = gdk_pixbuf_get_width (pixbuf);
-            gint height = gdk_pixbuf_get_height (pixbuf);
-            double scale = 1.0;
+      if (pixbuf)
+        {
+          GdkPixbuf *tmp;
+          gint width = gdk_pixbuf_get_width(pixbuf);
+          gint height = gdk_pixbuf_get_height(pixbuf);
+          double scale = 1.0;
 
-            if (height > width) {
-                scale = pixbuf_size / (double) height;
-            } else {
-                scale = pixbuf_size / (double) width;
+          if (height > width)
+            {
+              scale = pixbuf_size / (double) height;
+            }
+          else
+            {
+              scale = pixbuf_size / (double) width;
             }
 
-            if (scale < 1.0) {
-                tmp = gdk_pixbuf_scale_simple (pixbuf, width * scale, height * scale, GDK_INTERP_BILINEAR);
-                g_object_unref (pixbuf);
-                pixbuf = tmp;
+          if (scale < 1.0)
+            {
+              tmp = gdk_pixbuf_scale_simple(pixbuf, width * scale, height
+                  * scale, GDK_INTERP_BILINEAR);
+              g_object_unref(pixbuf);
+              pixbuf = tmp;
             }
         }
-        e_contact_photo_free (photo);
+      e_contact_photo_free(photo);
     }
-    return pixbuf;
+  return pixbuf;
 }
 
 /**
  * Initialize address book
  */
-    void
-init (void)
+void
+init(void)
 {
-    GSList *list, *l;
-    ESourceList *source_list;
-    source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources");
+  GSList *list, *l;
+  ESourceList *source_list;
+  source_list = e_source_list_new_for_gconf_default(
+      "/apps/evolution/addressbook/sources");
 
-    if (source_list == NULL) {
-        return;
+  if (source_list == NULL)
+    {
+      return;
     }
-    list = e_source_list_peek_groups (source_list);
-
-    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) {
-            ESource *source = m->data;
-            EBook *book = e_book_new (source, NULL);
-            if (book != NULL) {
-                books = g_slist_prepend (books, book);
-                e_book_open(book, TRUE, NULL);
+  list = e_source_list_peek_groups(source_list);
+
+  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)
+        {
+          ESource *source = m->data;
+          //printf("%s\n",e_source_peek_name(source));
+          //printf("%s\n",e_source_get_property (source, "limit"));
+          //printf("%s\n",e_source_get_property (source, "timeout"));
+          //printf("end\n");
+          EBook *book = e_book_new(source, NULL);
+          if (book != NULL)
+            {
+              books = g_slist_prepend(books, book);
+              e_book_open(book, TRUE, NULL);
             }
         }
     }
 
-    current_search_id = 0;
+  current_search_id = 0;
+
+  g_object_unref (source_list);
+  get_books();
+}
 
-    g_object_unref (source_list);
+GSList*
+get_books(void)
+{
+  return books;
 }
 
 /**
  * Final callback after all books have been processed.
  */
-    static void
-view_finish (EBookView *book_view, Handler_And_Data *had)
+static void
+view_finish(EBookView *book_view, Handler_And_Data *had)
 {
-    GList *i;
-    SearchAsyncHandler had_handler = had->handler;
-    GList *had_hits = had->hits;
-    gpointer had_user_data = had->user_data;
-    int search_id = had->search_id;
-    g_free (had);
+  GList *i;
+  SearchAsyncHandler had_handler = had->handler;
+  GList *had_hits = had->hits;
+  gpointer had_user_data = had->user_data;
+  int search_id = had->search_id;
+  g_free(had);
 
-    g_return_if_fail (book_view != NULL);
-    g_object_unref (book_view);
+  g_return_if_fail (book_view != NULL);
+  g_object_unref(book_view);
 
-    if(search_id == current_search_id)
+  if (search_id == current_search_id)
     {
       // Reinitialize search id to prevent overflow
-      if(current_search_id > 5000)
+      if (current_search_id > 5000)
         current_search_id = 0;
 
       // Call display callback
-      had_handler (had_hits, had_user_data);
+      had_handler(had_hits, had_user_data);
     }
-    else
+  else
     {
       // Some hits could have been processed but will not be used
       for (i = had_hits; i != NULL; i = i->next)
-      {
+        {
           Hit *entry;
           entry = i->data;
           free_hit(entry);
-      }
+        }
       g_list_free(had_hits);
     }
 }
@@ -243,64 +280,71 @@ view_finish (EBookView *book_view, Handler_And_Data *had)
  * Callback called after each ebook search completed.
  * Used to store book search results.
  */
-    static void
-view_contacts_added_cb (EBookView *book_view, GList *contacts, gpointer user_data)
+static void
+view_contacts_added_cb(EBookView *book_view, GList *contacts,
+    gpointer user_data)
 {
-    GdkPixbuf *photo;
+  GdkPixbuf *photo;
 
-    Handler_And_Data *had = (Handler_And_Data *) user_data;
+  Handler_And_Data *had = (Handler_And_Data *) user_data;
 
-    if(had->search_id != current_search_id)
+  if (had->search_id != current_search_id)
     {
-      e_book_view_stop (book_view);
+      e_book_view_stop(book_view);
       return;
     }
 
-    if (had->max_results_remaining <= 0) {
-        e_book_view_stop (book_view);
-        had->book_views_remaining--;
-        if (had->book_views_remaining == 0) {
-            view_finish (book_view, had);
-            return;
+  if (had->max_results_remaining <= 0)
+    {
+      e_book_view_stop(book_view);
+      had->book_views_remaining--;
+      if (had->book_views_remaining == 0)
+        {
+          view_finish(book_view, had);
+          return;
         }
     }
-    for (; contacts != NULL; contacts = g_list_next (contacts)) {
-        EContact *contact;
-        Hit *hit;
-        gchar *number;
-
-        contact = E_CONTACT (contacts->data);
-        hit = g_new (Hit, 1);
-
-        /* Get the photo contact */
-        photo = pixbuf_from_contact (contact);
-        hit->photo = photo;
-
-        /* Get business phone information */
-        fetch_information_from_contact (contact, E_CONTACT_PHONE_BUSINESS, &number);
-        hit->phone_business = g_strdup (number);
-
-        /* Get home phone information */
-        fetch_information_from_contact (contact, E_CONTACT_PHONE_HOME, &number);
-        hit->phone_home = g_strdup (number);
-
-        /* Get mobile phone information */
-        fetch_information_from_contact (contact, E_CONTACT_PHONE_MOBILE, &number);
-        hit->phone_mobile = g_strdup (number);
-
-        hit->name = g_strdup ((char*) e_contact_get_const (contact, E_CONTACT_NAME_OR_ORG));
-        if(! hit->name)
-            hit->name = "";
-
-        had->hits = g_list_append (had->hits, hit);
-        had->max_results_remaining--;
-        if (had->max_results_remaining <= 0) {
-            e_book_view_stop (book_view);
-            had->book_views_remaining--;
-            if (had->book_views_remaining == 0) {
-                view_finish (book_view, had);
+  for (; contacts != NULL; contacts = g_list_next (contacts))
+    {
+      EContact *contact;
+      Hit *hit;
+      gchar *number;
+
+      contact = E_CONTACT (contacts->data);
+      hit = g_new (Hit, 1);
+
+      /* Get the photo contact */
+      photo = pixbuf_from_contact(contact);
+      hit->photo = photo;
+
+      /* Get business phone information */
+      fetch_information_from_contact(contact, E_CONTACT_PHONE_BUSINESS, &number);
+      hit->phone_business = g_strdup(number);
+
+      /* Get home phone information */
+      fetch_information_from_contact(contact, E_CONTACT_PHONE_HOME, &number);
+      hit->phone_home = g_strdup(number);
+
+      /* Get mobile phone information */
+      fetch_information_from_contact(contact, E_CONTACT_PHONE_MOBILE, &number);
+      hit->phone_mobile = g_strdup(number);
+
+      hit->name = g_strdup((char*) e_contact_get_const(contact,
+          E_CONTACT_NAME_OR_ORG));
+      if (!hit->name)
+        hit->name = "";
+
+      had->hits = g_list_append(had->hits, hit);
+      had->max_results_remaining--;
+      if (had->max_results_remaining <= 0)
+        {
+          e_book_view_stop(book_view);
+          had->book_views_remaining--;
+          if (had->book_views_remaining == 0)
+            {
+              view_finish(book_view, had);
             }
-            break;
+          break;
         }
     }
 }
@@ -309,28 +353,27 @@ view_contacts_added_cb (EBookView *book_view, GList *contacts, gpointer user_dat
  * Callback called after each ebook search completed.
  * Used to call final callback when all books have been read.
  */
-    static void
-view_completed_cb (EBookView *book_view, EBookViewStatus status, gpointer user_data)
+static void
+view_completed_cb(EBookView *book_view, EBookViewStatus status,
+    gpointer user_data)
 {
-    Handler_And_Data *had = (Handler_And_Data *) user_data;
-    had->book_views_remaining--;
-    if (had->book_views_remaining == 0) {
-        view_finish (book_view, had);
+  Handler_And_Data *had = (Handler_And_Data *) user_data;
+  had->book_views_remaining--;
+  if (had->book_views_remaining == 0)
+    {
+      view_finish(book_view, had);
     }
 }
 
-
-    void
-search_async (const char         *query,
-        int                 max_results,
-        SearchAsyncHandler  handler,
-        gpointer            user_data)
+void
+search_async(const char *query, int max_results, SearchAsyncHandler handler,
+    gpointer user_data)
 {
-    // Increment search id
-    current_search_id++;
+  // Increment search id
+  current_search_id++;
 
-    // If query is null
-    if(strlen(query) < 1)
+  // If query is null
+  if (strlen(query) < 1)
     {
       // If data displayed (from previous search), directly call callback
       handler(NULL, user_data);
@@ -338,42 +381,50 @@ search_async (const char         *query,
       return;
     }
 
-    GSList *iter;
-    EBookQuery* book_query = create_query (query);
-    Handler_And_Data *had = g_new (Handler_And_Data, 1);
-
-    had->search_id = current_search_id;
-    had->handler = handler;
-    had->user_data = user_data;
-    had->hits = NULL;
-    had->max_results_remaining = max_results;
-    had->book_views_remaining = 0;
-    for (iter = books; iter != NULL; iter = iter->next) {
-        EBook *book = (EBook *) iter->data;
-        EBookView *book_view = NULL;
-        e_book_get_book_view (book, book_query, NULL, max_results, &book_view, NULL);
-        if (book_view != NULL) {
-            had->book_views_remaining++;
-            g_signal_connect (book_view, "contacts_added", (GCallback) view_contacts_added_cb, had);
-            g_signal_connect (book_view, "sequence_complete", (GCallback) view_completed_cb, had);
-            e_book_view_start (book_view);
+  GSList *iter;
+  EBookQuery* book_query = create_query(query);
+  Handler_And_Data *had = g_new (Handler_And_Data, 1);
+
+  had->search_id = current_search_id;
+  had->handler = handler;
+  had->user_data = user_data;
+  had->hits = NULL;
+  had->max_results_remaining = max_results;
+  had->book_views_remaining = 0;
+  for (iter = books; iter != NULL; iter = iter->next)
+    {
+      EBook *book = (EBook *) iter->data;
+      EBookView *book_view = NULL;
+      e_book_get_book_view(book, book_query, NULL, max_results, &book_view,
+          NULL);
+      if (book_view != NULL)
+        {
+          had->book_views_remaining++;
+          g_signal_connect (book_view, "contacts_added", (GCallback) view_contacts_added_cb, had);
+          g_signal_connect (book_view, "sequence_complete", (GCallback) view_completed_cb, had);
+          e_book_view_start(book_view);
         }
     }
-    if (had->book_views_remaining == 0) {
-        g_free (had);
+  if (had->book_views_remaining == 0)
+    {
+      g_free(had);
     }
 
-    e_book_query_unref (book_query);
+  e_book_query_unref(book_query);
 }
 
-void fetch_information_from_contact (EContact *contact, EContactField field, gchar **info){
+void
+fetch_information_from_contact(EContact *contact, EContactField field,
+    gchar **info)
+{
 
-    gchar *to_fetch;
+  gchar *to_fetch;
 
-    to_fetch = g_strdup ((char*) e_contact_get_const (contact, field));
-    if(! to_fetch) {
-        to_fetch = g_strdup (EMPTY_ENTRY);
+  to_fetch = g_strdup((char*) e_contact_get_const(contact, field));
+  if (!to_fetch)
+    {
+      to_fetch = g_strdup(EMPTY_ENTRY);
     }
 
-    *info = g_strdup (to_fetch);
+  *info = g_strdup(to_fetch);
 }
diff --git a/sflphone-gtk/src/contacts/addressbook/eds.h b/sflphone-gtk/src/contacts/addressbook/eds.h
index 64d464e04f70c044111d2ba898e37993a5f5da2f..be5c3d9a421054a62bce06815ab98eb31d047a99 100644
--- a/sflphone-gtk/src/contacts/addressbook/eds.h
+++ b/sflphone-gtk/src/contacts/addressbook/eds.h
@@ -42,41 +42,48 @@ int current_search_id;
  */
 typedef struct _Hit
 {
-    gchar *name;
-    GdkPixbuf *photo;
-    gchar *phone_business;
-    gchar *phone_home;
-    gchar *phone_mobile;
+  gchar *name;
+  GdkPixbuf *photo;
+  gchar *phone_business;
+  gchar *phone_home;
+  gchar *phone_mobile;
 } Hit;
 
 /**
  * Free a contact entry
  */
-void free_hit (Hit *h);
+void
+free_hit(Hit *h);
 
 /**
  * Template callback function for the asynchronous search
  */
-typedef void (* SearchAsyncHandler) (GList *hits, gpointer user_data);
+typedef void
+(* SearchAsyncHandler)(GList *hits, gpointer user_data);
 
 /**
  * Initialize the address book.
  * Connection to evolution data server
  */
-void init (void);
+void
+init(void);
 
 /**
  * Asynchronous search function
  */
-void search_async (const char         *query,
-                   int                 max_results,
-                   SearchAsyncHandler  handler,
-                   gpointer            user_data);
+void
+search_async(const char *query, int max_results, SearchAsyncHandler handler,
+    gpointer user_data);
 
 /**
  * Retrieve the specified information from the contact
  */
-void fetch_information_from_contact (EContact *contact, EContactField field, gchar **info);
+void
+fetch_information_from_contact(EContact *contact, EContactField field,
+    gchar **info);
+
+GSList*
+get_books(void);
 
 G_END_DECLS