diff --git a/mcs-plugin/xfwm4_plugin.c b/mcs-plugin/xfwm4_plugin.c
index aba95be4f4233dc85eabb7617474d0bc69bdcc2c..fbdf336b36f3eab2c66abe2682e323b5050f7d8a 100644
--- a/mcs-plugin/xfwm4_plugin.c
+++ b/mcs-plugin/xfwm4_plugin.c
@@ -31,6 +31,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <fcntl.h>
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
@@ -48,13 +49,6 @@
 
 #define INDICATOR_SIZE 11
 
-typedef enum
-{
-    DECORATION_THEMES = 0,
-    KEYBINDING_THEMES = 1
-}
-ThemeType;
-
 typedef struct _TitleRadioButton TitleRadioButton;
 struct _TitleRadioButton
 {
@@ -754,13 +748,23 @@ update_theme_dir (const gchar * theme_dir, GList * theme_list)
     gboolean set_layout = FALSE;
     gboolean set_align = FALSE;
     gboolean set_font = FALSE;
+    gboolean user_writable = FALSE;
 
     gchar *tmp;
 
     tmp = g_build_filename (theme_dir, KEY_SUFFIX, KEYTHEMERC, NULL);
     if (g_file_test (tmp, G_FILE_TEST_IS_REGULAR) && parserc (tmp, &set_layout, &set_align, &set_font))
     {
+        int fd;
+
         has_keybinding = TRUE;
+
+	fd = open (tmp, O_WRONLY);
+	if (fd != -1)
+	{
+	  user_writable = TRUE;
+	  close (fd); 
+	}
     }
     g_free (tmp);
 
@@ -789,6 +793,7 @@ update_theme_dir (const gchar * theme_dir, GList * theme_list)
             info->set_layout = set_layout;
             info->set_align = set_align;
             info->set_font = set_font;
+	    info->user_writable = user_writable;
         }
     }
     else
@@ -803,7 +808,7 @@ update_theme_dir (const gchar * theme_dir, GList * theme_list)
             info->set_layout = set_layout;
             info->set_align = set_align;
             info->set_font = set_font;
-
+	    info->user_writable = user_writable;
             list = g_list_prepend (list, info);
         }
     }
@@ -954,16 +959,27 @@ keybinding_selection_changed (GtkTreeSelection * selection, gpointer data)
     {
         if (current_key_theme && strcmp (current_key_theme, new_key_theme))
         {
+	    ThemeInfo *ti;
+
             g_free (current_key_theme);
             current_key_theme = new_key_theme;
             mcs_manager_set_string (mcs_plugin->manager, "Xfwm/KeyThemeName", CHANNEL, current_key_theme);
             mcs_manager_notify (mcs_plugin->manager, CHANNEL);
             write_options (mcs_plugin);
-        }
+
+	    ti = find_theme_info_by_name (new_key_theme, keybinding_theme_list);
+	    
+	    if (ti)
+	    {
+	        gtk_widget_set_sensitive (itf->treeview3, ti->user_writable);
+		gtk_widget_set_sensitive (itf->treeview4, ti->user_writable);
+		loadtheme_in_treeview (ti, itf);
+	    }
+	}
     }
 }
 
-static GList *
+GList *
 read_themes (GList * theme_list, GtkWidget * treeview, GtkWidget * swindow, ThemeType type, gchar * current_value)
 {
     GList *list;
@@ -1340,28 +1356,6 @@ cb_dialog_response (GtkWidget * dialog, gint response_id)
     }
 }
 
