diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
index 91e4d140a960e318eb9f5447ecc19110585951e8..b343f52071a49f44d1b7bf6ddc2f31bf6bbe8d2a 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.c
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -25,7 +25,7 @@
 GtkWidget*
 create_shortcuts_settings()
 {
-  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *table;
+  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
   GtkListStore *store;
   GtkTreeIter iter;
   guint i = 0;
@@ -35,6 +35,8 @@ create_shortcuts_settings()
 
   gnome_main_section_new(_("General"), &result_frame);
 
+  label = gtk_label_new(_("Be careful: these shortcuts might override system-wide shortcuts."));
+
   treeview = gtk_tree_view_new();
   setup_tree_view(treeview);
 
@@ -45,7 +47,7 @@ create_shortcuts_settings()
   while (list[i].action != NULL)
     {
       gtk_list_store_append(store, &iter);
-      gtk_list_store_set(store, &iter, ACTION, list[i].action, MASK,
+      gtk_list_store_set(store, &iter, ACTION, _(list[i].action), MASK,
           (gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
               list[i].value, 0), -1);
       i++;
@@ -55,6 +57,7 @@ create_shortcuts_settings()
   g_object_unref(store);
 
   gtk_container_add(GTK_CONTAINER (result_frame), treeview);
+  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
   gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
 
   gtk_widget_show_all(vbox);
@@ -85,12 +88,15 @@ setup_tree_view(GtkWidget *treeview)
 
   gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
   g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
+  g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
 }
 
 static void
 accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
     GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
 {
+  DEBUG("Accel edited");
+
   GtkTreeModel *model;
   GtkTreeIter iter;
 
@@ -105,3 +111,20 @@ accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
   // Update GDK bindings
   shortcuts_update_bindings(atoi(path), code);
 }
+
+static void
+accel_cleared(GtkCellRendererAccel *renderer, gchar *path, GtkTreeView *treeview)
+{
+  DEBUG("Accel cleared");
+
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  // Update treeview
+  model = gtk_tree_view_get_model(treeview);
+  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
+    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
+
+  // Update GDK bindings
+  shortcuts_update_bindings(atoi(path), 0);
+}
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.h b/sflphone-client-gnome/src/config/shortcuts-config.h
index 61306699f01de1b9133df02f6ba09aeb2c90bbf3..b7edf5c5499eb2caffc6821495bafa06a3b7edbf 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.h
+++ b/sflphone-client-gnome/src/config/shortcuts-config.h
@@ -34,15 +34,19 @@ enum
 };
 
 GtkWidget*
-create_shortcuts_settings();
+create_shortcuts_settings ();
 
 static void
-setup_tree_view(GtkWidget *treeview);
+setup_tree_view (GtkWidget *treeview);
 
 static void
-accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
+accel_edited (GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
     GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview);
 
+static void
+accel_cleared (GtkCellRendererAccel *renderer, gchar *path,
+    GtkTreeView *treeview);
+
 G_END_DECLS
 
 #endif // _SHORTCUTS_CONFIG
diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index 44ba711b2389e0c36f1697216b4919f2a85fee2c..e52e5f109b0ff27224966caf329a42ace09ff4a6 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -43,27 +43,28 @@ static GHashTable* shortcutsMap;
  */
 
 static void
-pick_up_callback()
+pick_up_callback ()
 {
-  sflphone_pick_up();
+  sflphone_pick_up ();
 }
 
 static void
-hang_up_callback()
+hang_up_callback ()
 {
-  sflphone_hang_up();
+  sflphone_hang_up ();
 }
 
 static void
-popup_window_callback()
+popup_window_callback ()
 {
-  gtk_widget_hide(GTK_WIDGET(get_main_window()));
-  gtk_widget_show(GTK_WIDGET(get_main_window()));
-  gtk_window_move (GTK_WINDOW (get_main_window ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
+  gtk_widget_hide (GTK_WIDGET(get_main_window()));
+  gtk_widget_show (GTK_WIDGET(get_main_window()));
+  gtk_window_move (GTK_WINDOW (get_main_window ()),
+      dbus_get_window_position_x (), dbus_get_window_position_y ());
 }
 
 static void
-default_callback()
+default_callback ()
 {
   ERROR("Missing shortcut callback");
 }
@@ -72,15 +73,15 @@ default_callback()
  * return callback corresponding to a specific action
  */
 static void*
-get_action_callback(const gchar* action)
+get_action_callback (const gchar* action)
 {
-  if(strcmp(action, "pick_up") == 0)
+  if (strcmp (action, "pick_up") == 0)
     return pick_up_callback;
 
-  if(strcmp(action, "hang_up") == 0)
+  if (strcmp (action, "hang_up") == 0)
     return hang_up_callback;
 
-  if(strcmp(action, "popup_window") == 0)
+  if (strcmp (action, "popup_window") == 0)
     return popup_window_callback;
 
   return default_callback;
@@ -94,13 +95,13 @@ get_action_callback(const gchar* action)
  * Remove all existing bindings
  */
 static void
-remove_bindings()
+remove_bindings ()
 {
   GdkDisplay *display;
   GdkScreen *screen;
   GdkWindow *root;
 
-  display = gdk_display_get_default();
+  display = gdk_display_get_default ();
 
   int i = 0;
   int j = 0;
@@ -108,15 +109,15 @@ remove_bindings()
     {
       if (accelerators_list[i].value != 0)
         {
-          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+          for (j = 0; j < gdk_display_get_n_screens (display); j++)
             {
-              screen = gdk_display_get_screen(display, j);
+              screen = gdk_display_get_screen (display, j);
 
               if (screen != NULL)
                 {
-                  root = gdk_screen_get_root_window(screen);
-                  ungrab_key(accelerators_list[i].value, root);
-                  gdk_window_remove_filter(root, filter_keys, NULL);
+                  root = gdk_screen_get_root_window (screen);
+                  ungrab_key (accelerators_list[i].value, root);
+                  gdk_window_remove_filter (root, filter_keys, NULL);
                 }
             }
         }
@@ -129,13 +130,13 @@ remove_bindings()
  * Create all bindings, using stored configuration
  */
 static void
-create_bindings()
+create_bindings ()
 {
   GdkDisplay *display;
   GdkScreen *screen;
   GdkWindow *root;
 
-  display = gdk_display_get_default();
+  display = gdk_display_get_default ();
 
   int i = 0;
   int j = 0;
@@ -143,23 +144,20 @@ create_bindings()
     {
       if (accelerators_list[i].value != 0)
         {
-          // update value in hashtable (used for dbus calls)
-          g_hash_table_replace(shortcutsMap, g_strdup(accelerators_list[i].action),
-              GINT_TO_POINTER(accelerators_list[i].value));
-
           // updated GDK bindings
-          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+          for (j = 0; j < gdk_display_get_n_screens (display); j++)
             {
-              screen = gdk_display_get_screen(display, j);
+              screen = gdk_display_get_screen (display, j);
 
               if (screen != NULL)
                 {
-                  root = gdk_screen_get_root_window(screen);
-                  grab_key(accelerators_list[i].value, root);
-                  gdk_window_add_filter(root, filter_keys, NULL);
+                  root = gdk_screen_get_root_window (screen);
+                  grab_key (accelerators_list[i].value, root);
+                  gdk_window_add_filter (root, filter_keys, NULL);
                 }
             }
         }
+
       i++;
     }
 }
@@ -168,13 +166,13 @@ create_bindings()
  * Initialize a specific binding
  */
 static void
-initialize_binding(const gchar* action, const guint code)
+initialize_binding (const gchar* action, const guint code)
 {
   //initialize_shortcuts_keys();
   int index = 0;
   while (accelerators_list[index].action != NULL)
     {
-      if (strcmp(action, accelerators_list[index].action) == 0)
+      if (strcmp (action, accelerators_list[index].action) == 0)
         {
           break;
         }
@@ -191,18 +189,19 @@ initialize_binding(const gchar* action, const guint code)
   accelerators_list[index].value = code;
 
   // update bindings
-  create_bindings();
+  create_bindings ();
 }
 
 /*
  * Prepare accelerators list
  */
 static void
-initialize_accelerators_list()
+initialize_accelerators_list ()
 {
-  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
 
-  accelerators_list = (Accelerator*)malloc((g_list_length(shortcutsKeys) + 1) *sizeof(Accelerator));
+  accelerators_list = (Accelerator*) malloc (
+      (g_list_length (shortcutsKeys) + 1) * sizeof(Accelerator));
 
   GList* shortcutsKeysElement;
   int index = 0;
@@ -211,8 +210,8 @@ initialize_accelerators_list()
     {
       gchar* action = shortcutsKeysElement->data;
 
-      accelerators_list[index].action = g_strdup(action);
-      accelerators_list[index].callback = get_action_callback(action);
+      accelerators_list[index].action = g_strdup (action);
+      accelerators_list[index].callback = get_action_callback (action);
       accelerators_list[index].mask = 0;
       accelerators_list[index].value = 0;
 
@@ -234,43 +233,48 @@ initialize_accelerators_list()
  * Update current bindings with a new value
  */
 void
-shortcuts_update_bindings(const guint index, const guint code)
+shortcuts_update_bindings (const guint index, const guint code)
 {
   // first remove all existing bindings
-  remove_bindings();
+  remove_bindings ();
 
   // store new value
   accelerators_list[index].value = code;
 
+  // update value in hashtable (used for dbus calls)
+  g_hash_table_replace (shortcutsMap,
+      g_strdup (accelerators_list[index].action), GINT_TO_POINTER (
+          accelerators_list[index].value));
+
   // recreate all bindings
-  create_bindings();
+  create_bindings ();
 
   // update configuration
-  dbus_set_shortcuts(shortcutsMap);
+  dbus_set_shortcuts (shortcutsMap);
 }
 
 /*
  * Initialize bindings with configuration retrieved from dbus
  */
 void
-shortcuts_initialize_bindings()
+shortcuts_initialize_bindings ()
 {
   // get shortcuts stored in config through dbus
-  shortcutsMap = dbus_get_shortcuts();
+  shortcutsMap = dbus_get_shortcuts ();
 
   // initialize list of keys
-  initialize_accelerators_list();
+  initialize_accelerators_list ();
 
   // iterate through keys to initialize bindings
-  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
   GList* shortcutsKeysElement;
   for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
       = shortcutsKeysElement->next)
     {
       gchar* key = shortcutsKeysElement->data;
-      int shortcut = (size_t) g_hash_table_lookup(shortcutsMap, key);
-      if(shortcut != 0)
-        initialize_binding(key, shortcut);
+      int shortcut = (size_t) g_hash_table_lookup (shortcutsMap, key);
+      if (shortcut != 0)
+        initialize_binding (key, shortcut);
     }
 }
 
@@ -278,23 +282,23 @@ shortcuts_initialize_bindings()
  * Initialize bindings with configuration retrieved from dbus
  */
 void
-shortcuts_destroy_bindings()
+shortcuts_destroy_bindings ()
 {
   // remove bindings
-  remove_bindings();
+  remove_bindings ();
 
   // free pointers
   int index = 0;
   while (accelerators_list[index].action != NULL)
     {
-      g_free(accelerators_list[index].action);
+      g_free (accelerators_list[index].action);
       index++;
     }
-  free(accelerators_list);
+  free (accelerators_list);
 }
 
 Accelerator*
-shortcuts_get_list()
+shortcuts_get_list ()
 {
   return accelerators_list;
 }
@@ -307,7 +311,7 @@ shortcuts_get_list()
  * filter used when an event is catched
  */
 static GdkFilterReturn
-filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
+filter_keys (GdkXEvent *xevent, GdkEvent *event, gpointer data)
 {
   XEvent *xev;
   XKeyEvent *key;
@@ -330,7 +334,7 @@ filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
               accelerators_list[i].value);
 
           // call associated callback function
-          accelerators_list[i].callback();
+          accelerators_list[i].callback ();
 
           return GDK_FILTER_REMOVE;
         }
@@ -345,22 +349,25 @@ filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
  * Remove key "catcher" from GDK layer
  */
 static void
-ungrab_key(int key_code, GdkWindow *root)
+ungrab_key (int key_code, GdkWindow *root)
 {
-  gdk_error_trap_push();
-
-  XUngrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+  gdk_error_trap_push ();
+
+  XUngrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
       GDK_WINDOW_XID(root));
 
-  gdk_flush();
-  if (gdk_error_trap_pop())
+  gdk_flush ();
+  if (gdk_error_trap_pop ())
     {
       ERROR("Error ungrabbing key");
     }
@@ -370,30 +377,30 @@ ungrab_key(int key_code, GdkWindow *root)
  * Add key "catcher" to GDK layer
  */
 static void
-grab_key(int key_code, GdkWindow *root)
+grab_key (int key_code, GdkWindow *root)
 {
 
-  gdk_error_trap_push();
+  gdk_error_trap_push ();
 
-  XGrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
       GDK_WINDOW_XID(root), True, GrabModeAsync, GrabModeAsync);
 
-  gdk_flush();
-  if (gdk_error_trap_pop())
+  gdk_flush ();
+  if (gdk_error_trap_pop ())
     {
       ERROR("Error grabbing key");
     }