-static void
-cb_shortcuttheme_changed (GtkTreeSelection * selection, Itf * itf)
-{
-    ThemeInfo *ti;
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-    gchar *theme_name;
-
-    if (gtk_tree_selection_get_selected (selection, &model, &iter))
-    {
-        gtk_tree_model_get (model, &iter, THEME_NAME_COLUMN, &theme_name, -1);
-
-        ti = find_theme_info_by_name (theme_name, keybinding_theme_list);
-
-        if (ti)
-        {
-            loadtheme_in_treeview (ti, itf);
-        }
-        g_free (theme_name);
-    }
-}
-
 Itf *
 create_dialog (McsPlugin * mcs_plugin)
 {
@@ -1500,7 +1494,6 @@ create_dialog (McsPlugin * mcs_plugin)
     dialog->treeview3 = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
     gtk_widget_show (dialog->treeview3);
     gtk_container_add (GTK_CONTAINER (dialog->scrolledwindow3), dialog->treeview3);
-    /* gtk_widget_set_size_request (dialog->treeview3, 250, -1); */
 
     /* command column */
     renderer = gtk_cell_renderer_text_new ();
@@ -1541,6 +1534,13 @@ create_dialog (McsPlugin * mcs_plugin)
 
     gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->treeview4), -1, _("Shortcut"), renderer, "text", COLUMN_SHORTCUT, NULL);
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->treeview4), TRUE);
+    /* popup menu */
+    dialog->popup_menu = gtk_menu_new ();
+    dialog->popup_add_menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_ADD,NULL);
+    gtk_container_add (GTK_CONTAINER (dialog->popup_menu), dialog->popup_add_menuitem);
+    dialog->popup_del_menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_REMOVE, NULL);
+    gtk_container_add (GTK_CONTAINER (dialog->popup_menu), dialog->popup_del_menuitem);
+    gtk_widget_show_all (dialog->popup_menu);
 
     label = gtk_label_new (_("Keyboard"));
     gtk_widget_show (label);
@@ -1825,10 +1825,12 @@ setup_dialog (Itf * itf)
 
     selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (itf->treeview2));
     gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+
     g_signal_connect (G_OBJECT (selection), "changed", (GCallback) keybinding_selection_changed, itf);
 
+    g_signal_connect (G_OBJECT (itf->treeview2), "button-press-event", G_CALLBACK (cb_popup_menu), itf);
+    g_signal_connect (G_OBJECT (itf->popup_add_menuitem), "activate", G_CALLBACK (cb_popup_add_menu), itf);
 
-    g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (itf->treeview2))), "changed", G_CALLBACK (cb_shortcuttheme_changed), itf);
     g_signal_connect (G_OBJECT (itf->treeview3), "row-activated", G_CALLBACK (cb_activate_treeview3), itf);
     g_signal_connect (G_OBJECT (itf->treeview4), "row-activated", G_CALLBACK (cb_activate_treeview4), itf);
 
@@ -1842,6 +1844,8 @@ setup_dialog (Itf * itf)
 
     if (ti)
     {
+        gtk_widget_set_sensitive (itf->treeview3, ti->user_writable);
+        gtk_widget_set_sensitive (itf->treeview4, ti->user_writable);
         loadtheme_in_treeview (ti, itf);
     }
     else
diff --git a/mcs-plugin/xfwm4_plugin.h b/mcs-plugin/xfwm4_plugin.h
index 2f567e20612e054b62f22e99bc313154b3b73272..4706aaaa684c2699882939a5bbbf229d0a48a271 100644
--- a/mcs-plugin/xfwm4_plugin.h
+++ b/mcs-plugin/xfwm4_plugin.h
@@ -111,6 +111,10 @@ struct _Itf
     GtkWidget *wrap_windows_check;
     GtkWidget *wrap_resistance_scale;
     GtkWidget *xfwm4_dialog;
+    GtkWidget *popup_menu;
+    GtkWidget* popup_add_menuitem;
+    GtkWidget* popup_del_menuitem;
+
 };
 
 enum
@@ -120,9 +124,16 @@ enum
     NUM_COLUMNS
 };
 
+typedef enum
+{
+    DECORATION_THEMES = 0,
+    KEYBINDING_THEMES = 1
+}
+ThemeType;
+
 extern gchar *current_key_theme;
 extern GList *keybinding_theme_list;
 
 extern ThemeInfo *find_theme_info_by_name (const gchar *, GList *);
-
+extern GList *read_themes (GList *, GtkWidget *, GtkWidget *, ThemeType, gchar *);
 #endif
diff --git a/mcs-plugin/xfwm4_shortcuteditor.c b/mcs-plugin/xfwm4_shortcuteditor.c
index 23e5961f406fce06dc9470355a0298bda0f64c6d..1dabd66e0f27d1c1c4e569ea14948e2c1beb3faf 100644
--- a/mcs-plugin/xfwm4_shortcuteditor.c
+++ b/mcs-plugin/xfwm4_shortcuteditor.c
@@ -32,6 +32,123 @@
 #include "xfwm4_plugin.h"
 #include "xfwm4_shortcuteditor.h"
 
+/**************/
+/* Popup menu */
+/**************/
+void
+cb_popup_add_menu (GtkWidget *widget, gpointer data)
+{
+    Itf *itf;
+    GtkWidget *dialog;
+    GtkWidget *hbox;
+    GtkWidget *label;
+    GtkWidget *entry;
+    GtkWidget *header_image;
+    GtkWidget *header;
+    gint response = GTK_RESPONSE_CANCEL;
+
+    itf = (Itf *) data;
+    
+    dialog = gtk_dialog_new_with_buttons (_("Enter a name"), GTK_WINDOW (itf->xfwm4_dialog),
+					  GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
+					  GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+
+    header_image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_LARGE_TOOLBAR);
+    header = xfce_create_header_with_image (header_image, _("Add keybinding theme"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), header, FALSE, FALSE, 0);
+
+    hbox = gtk_hbox_new (FALSE, BORDER);
+    label = gtk_label_new (_("Enter a name for the theme:"));
+    entry = gtk_entry_new ();
+    gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
+    
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
+    gtk_widget_show_all (dialog);
+
+    response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+    if (response == GTK_RESPONSE_OK)
+    {
+        gchar *default_theme_file = NULL;
+	gchar *new_theme_path = NULL;
+	gchar *new_theme_file = NULL;
+	gchar buf[80];
+	FILE *new_theme;
+	FILE *default_theme;
+
+	/* create theme (copy default) */
+	new_theme_path = g_strdup_printf ("%s/xfwm4/%s", gtk_entry_get_text (GTK_ENTRY (entry)), KEYTHEMERC);
+	new_theme_file = xfce_resource_save_location (XFCE_RESOURCE_THEMES, new_theme_path, TRUE);
+	default_theme_file = g_build_filename (DATADIR, G_DIR_SEPARATOR_S, "themes", G_DIR_SEPARATOR_S, "Default",
+					       G_DIR_SEPARATOR_S, KEY_SUFFIX, G_DIR_SEPARATOR_S KEYTHEMERC, NULL);
+	
+	//TODO check if everything is ok
+	new_theme = fopen (new_theme_file, "w+");
+	default_theme = fopen (default_theme_file, "r");
+
+	while (fgets (buf, sizeof (buf), default_theme))
+	{
+	  fputs (buf, new_theme);
+	}
+
+	fclose (new_theme);
+	fclose (default_theme);
+	
+	//TODO refresh list
+	//FIXME	g_list_free (keybinding_theme_list);
+
+	keybinding_theme_list = read_themes (keybinding_theme_list, itf->treeview2, itf->scrolledwindow2,
+					     KEYBINDING_THEMES, current_key_theme);
+	g_free (new_theme_path);
+	g_free (new_theme_file);
+	g_free (default_theme_file);
+
+    }
+
+    gtk_widget_destroy (dialog);
+}
+
+gboolean
+cb_popup_menu (GtkTreeView *treeview, GdkEventButton *event, gpointer data)
+{
+    Itf *itf;
+
+    itf = (Itf *) data;
+    
+    /* Right click draws the context menu */
+    if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS))
+    {
+	GtkTreePath *path;
+
+	if (gtk_tree_view_get_path_at_pos (treeview, event->x, event->y, &path, NULL, NULL, NULL))
+	{
+	    GtkTreeSelection *selection;
+       
+	    selection = gtk_tree_view_get_selection (treeview);
+	    gtk_tree_selection_unselect_all (selection);
+	    gtk_tree_selection_select_path (selection, path);
+
+	    gtk_widget_set_sensitive (itf->popup_del_menuitem, TRUE);
+	}
+	else
+	{
+	    gtk_widget_set_sensitive (itf->popup_del_menuitem, FALSE);
+	}
+	
+	gtk_menu_popup (GTK_MENU (itf->popup_menu), NULL, NULL, NULL, NULL,
+		      event->button, gtk_get_current_event_time());
+	return TRUE;
+    }
+
+    return FALSE;
+}
+
+/*******************************/
+/* Load theme in the treeview  */
+/*******************************/
 void
 loadtheme_in_treeview (ThemeInfo *ti, gpointer data)
 {
@@ -42,16 +159,13 @@ loadtheme_in_treeview (ThemeInfo *ti, gpointer data)
 
     GtkTreeModel *model3, *model4;
     GtkTreeIter iter;
-    FILE *fp;
-    gchar *lvalue, *rvalue;
-    gchar buf[80];
     gboolean key_found = FALSE;
 
     gchar *user_theme_file = NULL;
-    gchar *keythemerc_name = NULL;
     gchar *default_theme_file = NULL;
 
     gchar **shortcuts_list = NULL;
+    gchar **shortcut = NULL;
 
     model3 = gtk_tree_view_get_model (GTK_TREE_VIEW (itf->treeview3));
     model4 = gtk_tree_view_get_model (GTK_TREE_VIEW (itf->treeview4));
@@ -60,354 +174,365 @@ loadtheme_in_treeview (ThemeInfo *ti, gpointer data)
 
     user_theme_file = g_build_filename (ti->path, KEY_SUFFIX, KEYTHEMERC, NULL);
     default_theme_file = g_build_filename (DATADIR, G_DIR_SEPARATOR_S, "themes", G_DIR_SEPARATOR_S, "Default",
-					   G_DIR_SEPARATOR_S, "xfwm4", G_DIR_SEPARATOR_S KEYTHEMERC, NULL);
+					   G_DIR_SEPARATOR_S, KEY_SUFFIX, G_DIR_SEPARATOR_S KEYTHEMERC, NULL);
+
+    if (g_ascii_strcasecmp (ti->name, "Default") == 0)
+    {
+        g_free (user_theme_file);
+	user_theme_file = g_strdup (default_theme_file);
+    }
 
     default_rc = xfce_rc_simple_open (default_theme_file, TRUE);
     user_rc = xfce_rc_simple_open (user_theme_file, TRUE);
 
-    fp = fopen (user_theme_file, "r");
+    shortcuts_list = xfce_rc_get_entries (default_rc, NULL);
 
     g_free (user_theme_file);
     g_free (default_theme_file);
 
-    shortcuts_list = xfce_rc_get_entries (default_rc, "");
-
-    if (!fp)
-        return;
+    shortcut = shortcuts_list;
 
-    while (fgets (buf, sizeof (buf), fp))
+    while (*shortcut)
     {
-        lvalue = strtok (buf, "=");
-        rvalue = strtok (NULL, "\n");
-
-        if (g_ascii_strcasecmp (lvalue, "close_window_key") == 0)
+	const gchar *entry_value;
+	const gchar *fallback_value;
+	
+	fallback_value = xfce_rc_read_entry (default_rc, *shortcut, "none");
+	entry_value = xfce_rc_read_entry (user_rc, *shortcut, fallback_value);
+	
+	if (g_ascii_strcasecmp (*shortcut, "close_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Close window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Close window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "maximize_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "maximize_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "maximize_vert_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "maximize_vert_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window vertically"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window vertically"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "maximize_horiz_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "maximize_horiz_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window horizontally"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Maximize window horizontally"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "hide_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "hide_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Hide window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Hide window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "shade_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shade_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Shade window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Shade window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "stick_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "stick_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Stick window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Stick window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "cycle_windows_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "cycle_windows_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Cycle windows"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Cycle windows"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_up_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_up_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window up"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window up"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_down_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_down_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window down"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window down"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_left_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_left_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window left"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window left"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_right_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_right_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window right"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window right"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "resize_window_up_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "resize_window_up_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window up"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window up"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "resize_window_down_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "resize_window_down_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window down"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window down"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "resize_window_left_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "resize_window_left_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window left"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window left"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "resize_window_right_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "resize_window_right_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window right"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Resize window right"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "raise_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "raise_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Raise window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Raise window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "lower_window_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "lower_window_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Lower window"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Lower window"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "fullscreen_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "fullscreen_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Toggle fullscreen"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Toggle fullscreen"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "next_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "next_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Next workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Next workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "prev_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "prev_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Previous workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Previous workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "add_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "add_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Add workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Add workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "del_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "del_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Delete workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Delete workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_1_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_1_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 1"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 1"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_2_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_2_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 2"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 2"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_3_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_3_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 3"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 3"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_4_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_4_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 4"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 4"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_5_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_5_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 5"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 5"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_6_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_6_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 6"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 6"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_7_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_7_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 7"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 7"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_8_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_8_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 8"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 8"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "workspace_9_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "workspace_9_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 9"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Workspace 9"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_next_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_next_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to next workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to next workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_prev_workspace_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_prev_workspace_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to previous workspace"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to previous workspace"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_1_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_1_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 1"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 1"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_2_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_2_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 2"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 2"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_3_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_3_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 3"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 3"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_4_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_4_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 4"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 4"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_5_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_5_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 5"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 5"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_6_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_6_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 6"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 6"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_7_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_7_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 7"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 7"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_8_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_8_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 8"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 8"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "move_window_workspace_9_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_9_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 9"), COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to workspace 9"), COLUMN_SHORTCUT, entry_value, -1);
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_1_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_1_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_1_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_1_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_2_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_2_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_2_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_2_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_3_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_3_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_3_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_3_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_4_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_4_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_4_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_4_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_5_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_5_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_5_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_5_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_6_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_6_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_6_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_6_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_7_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_7_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_7_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_7_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_8_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_8_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_8_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_8_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_9_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_9_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_9_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_9_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_10_key") == 0)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_10_key") == 0)
         {
             gtk_list_store_append (GTK_LIST_STORE (model4), &iter);
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, "none", COLUMN_SHORTCUT, entry_value, -1);
             key_found = TRUE;
         }
-        else if (g_ascii_strcasecmp (lvalue, "shortcut_10_exec") == 0 && key_found)
+        else if (g_ascii_strcasecmp (*shortcut, "shortcut_10_exec") == 0 && key_found)
         {
-            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, rvalue, -1);
+            gtk_list_store_set (GTK_LIST_STORE (model4), &iter, COLUMN_COMMAND, entry_value, -1);
             key_found = FALSE;
         }
-    }
+        else
+        {
+            gtk_list_store_append (GTK_LIST_STORE (model3), &iter);
+            gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, *shortcut, COLUMN_SHORTCUT, entry_value, -1);
+        }
 
-    fclose (fp);
+	*shortcut++;
+    }
 
     g_strfreev (shortcuts_list);
 
diff --git a/mcs-plugin/xfwm4_shortcuteditor.h b/mcs-plugin/xfwm4_shortcuteditor.h
index 6a9f4be4ff05fc8e99f083c7c853b353d343fa12..da3c1e52034f65ab782a48b6b68914b0b04183c5 100644
--- a/mcs-plugin/xfwm4_shortcuteditor.h
+++ b/mcs-plugin/xfwm4_shortcuteditor.h
@@ -20,6 +20,8 @@
 #ifndef __XFWM4_SHORTCUTEDITOR_H
 #define __XFWM4_SHORTCUTEDITOR_H
 
+extern void cb_popup_add_menu (GtkWidget *, gpointer);
+extern gboolean cb_popup_menu (GtkTreeView *, GdkEventButton *, gpointer);
 extern void loadtheme_in_treeview (ThemeInfo *, gpointer);
 extern void savetreeview_in_theme (gchar *, gpointer);