=== modified file '.pc/applied-patches'
--- .pc/applied-patches	2013-09-10 17:10:13 +0000
+++ .pc/applied-patches	2013-09-15 02:42:45 +0000
@@ -14,7 +14,7 @@
 gnomeradio-lirc.patch
 gnomeradio-ngettext.patch
 gnomeradio-help.patch
-gnomeradio-prefs.patch
+gnomeradio-file_chooser.patch
 gnomeradio-function.patch
 gnomeradio-about.patch
 gnomeradio-record.patch
@@ -41,3 +41,4 @@
 gnomeradio-thread_safe.patch
 gnomeradio-gtk_stock.patch
 gnomeradio-auto_device.patch
+gnomeradio-preferences.patch

=== modified file '.pc/gnomeradio-alsa.patch/src/gui.c'
--- .pc/gnomeradio-alsa.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-alsa.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -841,7 +841,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -855,7 +855,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-alsamixer.patch/src/gui.c'
--- .pc/gnomeradio-alsamixer.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-alsamixer.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -863,7 +863,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -877,7 +877,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1344,7 +1344,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);

=== modified file '.pc/gnomeradio-alsamixer.patch/src/prefs.c'
--- .pc/gnomeradio-alsamixer.patch/src/prefs.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-alsamixer.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -859,48 +859,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_foreach(settings.presets, free_preset_list, NULL);
-		g_list_free(settings.presets);
-		settings.presets = NULL;
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -908,52 +911,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-			settings.presets = g_list_append(settings.presets, ps);
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */

=== modified file '.pc/gnomeradio-auto_device.patch/src/gui.c'
--- .pc/gnomeradio-auto_device.patch/src/gui.c	2013-09-10 17:10:13 +0000
+++ .pc/gnomeradio-auto_device.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -257,7 +257,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -269,7 +269,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -300,6 +300,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -324,6 +325,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -889,7 +891,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -903,7 +905,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1359,7 +1361,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1412,6 +1413,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file '.pc/gnomeradio-auto_device.patch/src/prefs.c'
--- .pc/gnomeradio-auto_device.patch/src/prefs.c	2013-09-10 17:10:13 +0000
+++ .pc/gnomeradio-auto_device.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -35,6 +35,7 @@
 
 extern int mom_ps;
 extern gnomeradio_settings settings;
+
 extern gboolean main_visible;
 
 static GtkWidget *device_entry;
@@ -46,6 +47,7 @@
 static GtkWidget *save_button;
 static GtkWidget *move_up_button;
 static GtkWidget *move_down_button;
+static GtkWidget *add_button;
 static GtkWidget *remove_button;
 static GtkWidget *audio_profile_combo;
 static GtkWidget *install_button;
@@ -772,11 +774,13 @@
 	GtkTreePath *path = NULL;
 	GtkTreeViewColumn *focus_column = NULL;
 	
-	if (settings.presets == NULL) return;
+	if (settings.presets == NULL)
+		return;
 
 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
 	
-	if (!path) return;
+	if (!path)
+		return;
 
 	row = gtk_tree_path_get_indices(path);
 	g_assert(row);
@@ -814,6 +818,36 @@
 	gtk_widget_set_sensitive(save_button, sel);
 }
 
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
 static void free_presets_list (gpointer data)
 {
 	preset *ps = (preset *) data;
@@ -972,48 +1006,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_free_full (settings.presets, free_presets_list);
-		settings.presets = NULL;
-
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -1021,56 +1058,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-
-			settings.presets = g_list_prepend(settings.presets, ps);
-
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
-	settings.presets = g_list_reverse(settings.presets);
-
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */
@@ -1109,7 +1162,7 @@
 	gtk_widget_destroy(dialog);
 }
 
-gboolean settings_device_cb (gint mode)
+gboolean action_mode (gint mode)
 {
 	switch (mode) {
 		case RADIO_DEVICE:
@@ -1118,6 +1171,9 @@
 		case MIXER_DEVICE:
 			gtk_widget_grab_focus (mixer_entry);
 			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
 		default:
 			break;
 	}
@@ -1136,11 +1192,12 @@
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;
 	GtkWidget *button_box;
-	GtkWidget *open_button, *add_button;
+	GtkWidget *open_button;
 	GtkWidget *destination_button;
 	GtkWidget *image;
 
 	GstEncodingProfile *profile;
+
 	gint i;
 	gchar *markup;
 	preset* ps;

=== removed file '.pc/gnomeradio-auto_device.patch/src/radio.h'
--- .pc/gnomeradio-auto_device.patch/src/radio.h	2013-09-10 17:10:13 +0000
+++ .pc/gnomeradio-auto_device.patch/src/radio.h	1970-01-01 00:00:00 +0000
@@ -1,58 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef _RADIO_H
-#define _RADIO_H
-
-typedef struct _RadioDev RadioDev;
-struct _RadioDev
-{
-	int  (*init)       (RadioDev *dev, char *device);
-	int  (*is_init)    (RadioDev *dev);
-	void (*set_freq)   (RadioDev *dev, float freq);
-	void (*mute)       (RadioDev *dev, int   mute);
-	int  (*get_stereo) (RadioDev *dev);
-	int  (*get_signal) (RadioDev *dev);
-	void (*finalize)   (RadioDev *dev);
-};
-
-typedef enum _DriverType DriverType;
-enum _DriverType
-{
-	DRIVER_ANY,
-	DRIVER_V4L1,
-	DRIVER_V4L2
-};
-
-int radio_init(char *device, DriverType type);
-
-int radio_is_init(void);
-
-void radio_stop(void);
-
-void radio_set_freq(float freq);
-
-int radio_check_station(float freq);
-
-void radio_unmute(void);
-
-void radio_mute(void);
-
-int radio_get_stereo(void);
-
-int radio_get_signal(void);
-
-#endif

=== modified file '.pc/gnomeradio-build.patch/src/gui.c'
--- .pc/gnomeradio-build.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-build.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -840,7 +840,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -854,7 +854,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-documentation.patch/src/gui.c'
--- .pc/gnomeradio-documentation.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-documentation.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -244,7 +244,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -256,7 +256,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -287,6 +287,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -311,6 +312,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -874,7 +876,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -888,7 +890,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1355,7 +1357,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1407,6 +1408,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== added directory '.pc/gnomeradio-file_chooser.patch'
=== added directory '.pc/gnomeradio-file_chooser.patch/src'
=== added file '.pc/gnomeradio-file_chooser.patch/src/prefs.c'
--- .pc/gnomeradio-file_chooser.patch/src/prefs.c	1970-01-01 00:00:00 +0000
+++ .pc/gnomeradio-file_chooser.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -0,0 +1,736 @@
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <gconf/gconf-client.h>
+#include <glib/gi18n.h>
+#include <libgnome-media-profiles/audio-profile-choose.h>
+#include <string.h>
+#include "config.h"
+#include "prefs.h"
+#include "trayicon.h"
+#include "gui.h"
+#include "rec_tech.h"
+
+extern GtkWidget* mute_button, *preset_combo;
+extern GtkAdjustment *adj;
+
+extern int mom_ps;
+extern gnomeradio_settings settings;
+
+extern gboolean main_visible;
+
+static GtkWidget *device_entry;
+static GtkWidget *mixer_combo;
+static GtkWidget *mute_on_exit_cb;
+static GtkWidget *list_view;
+static GtkListStore *list_store;
+static GtkTreeSelection *selection;
+
+gboolean save_settings(void)
+{
+	gint i, count;
+	gchar *buffer;
+	preset *ps;
+	GConfClient* client = NULL;
+	
+	if (!gconf_is_initialized())
+		return FALSE;
+
+	client = gconf_client_get_default();
+	if (!client)
+		return FALSE;
+	
+	/* Store general settings */
+	gconf_client_set_string(client, "/apps/gnomeradio/device", settings.device, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/driver", settings.driver, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/mixer", settings.mixer, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/mixer-device", settings.mixer_dev, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/mute-on-exit", settings.mute_on_exit, NULL);
+	/*gconf_client_set_float(client, "/apps/gnomeradio/volume", volume->value, NULL);*/
+	gconf_client_set_float(client, "/apps/gnomeradio/last-freq", gtk_adjustment_get_value(adj)/STEPS, NULL);
+
+	/* Store recording settings */
+/*	gconf_client_set_string(client, "/apps/gnomeradio/recording/audiodevice", rec_settings.audiodevice, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-as-mp3", rec_settings.mp3, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-rate", rec_settings.rate, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-format", rec_settings.sample, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-in-stereo", rec_settings.stereo, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/encoder", rec_settings.encoder, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/bitrate", rec_settings.bitrate, NULL);
+*/
+
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/destination", rec_settings.destination, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/profile", rec_settings.profile, NULL);
+
+	/* Store the presets */
+	count = g_list_length(settings.presets);
+	gconf_client_set_int(client, "/apps/gnomeradio/presets/presets", count, NULL);
+	for (i=0;i<count;i++)
+	{
+		ps = g_list_nth_data(settings.presets, i);
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
+		gconf_client_set_string(client, buffer, ps->title, NULL); 
+		g_free(buffer);
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
+		gconf_client_set_float(client, buffer, ps->freq, NULL); 
+		g_free(buffer);
+	}	
+	gconf_client_set_int(client, "/apps/gnomeradio/presets/last", mom_ps, NULL);
+	/*g_print("Storing Settings in GConf database\n");*/
+	
+	return TRUE;
+}			
+
+gboolean load_settings(void)
+{
+	gint i, count;
+	gchar *buffer;
+	preset *ps;
+	GConfClient *client = NULL;
+	double freq;
+	
+	settings.presets = NULL;
+		
+	if (!gconf_is_initialized())
+		return FALSE;
+	
+	client = gconf_client_get_default();
+	if (!client)
+		return FALSE;
+
+	/* Load general settings */
+	settings.device = gconf_client_get_string(client, "/apps/gnomeradio/device" , NULL);
+	if (!settings.device)
+		settings.device = g_strdup("/dev/radio0");
+	settings.driver = gconf_client_get_string(client, "/apps/gnomeradio/driver" , NULL);
+	if (!settings.driver)
+		settings.driver = g_strdup("any");
+	settings.mixer = gconf_client_get_string(client, "/apps/gnomeradio/mixer", NULL);
+	if (!settings.mixer)
+		settings.mixer = g_strdup("line");
+	settings.mixer_dev = gconf_client_get_string(client, "/apps/gnomeradio/mixer-device", NULL);
+	if (!settings.mixer_dev)
+		settings.mixer_dev = g_strdup("/dev/mixer");
+	settings.mute_on_exit = gconf_client_get_bool(client, "/apps/gnomeradio/mute-on-exit", NULL);
+	/*volume->value = gconf_client_get_float(client, "/apps/gnomeradio/volume", NULL);*/
+	freq = gconf_client_get_float(client, "/apps/gnomeradio/last-freq", NULL);
+	if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
+		gtk_adjustment_set_value(adj, FREQ_MIN * STEPS);
+	else
+		gtk_adjustment_set_value(adj, freq * STEPS);
+	
+	/* Load recording settings */
+/*	rec_settings.audiodevice = gconf_client_get_string(client, "/apps/gnomeradio/recording/audiodevice", NULL);
+	if (!rec_settings.audiodevice)
+		rec_settings.audiodevice = g_strdup("/dev/audio");
+	rec_settings.mp3 = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-as-mp3", NULL);
+	rec_settings.rate = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-rate", NULL);
+	if (!rec_settings.rate)
+		rec_settings.rate = g_strdup("44100");
+	rec_settings.sample = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-format", NULL);
+	if (!rec_settings.sample)
+		rec_settings.sample = g_strdup("16");
+	rec_settings.stereo = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-in-stereo", NULL);
+	rec_settings.encoder = gconf_client_get_string(client, "/apps/gnomeradio/recording/encoder", NULL);
+	if (!rec_settings.encoder)
+		rec_settings.encoder = g_strdup("oggenc");
+	rec_settings.bitrate = gconf_client_get_string(client, "/apps/gnomeradio/recording/bitrate", NULL);
+	if (!rec_settings.bitrate)
+		rec_settings.bitrate = g_strdup("192");*/
+
+	rec_settings.destination = gconf_client_get_string(client, "/apps/gnomeradio/recording/destination", NULL);
+	if (!rec_settings.destination)
+		rec_settings.destination = g_strdup(g_get_home_dir());
+	rec_settings.profile = gconf_client_get_string(client, "/apps/gnomeradio/recording/profile", NULL);
+	if (!rec_settings.profile)
+		rec_settings.profile = g_strdup("cdlossy");
+	
+	/* Load the presets */
+	count = gconf_client_get_int(client, "/apps/gnomeradio/presets/presets", NULL);
+	for (i=0;i<count;i++)
+	{
+		ps = malloc(sizeof(preset));
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
+		ps->title = gconf_client_get_string(client, buffer, NULL); 
+		g_free(buffer);
+		if (!ps->title)
+			ps->title = g_strdup(_("unnamed"));
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
+		freq = gconf_client_get_float(client, buffer, NULL); 
+		if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
+			ps->freq = FREQ_MIN;
+		else
+			ps->freq = freq;
+		g_free(buffer);
+		settings.presets = g_list_append(settings.presets, (gpointer)ps);	
+	}	
+	mom_ps = gconf_client_get_int(client, "/apps/gnomeradio/presets/last", NULL);
+	if (mom_ps >= count)
+		mom_ps = -1;
+
+	return TRUE;
+}			
+	
+static void mute_on_exit_toggled_cb(GtkWidget* widget, gpointer data)
+{
+	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb));
+}	
+
+static gboolean device_entry_activate_cb(GtkWidget *widget, gpointer data)
+{
+	const gchar *text = gtk_entry_get_text(GTK_ENTRY(device_entry));
+
+	if (!strcmp(settings.device, text)) return FALSE;
+	
+	if (settings.device) g_free(settings.device);
+	settings.device = g_strdup(text);
+	
+	start_radio(TRUE, data);
+	
+	return FALSE;
+}
+
+static gboolean mixer_combo_change_cb(GtkComboBox *combo, gpointer data)
+{
+	GList *mixer_devs;
+	int active;
+	gchar *mixer_dev, *tmp;
+	
+	g_assert(combo);
+	mixer_devs = g_object_get_data(G_OBJECT(combo), "mixer_devs");
+	active = gtk_combo_box_get_active(combo);
+	g_assert(active > -1);
+	
+	mixer_dev = (gchar*)g_list_nth_data(mixer_devs, active);
+	g_assert(mixer_dev);
+	
+	if (g_str_equal(mixer_dev, settings.mixer))
+		return FALSE;
+
+	if (settings.mixer) g_free(settings.mixer);
+	settings.mixer = g_strdup(mixer_dev);
+	
+	if ((tmp = strstr(settings.mixer, " (")))
+		tmp[0] = '\0';
+	
+	start_mixer(TRUE, data);
+	
+	return FALSE;
+}
+
+/*static gboolean bitrate_combo_change_cb(GtkComboBox *combo, gpointer data)
+{
+	GList *bitrates;
+	gint active;
+	gchar *bitrate;
+
+	g_assert(combo);
+	bitrates = g_object_get_data(G_OBJECT(combo), "bitrates");
+	active = gtk_combo_box_get_active(combo);
+	g_assert(active > -1);
+	
+	bitrate = (gchar*)g_list_nth_data(bitrates, active);
+	g_assert(bitrate);
+
+	if (rec_settings.bitrate) g_free(rec_settings.bitrate);
+	rec_settings.bitrate = g_strdup(bitrate);
+	
+	return FALSE;
+}*/
+
+/*static gboolean encoder_combo_change_cb(GtkComboBox *combo, gpointer bitrate_combo)
+{
+	GList *encoders;
+	gint active;
+	gchar *encoder;
+	
+	g_assert(combo);
+	encoders = g_object_get_data(G_OBJECT(combo), "encoders");
+	active = gtk_combo_box_get_active(combo);
+	g_assert(active > -1);
+	
+	encoder = (gchar*)g_list_nth_data(encoders, active);
+	g_assert(encoder);
+
+	if (g_str_equal(encoder, _("Wave file"))) rec_settings.mp3 = FALSE;
+	else {
+		rec_settings.mp3 = TRUE;
+		if (rec_settings.encoder) g_free(rec_settings.encoder);
+		rec_settings.encoder = g_strdup(encoder);
+	}
+	gtk_widget_set_sensitive(bitrate_combo, rec_settings.mp3);
+	
+	return FALSE;
+}*/
+
+static gboolean profile_combo_change_cb(GtkComboBox *combo, gpointer userdata)
+{
+	GMAudioProfile* profile = gm_audio_profile_choose_get_active(GTK_WIDGET(combo));
+
+	g_assert(rec_settings.profile);
+	g_free(rec_settings.profile);
+	rec_settings.profile = g_strdup(gm_audio_profile_get_id(profile));
+
+	return FALSE;
+}
+
+static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+	preset *ps;
+	gchar *buffer;
+	GtkTreeIter iter = {0};
+	GtkAdjustment* v_scb;
+	GtkTreePath *path = NULL;
+	GList* menuitems;
+	GtkWidget *menuitem;
+	
+	ps = malloc(sizeof(preset));
+	ps->title = g_strdup(_("unnamed"));
+	ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
+	settings.presets = g_list_append(settings.presets, (gpointer) ps);
+	buffer = g_strdup_printf("%.2f", ps->freq);
+
+	gtk_list_store_append(list_store, &iter);
+	gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);
+
+	g_free(buffer);
+	gtk_tree_selection_unselect_all(selection);
+	
+	v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+	gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+	
+	if (main_visible) {
+		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
+		mom_ps = g_list_length(settings.presets) - 1;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		menuitem = gtk_menu_item_new_with_label(ps->title); 
+			
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);		
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
+		gtk_widget_show(menuitem);
+	}
+
+	buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
+	path = gtk_tree_path_new_from_string(buffer);
+	g_free(buffer);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
+	gtk_tree_path_free(path);
+}
+
+
+static void del_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeViewColumn *focus_column = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+	
+	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
+	
+	if (!path) return;
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	settings.presets = g_list_remove(settings.presets, (gpointer)ps);
+	g_free(ps->title);
+	g_free(ps);
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_remove(list_store, &iter);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		if (--mom_ps < 0) mom_ps = 0;
+		if (!g_list_length(settings.presets)) mom_ps = -1;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(*row < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, *row);
+		gtk_widget_destroy(menuitem);
+	}
+	
+	gtk_tree_path_prev(path);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
+	gtk_tree_path_free(path);	
+}
+
+static void destination_button_clicked_cb(GtkWidget *button, gpointer data)
+{
+	GtkWidget *dialog;
+	
+	dialog = gtk_file_chooser_dialog_new(_("Choose a destination folder"), NULL, 
+					GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
+					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
+					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+					NULL);
+	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), rec_settings.destination);
+	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+		if (rec_settings.destination) g_free(rec_settings.destination);
+		rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+		gtk_button_set_label(GTK_BUTTON(button), rec_settings.destination);
+	}
+	
+	gtk_widget_destroy (dialog);
+}
+
+static gboolean list_view_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+	if (event->keyval == GDK_KEY_Delete)
+		del_button_clicked_cb(widget, user_data);
+	if (event->keyval == GDK_KEY_Insert)
+		add_button_clicked_cb(widget, user_data);
+	
+	return FALSE;
+}		
+
+static void name_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+	
+	path = gtk_tree_path_new_from_string(path_str);
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	if (ps->title) g_free(ps->title);
+	ps->title = g_strdup(new_val);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1, ps->title);
+		mom_ps = *row;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(mom_ps < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, mom_ps);
+		gtk_widget_destroy(menuitem);
+		menuitem = gtk_menu_item_new_with_label(ps->title); 
+			
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, *row);		
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
+		gtk_widget_show(menuitem);
+	}
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, new_val, -1);
+	gtk_tree_path_free(path);	
+}	
+
+static void freq_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	double value;
+	gchar *freq_str;
+	
+	if (sscanf(new_val, "%lf", &value) != 1) return;
+	
+	if (value < FREQ_MIN) value = FREQ_MIN;
+	if (value > FREQ_MAX) value = FREQ_MAX;
+	value = rint(value * STEPS) / STEPS;
+	
+	freq_str = g_strdup_printf("%.2f", value);
+	
+	path = gtk_tree_path_new_from_string(path_str);
+	
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	ps->freq = value;
+
+	gtk_adjustment_set_value(adj, value * STEPS);
+	mom_ps = *row;
+	preset_combo_set_item(mom_ps);
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 1, freq_str, -1);
+	g_free(freq_str);
+	gtk_tree_path_free(path);	
+}	
+
+static void
+list_view_cursor_changed_cb(GtkWidget *widget, gpointer data)
+{
+	int *row;
+	GtkTreePath *path = NULL;
+	GtkTreeViewColumn *focus_column = NULL;
+	
+	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
+	
+	if (!path) return;
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+
+	mom_ps = *row;
+	preset_combo_set_item(mom_ps);
+	return;
+}
+
+static void free_string_list(GList *list)
+{
+	if (!list) return;
+	g_list_foreach(list, (GFunc)g_free, NULL);
+	g_list_free(list);
+}
+
+GtkWidget* prefs_window(GtkWidget *app)
+{
+	GtkWidget *dialog;
+	GtkWidget *box, *sbox, *pbox, *rbox;
+	GtkWidget *settings_box, *presets_box, *record_box;
+	GtkWidget *settings_label, *presets_label, *record_label;
+	GtkWidget *s_indent_label, *p_indent_label, *r_indent_label;
+	GtkWidget *destination_label;
+	GtkWidget *destination_button;
+	GtkWidget *profile_combo;
+	GtkWidget *mixer_eb, *profile_eb;
+	GtkWidget *preset_box;
+	GtkWidget *settings_table, *record_table;
+	GtkWidget *device_label, *mixer_label;
+	GtkWidget *button_box;
+	GtkWidget *add_button, *del_button;
+	GtkWidget *scrolled_window;
+	GtkCellRenderer *cellrenderer;
+	GtkTreeViewColumn *list_column;
+	GList *mixer_devs, *profiles, *ptr;
+	gint i, active;
+	char *settings_hdr, *presets_hdr, *record_hdr;
+	preset* ps;
+	
+	dialog = gtk_dialog_new_with_buttons(_("Gnomeradio Settings"), GTK_WINDOW(app), 
+			GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+			GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, 
+			GTK_STOCK_HELP, GTK_RESPONSE_HELP,
+			NULL);
+	
+	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
+	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+
+	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
+	gtk_container_set_border_width(GTK_CONTAINER(box), 12);
+	gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), box, TRUE, TRUE, 0);
+	
+	settings_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
+	gtk_box_pack_start(GTK_BOX(box), settings_box, TRUE, TRUE, 0);
+
+	settings_hdr = g_strconcat("<span weight=\"bold\">", _("General Settings"), "</span>", NULL);
+	settings_label = gtk_label_new(settings_hdr);
+	gtk_misc_set_alignment(GTK_MISC(settings_label), 0, 0.5);
+	gtk_label_set_use_markup(GTK_LABEL(settings_label), TRUE);
+	g_free(settings_hdr);
+	gtk_box_pack_start(GTK_BOX(settings_box), settings_label, TRUE, TRUE, 0);
+
+	presets_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
+	gtk_box_pack_start(GTK_BOX(box), presets_box, TRUE, TRUE, 0);
+
+	presets_hdr = g_strconcat("<span weight=\"bold\">", _("Presets"), "</span>", NULL);
+	presets_label = gtk_label_new(presets_hdr);
+	gtk_misc_set_alignment(GTK_MISC(presets_label), 0, 0.5);
+	gtk_label_set_use_markup(GTK_LABEL(presets_label), TRUE);
+	g_free(presets_hdr);
+	gtk_box_pack_start(GTK_BOX(presets_box), presets_label, TRUE, TRUE, 0);
+
+	record_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
+	gtk_box_pack_start(GTK_BOX(box), record_box, TRUE, TRUE, 0);
+
+	record_hdr = g_strconcat("<span weight=\"bold\">", _("Record Settings"), "</span>", NULL);
+	record_label = gtk_label_new(record_hdr);
+	gtk_misc_set_alignment(GTK_MISC(record_label), 0, 0.5);
+	gtk_label_set_use_markup(GTK_LABEL(record_label), TRUE);
+	g_free(record_hdr);
+	gtk_box_pack_start(GTK_BOX(record_box), record_label, TRUE, TRUE, 0);
+
+	/* The general settings part */
+	sbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+	gtk_box_pack_start(GTK_BOX(settings_box), sbox, TRUE, TRUE, 0);
+	s_indent_label = gtk_label_new("    ");
+	gtk_box_pack_start(GTK_BOX(sbox), s_indent_label, FALSE, FALSE, 0);
+	
+	settings_table = gtk_table_new(3, 2, FALSE);
+	gtk_table_set_row_spacings(GTK_TABLE(settings_table), 5);
+	gtk_table_set_col_spacings(GTK_TABLE(settings_table), 15);
+	gtk_box_pack_start(GTK_BOX(sbox), settings_table, TRUE, TRUE, 0);
+	
+	device_label = gtk_label_new(_("Radio Device:"));
+	gtk_misc_set_alignment(GTK_MISC(device_label), 0.0f, 0.5f); 
+	device_entry = gtk_entry_new();
+	gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
+	gtk_table_attach_defaults(GTK_TABLE(settings_table), device_label, 0, 1, 0, 1);
+	gtk_table_attach_defaults(GTK_TABLE(settings_table), device_entry, 1, 2, 0, 1);
+
+	mixer_label = gtk_label_new(_("Mixer Source:"));
+	gtk_misc_set_alignment(GTK_MISC(mixer_label), 0.0f, 0.5f);
+	mixer_eb = gtk_event_box_new();
+	mixer_combo = gtk_combo_box_text_new();
+	gtk_container_add(GTK_CONTAINER(mixer_eb), mixer_combo);
+	ptr = mixer_devs = get_mixer_recdev_list();
+	for (i = 0, active = 0; ptr; ptr = g_list_next(ptr)) {
+		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mixer_combo), ptr->data);
+		if (g_str_equal(ptr->data, settings.mixer)) active = i;
+		++i;
+	}
+	gtk_combo_box_set_active(GTK_COMBO_BOX(mixer_combo), active);
+	g_object_set_data_full(G_OBJECT(mixer_combo), "mixer_devs", mixer_devs, (GDestroyNotify)free_string_list);
+	
+	gtk_table_attach_defaults(GTK_TABLE(settings_table), mixer_label, 0, 1, 1, 2);
+	gtk_table_attach_defaults(GTK_TABLE(settings_table), mixer_eb, 1, 2, 1, 2);
+
+	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit?"));
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
+
+	gtk_table_attach_defaults(GTK_TABLE(settings_table), mute_on_exit_cb, 0, 2, 2, 3);
+
+	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
+	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
+	g_signal_connect(G_OBJECT(mixer_combo), "changed", G_CALLBACK(mixer_combo_change_cb), app);
+	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
+
+	gtk_widget_set_tooltip_text(device_entry, _("Specify the radio-device (in most cases /dev/radio0)"));
+	gtk_widget_set_tooltip_text(mixer_eb, 
+	_("Choose the mixer source (line, line1, etc.) that is able to control the volume of your radio"));
+	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("If unchecked, gnomeradio won't mute after exiting"));
+
+	
+	/* The presets part */
+	pbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+	gtk_box_pack_start(GTK_BOX(presets_box), pbox, TRUE, TRUE, 0);
+	p_indent_label = gtk_label_new("    ");
+	gtk_box_pack_start(GTK_BOX(pbox), p_indent_label, FALSE, FALSE, 0);
+
+	preset_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+	gtk_box_pack_start(GTK_BOX(pbox), preset_box, TRUE, TRUE, 0);
+
+	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+	list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+	list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
+	gtk_container_add(GTK_CONTAINER(scrolled_window), list_view);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_widget_set_size_request(list_view, 200, 150);
+	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list_view), FALSE);
+	
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
+	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+	/*gtk_tree_selection_select_path(selection, gtk_tree_path_new_from_string("0"));
+	gtk_tree_selection_set_select_function(selection, (GtkTreeSelectionFunc)list_view_select_cb, NULL, NULL);*/
+	
+	cellrenderer = gtk_cell_renderer_text_new();
+	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
+	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
+	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 0, NULL);
+	gtk_tree_view_column_set_min_width(list_column, 150);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
+	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(name_cell_edited_cb), NULL);
+
+	cellrenderer = gtk_cell_renderer_text_new();
+	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
+	g_object_set(G_OBJECT(cellrenderer), "xalign", 1.0f, NULL);
+	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
+	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 1, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
+	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(freq_cell_edited_cb), NULL);
+
+	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
+
+	add_button = gtk_button_new_from_stock(GTK_STOCK_ADD);
+	del_button = gtk_button_new_from_stock(GTK_STOCK_DELETE);
+	
+	gtk_box_pack_end(GTK_BOX(button_box), del_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), add_button, FALSE, FALSE, 0);
+	
+	gtk_box_pack_start(GTK_BOX(preset_box), scrolled_window, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(preset_box), button_box, TRUE, TRUE, 0);
+
+	for (i=0;i<g_list_length(settings.presets);i++) {
+		GtkTreeIter iter = {0};
+		char *buffer;
+		ps = g_list_nth_data(settings.presets, i);
+		buffer = g_strdup_printf("%0.2f", ps->freq);
+		gtk_list_store_append(list_store, &iter);
+		gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);
+		g_free(buffer);
+	}
+
+	g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(add_button_clicked_cb), NULL);
+	g_signal_connect(G_OBJECT(del_button), "clicked", G_CALLBACK(del_button_clicked_cb), NULL);
+	g_signal_connect(G_OBJECT(list_view), "key-press-event", G_CALLBACK(list_view_key_press_event_cb), NULL);
+	g_signal_connect(G_OBJECT(list_view), "cursor-changed", G_CALLBACK(list_view_cursor_changed_cb), NULL);
+
+	gtk_widget_set_tooltip_text(add_button, _("Add a new preset"));
+	gtk_widget_set_tooltip_text(del_button, _("Remove preset from List"));
+
+
+	/* The record settings part */
+	rbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+	gtk_box_pack_start(GTK_BOX(record_box), rbox, TRUE, TRUE, 0);
+	r_indent_label = gtk_label_new("    ");
+	gtk_box_pack_start(GTK_BOX(rbox), r_indent_label, FALSE, FALSE, 0);
+
+	record_table = gtk_table_new(2, 2, FALSE);
+	gtk_table_set_col_spacings(GTK_TABLE(record_table), 15);
+	gtk_table_set_row_spacings(GTK_TABLE(record_table), 5);
+	
+	destination_label = gtk_label_new(_("Destination directory:"));
+	gtk_misc_set_alignment(GTK_MISC(destination_label), 0.0f, 0.5f);
+
+	destination_button = gtk_button_new();
+	gtk_button_set_label(GTK_BUTTON(destination_button), rec_settings.destination);
+	
+	profile_eb = gtk_event_box_new();
+	profile_combo = gm_audio_profile_choose_new();
+	gtk_container_add(GTK_CONTAINER(profile_eb), profile_combo);
+	gm_audio_profile_choose_set_active(profile_combo, rec_settings.profile);
+
+	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_label, 0, 1, 0, 1);
+	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_button, 1, 2, 0, 1);
+	gtk_table_attach_defaults(GTK_TABLE(record_table), profile_eb, 0, 2, 1, 2);
+
+	g_signal_connect(G_OBJECT(destination_button), "clicked", G_CALLBACK(destination_button_clicked_cb), NULL);
+	g_signal_connect(G_OBJECT(profile_combo), "changed", G_CALLBACK(profile_combo_change_cb), NULL);
+
+	gtk_widget_set_tooltip_text(profile_eb, _("Choose the Media Profile that should be used to record."));
+	
+	gtk_box_pack_start(GTK_BOX(rbox), record_table, TRUE, TRUE, 0);
+
+	gtk_widget_show_all(dialog);
+
+	return dialog;
+}

=== modified file '.pc/gnomeradio-g_list.patch/src/gui.c'
--- .pc/gnomeradio-g_list.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-g_list.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -244,7 +244,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -256,7 +256,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -287,6 +287,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -311,6 +312,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -874,7 +876,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -888,7 +890,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1358,7 +1360,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1410,6 +1411,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file '.pc/gnomeradio-g_list.patch/src/prefs.c'
--- .pc/gnomeradio-g_list.patch/src/prefs.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-g_list.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -40,7 +40,7 @@
 
 static GtkWidget *device_entry, *mixer_entry;
 static GtkWidget *mute_on_exit_cb;
-static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
 static GtkWidget *audio_profile_combo;
 static GtkWidget *install_plugins_button;
 static GtkWidget *list_view;
@@ -767,11 +767,13 @@
 	GtkTreePath *path = NULL;
 	GtkTreeViewColumn *focus_column = NULL;
 	
-	if (settings.presets == NULL) return;
+	if (settings.presets == NULL)
+		return;
 
 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
 	
-	if (!path) return;
+	if (!path)
+		return;
 
 	row = gtk_tree_path_get_indices(path);
 	g_assert(row);
@@ -809,6 +811,36 @@
 	gtk_widget_set_sensitive(save_button, sel);
 }
 
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
 static void free_preset_list(gpointer data, gpointer user_data)
 {
 	preset *ps;
@@ -969,48 +1001,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_foreach(settings.presets, free_preset_list, NULL);
-		g_list_free(settings.presets);
-		settings.presets = NULL;
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -1018,52 +1053,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-			settings.presets = g_list_append(settings.presets, ps);
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */
@@ -1102,7 +1157,7 @@
 	gtk_widget_destroy(dialog);
 }
 
-gboolean settings_device_cb (gint mode)
+gboolean action_mode (gint mode)
 {
 	switch (mode) {
 		case RADIO_DEVICE:
@@ -1111,6 +1166,9 @@
 		case MIXER_DEVICE:
 			gtk_widget_grab_focus (mixer_entry);
 			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
 		default:
 			break;
 	}
@@ -1130,7 +1188,7 @@
 	GtkWidget *audio_profile_label;
 	GtkWidget *device_label, *mixer_label;
 	GtkWidget *button_box;
-	GtkWidget *open_button, *add_button;
+	GtkWidget *open_button;
 	GtkWidget *scrolled_window;
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;

=== modified file '.pc/gnomeradio-g_thread_init_deprecation.patch/src/gui.c'
--- .pc/gnomeradio-g_thread_init_deprecation.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-g_thread_init_deprecation.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -818,7 +818,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -832,7 +832,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-gstreamer-1.0.patch/src/gui.c'
--- .pc/gnomeradio-gstreamer-1.0.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-gstreamer-1.0.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -840,7 +840,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -854,7 +854,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-gtk_grid.patch/src/gui.c'
--- .pc/gnomeradio-gtk_grid.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-gtk_grid.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -818,7 +818,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -832,7 +832,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-gtk_stock.patch/src/gui.c'
--- .pc/gnomeradio-gtk_stock.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-gtk_stock.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -253,7 +253,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -265,7 +265,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -296,6 +296,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -320,6 +321,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -885,7 +887,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -899,7 +901,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1369,7 +1371,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1422,6 +1423,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file '.pc/gnomeradio-gtk_stock.patch/src/prefs.c'
--- .pc/gnomeradio-gtk_stock.patch/src/prefs.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-gtk_stock.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -40,7 +40,7 @@
 
 static GtkWidget *device_entry, *mixer_entry;
 static GtkWidget *mute_on_exit_cb;
-static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
 static GtkWidget *audio_profile_combo;
 static GtkWidget *install_plugins_button;
 static GtkWidget *list_view;
@@ -769,11 +769,13 @@
 	GtkTreePath *path = NULL;
 	GtkTreeViewColumn *focus_column = NULL;
 	
-	if (settings.presets == NULL) return;
+	if (settings.presets == NULL)
+		return;
 
 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
 	
-	if (!path) return;
+	if (!path)
+		return;
 
 	row = gtk_tree_path_get_indices(path);
 	g_assert(row);
@@ -811,6 +813,36 @@
 	gtk_widget_set_sensitive(save_button, sel);
 }
 
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
 static void free_presets_list (gpointer data)
 {
 	preset *ps = (preset *) data;
@@ -969,48 +1001,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_free_full (settings.presets, free_presets_list);
-		settings.presets = NULL;
-
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -1018,56 +1053,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-
-			settings.presets = g_list_prepend(settings.presets, ps);
-
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
-	settings.presets = g_list_reverse(settings.presets);
-
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */
@@ -1106,7 +1157,7 @@
 	gtk_widget_destroy(dialog);
 }
 
-gboolean settings_device_cb (gint mode)
+gboolean action_mode (gint mode)
 {
 	switch (mode) {
 		case RADIO_DEVICE:
@@ -1115,6 +1166,9 @@
 		case MIXER_DEVICE:
 			gtk_widget_grab_focus (mixer_entry);
 			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
 		default:
 			break;
 	}
@@ -1134,7 +1188,7 @@
 	GtkWidget *audio_profile_label;
 	GtkWidget *device_label, *mixer_label;
 	GtkWidget *button_box;
-	GtkWidget *open_button, *add_button;
+	GtkWidget *open_button;
 	GtkWidget *scrolled_window;
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;

=== modified file '.pc/gnomeradio-keyboard_shortcuts.patch/src/gui.c'
--- .pc/gnomeradio-keyboard_shortcuts.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-keyboard_shortcuts.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -817,7 +817,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -831,7 +831,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-media_types.patch/src/gui.c'
--- .pc/gnomeradio-media_types.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-media_types.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -241,7 +241,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -253,7 +253,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -284,6 +284,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -308,6 +309,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -829,7 +831,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -843,7 +845,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1310,7 +1312,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1361,6 +1362,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file '.pc/gnomeradio-media_types.patch/src/prefs.c'
--- .pc/gnomeradio-media_types.patch/src/prefs.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-media_types.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -36,7 +36,7 @@
 
 static GtkWidget *device_entry, *mixer_entry;
 static GtkWidget *mute_on_exit_cb;
-static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
 static GtkWidget *list_view;
 static GtkListStore *list_store;
 static GtkTreeSelection *selection;
@@ -641,11 +641,13 @@
 	GtkTreePath *path = NULL;
 	GtkTreeViewColumn *focus_column = NULL;
 	
-	if (settings.presets == NULL) return;
+	if (settings.presets == NULL)
+		return;
 
 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
 	
-	if (!path) return;
+	if (!path)
+		return;
 
 	row = gtk_tree_path_get_indices(path);
 	g_assert(row);
@@ -683,6 +685,36 @@
 	gtk_widget_set_sensitive(save_button, sel);
 }
 
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
 static void free_preset_list(gpointer data, gpointer user_data)
 {
 	preset *ps;
@@ -843,48 +875,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_foreach(settings.presets, free_preset_list, NULL);
-		g_list_free(settings.presets);
-		settings.presets = NULL;
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -892,52 +927,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-			settings.presets = g_list_append(settings.presets, ps);
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */
@@ -976,7 +1031,7 @@
 	gtk_widget_destroy(dialog);
 }
 
-gboolean settings_device_cb (gint mode)
+gboolean action_mode (gint mode)
 {
 	switch (mode) {
 		case RADIO_DEVICE:
@@ -985,6 +1040,9 @@
 		case MIXER_DEVICE:
 			gtk_widget_grab_focus (mixer_entry);
 			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
 		default:
 			break;
 	}
@@ -1005,7 +1063,7 @@
 	GtkWidget *profile_eb;
 	GtkWidget *device_label, *mixer_label;
 	GtkWidget *button_box;
-	GtkWidget *open_button, *add_button;
+	GtkWidget *open_button;
 	GtkWidget *scrolled_window;
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;

=== modified file '.pc/gnomeradio-non_modal.patch/src/gui.c'
--- .pc/gnomeradio-non_modal.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-non_modal.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -817,7 +817,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -831,7 +831,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== added directory '.pc/gnomeradio-preferences.patch'
=== added directory '.pc/gnomeradio-preferences.patch/src'
=== added file '.pc/gnomeradio-preferences.patch/src/prefs.c'
--- .pc/gnomeradio-preferences.patch/src/prefs.c	1970-01-01 00:00:00 +0000
+++ .pc/gnomeradio-preferences.patch/src/prefs.c	2013-09-15 02:42:45 +0000
@@ -0,0 +1,1482 @@
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <gconf/gconf-client.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/pbutils/install-plugins.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <string.h>
+#include "config.h"
+#include "prefs.h"
+#include "trayicon.h"
+#include "gui.h"
+#include "rec_tech.h"
+#include "rb_gst_media_types.h"
+#include "rb_missing_plugins.h"
+
+extern int autodetect;
+
+extern GtkWidget *preset_combo;
+extern GtkAdjustment *adj;
+
+extern int mom_ps;
+extern gnomeradio_settings settings;
+
+extern gboolean main_visible;
+
+static GtkWidget *device_entry;
+static GtkWidget *mixer_entry;
+static GtkWidget *mute_on_exit_cb;
+static GtkWidget *list_view;
+static GtkListStore *list_store;
+static GtkTreeSelection *selection;
+static GtkWidget *save_button;
+static GtkWidget *move_up_button;
+static GtkWidget *move_down_button;
+static GtkWidget *add_button;
+static GtkWidget *remove_button;
+static GtkWidget *audio_profile_combo;
+static GtkWidget *install_button;
+
+gboolean save_settings(void)
+{
+	gint i, count;
+	gchar *buffer;
+	preset *ps;
+	GConfClient* client = NULL;
+	
+	if (!gconf_is_initialized())
+		return FALSE;
+
+	client = gconf_client_get_default();
+	if (!client)
+		return FALSE;
+	
+	/* Store general settings */
+	if (autodetect)
+		gconf_client_set_string(client, "/apps/gnomeradio/device", "auto", NULL);
+	else
+		gconf_client_set_string(client, "/apps/gnomeradio/device", settings.device, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/driver", settings.driver, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/mixer", settings.mixer, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/mute-on-exit", settings.mute_on_exit, NULL);
+	/*gconf_client_set_float(client, "/apps/gnomeradio/volume", volume->value, NULL);*/
+	gconf_client_set_float(client, "/apps/gnomeradio/last-freq", gtk_adjustment_get_value(adj)/STEPS, NULL);
+
+	/* Store recording settings */
+/*	gconf_client_set_string(client, "/apps/gnomeradio/recording/audiodevice", rec_settings.audiodevice, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-as-mp3", rec_settings.mp3, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-rate", rec_settings.rate, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-format", rec_settings.sample, NULL);
+	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-in-stereo", rec_settings.stereo, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/encoder", rec_settings.encoder, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/bitrate", rec_settings.bitrate, NULL);
+*/
+
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/destination", rec_settings.destination, NULL);
+	gconf_client_set_string(client, "/apps/gnomeradio/recording/profile", rec_settings.profile, NULL);
+
+	/* Store the presets */
+	count = g_list_length(settings.presets);
+	gconf_client_set_int(client, "/apps/gnomeradio/presets/presets", count, NULL);
+	for (i = 0; i < count; i++)
+	{
+		ps = g_list_nth_data(settings.presets, i);
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
+		gconf_client_set_string(client, buffer, ps->title, NULL); 
+		g_free(buffer);
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
+		gconf_client_set_float(client, buffer, ps->freq, NULL); 
+		g_free(buffer);
+	}	
+	gconf_client_set_int(client, "/apps/gnomeradio/presets/last", mom_ps, NULL);
+	/*g_print("Storing Settings in GConf database\n");*/
+	
+	return TRUE;
+}			
+
+gboolean load_settings(void)
+{
+	gint i, count;
+	gchar *buffer;
+	preset *ps;
+	GConfClient *client = NULL;
+	double freq;
+	
+	settings.presets = NULL;
+		
+	if (!gconf_is_initialized())
+		return FALSE;
+	
+	client = gconf_client_get_default();
+	if (!client)
+		return FALSE;
+
+	/* Load general settings */
+	settings.device = gconf_client_get_string(client, "/apps/gnomeradio/device" , NULL);
+	if (!settings.device)
+		settings.device = g_strdup("auto");
+	settings.driver = gconf_client_get_string(client, "/apps/gnomeradio/driver" , NULL);
+	if (!settings.driver)
+		settings.driver = g_strdup("any");
+	settings.mixer = gconf_client_get_string(client, "/apps/gnomeradio/mixer", NULL);
+	if (!settings.mixer)
+		settings.mixer = g_strdup("hw:0/Line");
+	settings.mute_on_exit = gconf_client_get_bool(client, "/apps/gnomeradio/mute-on-exit", NULL);
+	/*volume->value = gconf_client_get_float(client, "/apps/gnomeradio/volume", NULL);*/
+	freq = gconf_client_get_float(client, "/apps/gnomeradio/last-freq", NULL);
+	if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
+		gtk_adjustment_set_value(adj, FREQ_MIN * STEPS);
+	else
+		gtk_adjustment_set_value(adj, freq * STEPS);
+	
+	/* Load recording settings */
+/*	rec_settings.audiodevice = gconf_client_get_string(client, "/apps/gnomeradio/recording/audiodevice", NULL);
+	if (!rec_settings.audiodevice)
+		rec_settings.audiodevice = g_strdup("/dev/audio");
+	rec_settings.mp3 = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-as-mp3", NULL);
+	rec_settings.rate = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-rate", NULL);
+	if (!rec_settings.rate)
+		rec_settings.rate = g_strdup("44100");
+	rec_settings.sample = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-format", NULL);
+	if (!rec_settings.sample)
+		rec_settings.sample = g_strdup("16");
+	rec_settings.stereo = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-in-stereo", NULL);
+	rec_settings.encoder = gconf_client_get_string(client, "/apps/gnomeradio/recording/encoder", NULL);
+	if (!rec_settings.encoder)
+		rec_settings.encoder = g_strdup("oggenc");
+	rec_settings.bitrate = gconf_client_get_string(client, "/apps/gnomeradio/recording/bitrate", NULL);
+	if (!rec_settings.bitrate)
+		rec_settings.bitrate = g_strdup("192");*/
+
+	rec_settings.destination = gconf_client_get_string(client, "/apps/gnomeradio/recording/destination", NULL);
+	if (!rec_settings.destination)
+		rec_settings.destination = g_strdup(g_get_home_dir());
+	rec_settings.profile = gconf_client_get_string(client, "/apps/gnomeradio/recording/profile", NULL);
+	if (!rec_settings.profile)
+		rec_settings.profile = g_strdup("audio/x-vorbis");
+	
+	/* Load the presets */
+	count = gconf_client_get_int(client, "/apps/gnomeradio/presets/presets", NULL);
+	for (i = 0; i < count; i++)
+	{
+		ps = malloc(sizeof(preset));
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
+		ps->title = gconf_client_get_string(client, buffer, NULL); 
+		g_free(buffer);
+		if (!ps->title)
+			ps->title = g_strdup(_("unnamed"));
+		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
+		freq = gconf_client_get_float(client, buffer, NULL); 
+		if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
+			ps->freq = FREQ_MIN;
+		else
+			ps->freq = freq;
+		g_free(buffer);
+		settings.presets = g_list_prepend(settings.presets, (gpointer)ps);
+	}	
+	settings.presets = g_list_reverse(settings.presets);
+
+	mom_ps = gconf_client_get_int(client, "/apps/gnomeradio/presets/last", NULL);
+	if (mom_ps >= count)
+		mom_ps = -1;
+
+	return TRUE;
+}			
+	
+static void mute_on_exit_toggled_cb(GtkWidget* widget, gpointer data)
+{
+	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb));
+}	
+
+static gboolean device_entry_activate_cb(GtkWidget *widget, gpointer data)
+{
+	const gchar *text;
+
+	text = gtk_entry_get_text(GTK_ENTRY(device_entry));
+
+	if (!strcmp(settings.device, text) || (text[0] == '\0'))
+		return FALSE;
+	
+	if (settings.device)
+		g_free(settings.device);
+
+	settings.device = g_strdup(text);
+	
+	start_radio(TRUE, data);
+	
+	return FALSE;
+}
+
+static void
+device_entry_auto_activate_cb(GtkEntry* entry, const gchar* text, gpointer data)
+{
+	GtkEditable *editable;
+
+	editable = GTK_EDITABLE (entry);
+
+	text = gtk_entry_get_text(GTK_ENTRY(device_entry));
+
+	autodetect = 0;
+	if (0 == strcmp(text, "auto")) {
+		g_signal_emit_by_name(G_OBJECT (editable), "activate");
+		autodetect = 1;
+
+		gtk_widget_grab_focus(add_button);
+	}
+}
+
+static gboolean mixer_entry_activate_cb(GtkWidget *widget, gpointer data)
+{
+	const gchar *text;
+
+	text = gtk_entry_get_text(GTK_ENTRY(mixer_entry));
+
+	if (!strcmp(settings.mixer, text) || (text[0] == '\0'))
+		return FALSE;
+	
+	if (settings.mixer)
+		g_free(settings.mixer);
+
+	settings.mixer = g_strdup(text);
+	
+	start_mixer(TRUE, data);
+	
+	return FALSE;
+}
+
+/*static gboolean bitrate_combo_change_cb(GtkComboBox *combo, gpointer data)
+{
+	GList *bitrates;
+	gint active;
+	gchar *bitrate;
+
+	g_assert(combo);
+	bitrates = g_object_get_data(G_OBJECT(combo), "bitrates");
+	active = gtk_combo_box_get_active(combo);
+	g_assert(active > -1);
+	
+	bitrate = (gchar*)g_list_nth_data(bitrates, active);
+	g_assert(bitrate);
+
+	if (rec_settings.bitrate) g_free(rec_settings.bitrate);
+	rec_settings.bitrate = g_strdup(bitrate);
+	
+	return FALSE;
+}*/
+
+/*static gboolean encoder_combo_change_cb(GtkComboBox *combo, gpointer bitrate_combo)
+{
+	GList *encoders;
+	gint active;
+	gchar *encoder;
+	
+	g_assert(combo);
+	encoders = g_object_get_data(G_OBJECT(combo), "encoders");
+	active = gtk_combo_box_get_active(combo);
+	g_assert(active > -1);
+	
+	encoder = (gchar*)g_list_nth_data(encoders, active);
+	g_assert(encoder);
+
+	if (g_str_equal(encoder, _("Wave file"))) rec_settings.mp3 = FALSE;
+	else {
+		rec_settings.mp3 = TRUE;
+		if (rec_settings.encoder) g_free(rec_settings.encoder);
+		rec_settings.encoder = g_strdup(encoder);
+	}
+	gtk_widget_set_sensitive(bitrate_combo, rec_settings.mp3);
+	
+	return FALSE;
+}*/
+
+static void audio_profile_combo_change_cb(GtkWidget *widget, gpointer user_data)
+{
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	char *media_type = NULL;
+	GstEncodingProfile *profile;
+
+	model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
+	/* get selected media type */
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter) == FALSE)
+		return;
+	gtk_tree_model_get (GTK_TREE_MODEL (model),
+			    &iter,
+			    0, &media_type,
+			    2, &profile,
+			    -1);
+
+	rec_settings.profile = g_strdup(media_type);
+
+	/* indicate whether additional plugins are required to encode in this format */
+	if (rb_gst_check_missing_plugins (profile, NULL, NULL)) {
+		gtk_widget_set_visible (install_button, TRUE);
+
+		gtk_widget_set_sensitive (install_button,
+					gst_install_plugins_supported ());
+	} else {
+		gtk_widget_set_visible (install_button, FALSE);
+	}
+	g_free (media_type);
+}
+
+static void
+audio_profile_chooser_set_active(GtkWidget *widget, const char *profile)
+{
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	gboolean done;
+
+	done = FALSE;
+	model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
+	if (gtk_tree_model_get_iter_first(model, &iter)) {
+		do {
+			char *media_type;
+
+			gtk_tree_model_get(model, &iter, 0, &media_type, -1);
+			if (g_strcmp0(media_type, profile) == 0) {
+				gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget), &iter);
+				done = TRUE;
+			}
+			g_free (media_type);
+		} while (done == FALSE && gtk_tree_model_iter_next(model, &iter));
+	}
+
+	if (done == FALSE) {
+		gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget), NULL);
+	}
+}
+
+static GtkWidget *audio_profile_choose_new(void)
+{
+	GstEncodingTarget *target;
+	const GList *p;
+	GtkWidget *combo;
+	GtkCellRenderer *renderer;
+	GtkTreeModel *model;
+
+	model = GTK_TREE_MODEL(gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER));
+
+	target = rb_gst_get_default_encoding_target();
+	for (p = gst_encoding_target_get_profiles(target); p != NULL; p = p->next) {
+		GstEncodingProfile *profile = GST_ENCODING_PROFILE (p->data);
+		char *media_type;
+
+		media_type = rb_gst_encoding_profile_get_media_type(profile);
+		if (media_type == NULL) {
+			continue;
+		}
+		gtk_tree_store_insert_with_values(GTK_TREE_STORE(model),
+			          		  NULL, NULL, -1,
+			          		  0, media_type,
+			          		  1, gst_encoding_profile_get_description(profile),
+			          		  2, profile, -1);
+		g_free(media_type);
+	}
+
+	combo = gtk_combo_box_new_with_model(model);
+	renderer = gtk_cell_renderer_text_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", 1, NULL);
+
+	return GTK_WIDGET(combo);
+}
+
+static void
+audio_plugin_install_done_cb (gpointer inst, gboolean retry, gpointer user_data)
+{
+	audio_profile_combo_change_cb (audio_profile_combo, user_data);
+}
+
+static void
+audio_profile_install_plugins_cb (GtkWidget *widget, gpointer user_data)
+{
+	GstEncodingProfile *profile;
+	char **details;
+	GClosure *closure;
+
+	/* get profile */
+	profile = rb_gst_get_encoding_profile (rec_settings.profile);
+	if (profile == NULL) {
+		g_free (rec_settings.profile);
+		return;
+	}
+	g_free (rec_settings.profile);
+
+	/* get plugin details */
+	if (rb_gst_check_missing_plugins (profile, &details, NULL) == FALSE) {
+		return;
+	}
+
+	/* attempt installation */
+	closure = g_cclosure_new ((GCallback) audio_plugin_install_done_cb,
+				  g_object_ref (audio_profile_combo),
+				  (GClosureNotify) g_object_unref);
+	g_closure_set_marshal (closure, g_cclosure_marshal_VOID__BOOLEAN);
+
+	rb_missing_plugins_install ((const char **)details, TRUE, closure);
+
+	g_closure_sink (closure);
+	g_strfreev (details);
+}
+
+static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+	preset *ps;
+	gchar *buffer;
+	GtkTreeIter iter = {0};
+	GtkAdjustment* v_scb;
+	GtkTreePath *path = NULL;
+	GtkWidget *menuitem;
+	
+	ps = malloc(sizeof(preset));
+	ps->title = g_strdup(_("unnamed"));
+	ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
+	settings.presets = g_list_append(settings.presets, (gpointer) ps);
+	buffer = g_strdup_printf("%.2f", ps->freq);
+
+	gtk_list_store_append(list_store, &iter);
+	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, ps->title, 1, buffer, -1);
+
+	g_free(buffer);
+	gtk_tree_selection_unselect_all(selection);
+	
+	v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+	gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+	
+	if (main_visible) {
+		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
+		mom_ps = g_list_length(settings.presets) - 1;
+		preset_combo_set_item(mom_ps);
+
+		menuitem = gtk_menu_item_new_with_label(ps->title); 
+			
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);		
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
+		gtk_widget_show(menuitem);
+	}
+
+	buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
+	path = gtk_tree_path_new_from_string(buffer);
+	g_free(buffer);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
+	gtk_tree_path_free(path);
+
+	gtk_widget_set_sensitive(save_button, TRUE);
+}
+
+static void remove_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeViewColumn *focus_column = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+	
+	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
+	
+	if (!path) return;
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	settings.presets = g_list_remove(settings.presets, (gpointer)ps);
+	g_free(ps->title);
+	g_free(ps);
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_remove(list_store, &iter);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		if (--mom_ps < 0) mom_ps = 0;
+		if (settings.presets == NULL) mom_ps = -1;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(*row < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, *row);
+		gtk_widget_destroy(menuitem);
+	}
+	
+	gtk_tree_path_prev(path);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
+	gtk_tree_path_free(path);
+
+	if (settings.presets == NULL) {
+ 		gtk_widget_set_sensitive(save_button, FALSE);
+	} else {
+		gtk_widget_set_sensitive(save_button, TRUE);
+	}
+}
+
+static void move_up_button_clicked_cb(GtkWidget * widget, gpointer data)
+{
+	GtkTreeIter iter, iter2;
+	GtkTreePath *path, *path2;
+	gint pos;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
+	gtk_tree_selection_get_selected(selection, NULL, &iter);
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	path2 = path;
+	gtk_tree_path_prev(path2);
+
+	if (gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter2, path2)) {
+		// we have a previous entry...
+		gtk_list_store_swap(GTK_LIST_STORE(GTK_TREE_MODEL(list_store)), &iter, &iter2);
+	}
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);
+	pos = g_list_index(settings.presets, (gpointer)ps);
+	pos++;
+
+	settings.presets = g_list_remove(settings.presets, (gpointer)ps);
+	settings.presets = g_list_insert(settings.presets, (gpointer)ps, pos);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(preset_combo), *row + 2, ps->title);
+		mom_ps = *row;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(mom_ps < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, mom_ps);
+		gtk_widget_destroy(menuitem);
+		menuitem = gtk_menu_item_new_with_label(ps->title);
+
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, *row + 1);
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
+		gtk_widget_show(menuitem);
+	}
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_path_free(path);
+
+	if (pos - 1 <= 0) {
+		gtk_widget_set_sensitive(move_up_button, FALSE);
+	} else {
+		gtk_widget_set_sensitive(move_up_button, TRUE);
+	}
+	gtk_widget_set_sensitive(move_down_button, TRUE);
+}
+
+static void move_down_button_clicked_cb(GtkWidget * widget, gpointer data)
+{
+	GtkTreeIter iter, iter2;
+	GtkTreePath *path, *path2;
+	gint pos, count;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
+	gtk_tree_selection_get_selected(selection, NULL, &iter);
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	path2 = path;
+	gtk_tree_path_next(path2);
+
+	if (gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter2, path2)) {
+		// we have a next entry...
+		gtk_list_store_swap(GTK_LIST_STORE(GTK_TREE_MODEL(list_store)), &iter, &iter2);
+	}
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);
+
+	count = g_list_length(settings.presets);
+	pos = g_list_index(settings.presets, (gpointer)ps);
+	pos--;
+	if (pos == count)
+		pos = 0;
+
+	settings.presets = g_list_remove(settings.presets, (gpointer)ps);
+	settings.presets = g_list_insert(settings.presets, (gpointer)ps, pos);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(preset_combo), *row, ps->title);
+		mom_ps = *row;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(mom_ps < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, mom_ps);
+		gtk_widget_destroy(menuitem);
+		menuitem = gtk_menu_item_new_with_label(ps->title);
+
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, *row - 1);
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
+		gtk_widget_show(menuitem);
+	}
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_path_free(path);
+
+	if (pos + 2 == gtk_tree_model_iter_n_children(GTK_TREE_MODEL(list_store), NULL)) {
+		gtk_widget_set_sensitive(move_down_button, FALSE);
+	} else {
+		gtk_widget_set_sensitive(move_down_button, TRUE);
+	}
+	gtk_widget_set_sensitive(move_up_button, TRUE);
+}
+
+static void destination_button_clicked_cb(GtkWidget *button, gpointer data)
+{
+	if (rec_settings.destination)
+	{
+		g_free(rec_settings.destination);
+	}
+	rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(button));
+}
+
+static gboolean list_view_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+	if (event->keyval == GDK_KEY_Delete)
+		remove_button_clicked_cb(widget, user_data);
+	if (event->keyval == GDK_KEY_Insert)
+		add_button_clicked_cb(widget, user_data);
+	
+	return FALSE;
+}		
+
+static gboolean button_release_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+	GtkTreePath *path;
+	gint pos;
+	GdkEventButton *event_button;
+	gchar *buffer;
+
+	event_button = (GdkEventButton *) event;
+
+	gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(list_view), event_button->x, event_button->y, &path, NULL, NULL, NULL);
+	if (path != NULL) {
+		buffer = gtk_tree_path_to_string(path);
+		pos = (gint) g_strtod(buffer, NULL);
+		g_free(buffer);
+		gtk_tree_path_free(path);
+
+		if (pos == 0) {
+			gtk_widget_set_sensitive(move_up_button, FALSE);
+		} else {
+			gtk_widget_set_sensitive(move_up_button, TRUE);
+		}
+
+		if (pos + 1 == gtk_tree_model_iter_n_children(GTK_TREE_MODEL(list_store), NULL)) {
+			gtk_widget_set_sensitive(move_down_button, FALSE);
+		} else {
+			gtk_widget_set_sensitive(move_down_button, TRUE);
+		}
+	}
+	return FALSE;
+}
+
+static void name_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	GList* menuitems;
+	GtkWidget *menuitem;
+	
+	path = gtk_tree_path_new_from_string(path_str);
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	if (ps->title) g_free(ps->title);
+	ps->title = g_strdup(new_val);
+
+	if (main_visible) {
+		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
+		gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1, ps->title);
+		mom_ps = *row;
+		preset_combo_set_item(mom_ps);
+
+		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
+		g_assert(mom_ps < g_list_length(menuitems));
+		menuitem = g_list_nth_data(menuitems, mom_ps);
+		gtk_widget_destroy(menuitem);
+		menuitem = gtk_menu_item_new_with_label(ps->title); 
+			
+		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, *row);		
+		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
+		gtk_widget_show(menuitem);
+	}
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, new_val, -1);
+	gtk_tree_path_free(path);	
+}	
+
+static void freq_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	preset *ps;
+	int *row;
+	double value;
+	gchar *freq_str;
+	
+	if (sscanf(new_val, "%lf", &value) != 1) return;
+	
+	if (value < FREQ_MIN) value = FREQ_MIN;
+	if (value > FREQ_MAX) value = FREQ_MAX;
+	value = rint(value * STEPS) / STEPS;
+	
+	freq_str = g_strdup_printf("%.2f", value);
+	
+	path = gtk_tree_path_new_from_string(path_str);
+	
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+	g_assert(*row < g_list_length(settings.presets));
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);	
+	ps->freq = value;
+
+	gtk_adjustment_set_value(adj, value * STEPS);
+	mom_ps = *row;
+	preset_combo_set_item(mom_ps);
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
+	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 1, freq_str, -1);
+	g_free(freq_str);
+	gtk_tree_path_free(path);	
+}	
+
+static void list_view_cursor_changed_cb(GtkWidget *widget, gpointer data)
+{
+	int *row;
+	preset *ps;
+	gint pos;
+	GtkTreePath *path = NULL;
+	GtkTreeViewColumn *focus_column = NULL;
+	
+	if (settings.presets == NULL)
+		return;
+
+	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
+	
+	if (!path)
+		return;
+
+	row = gtk_tree_path_get_indices(path);
+	g_assert(row);
+
+	mom_ps = *row;
+	preset_combo_set_item(mom_ps);
+
+	ps = g_list_nth_data(settings.presets, *row);
+	g_assert(ps);
+
+	pos = g_list_index(settings.presets, (gpointer)ps);
+
+	if (pos == 0) {
+		gtk_widget_set_sensitive(move_up_button, FALSE);
+	} else {
+		gtk_widget_set_sensitive(move_up_button, TRUE);
+	}
+
+	if (pos + 1 == gtk_tree_model_iter_n_children(GTK_TREE_MODEL(list_store), NULL)) {
+			gtk_widget_set_sensitive(move_down_button, FALSE);
+	} else {
+			gtk_widget_set_sensitive(move_down_button, TRUE);
+	}
+	gtk_tree_path_free(path);
+	return;
+}
+
+static void list_view_selection_changed_cb(GtkWidget *widget, gpointer data)
+{
+	gboolean sel;
+
+	sel = gtk_tree_selection_get_selected(selection, NULL, NULL);
+
+	gtk_widget_set_sensitive(remove_button, sel);
+	gtk_widget_set_sensitive(save_button, sel);
+}
+
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
+static void free_presets_list (gpointer data)
+{
+	preset *ps = (preset *) data;
+	g_free (ps->title);
+	g_free (ps);
+}
+
+/* Go through each row and add its data to the xmlDocPtr */
+static gboolean save_to_file_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, xmlNodePtr root, gpointer user_data)
+{
+	gchar *title, *freq, *position;
+	xmlNodePtr current;
+
+	/* get the data stored in the model... */
+	gtk_tree_model_get(model, iter, 0, &title, 1, &freq, -1);
+	/* ...and get the path of the current row */
+	position = gtk_tree_path_to_string(path);
+	/* create a new child of the root node... */
+	/* (note that I'm using a (guchar*) cast; this is because it's the same thing as
+	 * an (xmlChar*) cast, but easier to type) */
+	current = xmlNewChild(root, NULL, (guchar*)"station", NULL);
+	/* ...and set some properties */
+	xmlSetProp(current, (guchar*)"name", (guchar*)title);
+	xmlSetProp(current, (guchar*)"freq", (guchar*)freq);
+	xmlSetProp(current, (guchar*)"position", (guchar*)position);
+	/* free our data we retrieved from the model */
+	g_free(title);
+	g_free(freq);
+	g_free(position);
+
+	/* return FALSE to keep iterating */
+	return FALSE;
+}
+
+/* Function handle saving an xml file; calls save_to_file_foreach */
+static void save_to_file(gchar *filename)
+{
+	GtkTreeModel *model;
+	xmlDocPtr doc;
+	xmlNodePtr root;
+
+	/* create a new doc node */
+	doc = xmlNewDoc((guchar*)"1.0");
+	/* create a new root element. */
+	root = xmlNewDocNode(doc, NULL, (guchar*)"gnomeradio", NULL);
+	/* set it as the root element */
+	xmlDocSetRootElement(doc, root);
+	/* get the tree view's model... */
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(list_view));
+	/* ...and go through it with a foreach */
+	gtk_tree_model_foreach(model, (GtkTreeModelForeachFunc)save_to_file_foreach, (gpointer)root);
+	/* save the actual file */
+	xmlSaveFile(filename, doc);
+	/* free the doc node */
+	xmlFreeDoc(doc);
+}
+
+/* Callback for the "Save to file" button; calls save_to_file */
+static void save_to_file_cb(GtkWidget *button, gpointer data)
+{
+	GtkWidget *dialog;
+	GtkFileFilter *file_filter_all;
+	GtkFileFilter *file_filter_xml;
+	gchar *filename;
+
+	dialog = gtk_file_chooser_dialog_new (_("Select file name\xE2\x80\xA6"), NULL,
+					      GTK_FILE_CHOOSER_ACTION_SAVE,
+					      _("_Save"), GTK_RESPONSE_ACCEPT,
+					      _("_Cancel"), GTK_RESPONSE_CANCEL,
+					      NULL);
+
+	file_filter_all = gtk_file_filter_new();
+	gtk_file_filter_set_name(file_filter_all, _("All Files"));
+	gtk_file_filter_add_pattern(file_filter_all, "*");
+	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_all);
+
+	file_filter_xml = gtk_file_filter_new();
+	gtk_file_filter_set_name(file_filter_xml, _("XML Files (*.xml)"));
+	gtk_file_filter_add_pattern(file_filter_xml, "*.xml");
+	gtk_file_filter_add_pattern(file_filter_xml, "*.XML");
+	gtk_file_filter_add_mime_type(file_filter_xml, "text/xml");
+	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
+
+	gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
+        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
+	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "gnomeradio.xml");
+
+	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+		/* Check if .xml extension is added, if not add */
+		if (!g_str_has_suffix(filename, ".xml")) {
+			char *tmp_file;
+			/* create copy of filename to release it and create a new one, using old name */
+			tmp_file = g_strdup(filename);
+			g_free(filename);
+        		filename = g_strdup_printf("%s.xml", tmp_file);
+			g_free(tmp_file);
+		}
+		save_to_file(filename);
+		g_free(filename);
+	}
+	gtk_widget_destroy(dialog);
+}
+
+/* Gets the parent of a path string.
+* passing "0:1:2" would return "0:1",
+* passing "0:1" would return "0",
+* passing "0" would return NULL */
+gchar *gtk_tree_path_string_get_parent(gchar *path)
+{
+	gchar *colon;
+
+	g_return_val_if_fail(path != NULL, NULL);
+
+	colon = g_strrstr(path, ":");
+	if (colon == NULL)
+		  return NULL;
+
+	return g_strndup(path, colon - path);
+}
+
+/* Make sure that path exists within model */
+static void gtk_tree_model_generate_path(GtkTreeModel *model, gchar *path)
+{
+	GtkTreeIter iter, parent;
+	gchar *temp;
+
+	while (TRUE) {
+		/* if this returns TRUE, then this path exists and we're fine */
+		if (gtk_tree_model_get_iter_from_string(model, &iter, path))
+			break;
+
+		temp = path;
+		path = gtk_tree_path_string_get_parent(path);
+		/* if there's no parent, then it's toplevel */
+		if (path == NULL) {
+			if (GTK_IS_TREE_STORE(model))
+				gtk_tree_store_append(GTK_TREE_STORE(model), &parent, NULL);
+			else
+				gtk_list_store_append(GTK_LIST_STORE(model), &parent);
+				gtk_tree_model_generate_path(model, temp);
+				break;
+		}
+		if (GTK_IS_TREE_STORE(model)) {
+			gtk_tree_model_generate_path(model, path);
+			gtk_tree_model_get_iter_from_string(model, &parent, path);
+			gtk_tree_store_append(GTK_TREE_STORE(model), &iter, &parent);
+		}
+	}
+}
+
+/* Function to load from an xml file */
+static void load_from_file(gchar *filename)
+{
+	xmlDocPtr doc;
+	xmlNodePtr current;
+	xmlChar *title, *freq, *position;
+	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
+	GList* menuitems;
+	GtkWidget *menuitem;
+
+	/* load the file */
+	doc = xmlParseFile(filename);
+	/* get the root item */
+	if (doc == NULL)
+		return;
+
+	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
+
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
+		xmlFreeDoc(doc);
+		return;
+	}
+
+	/* remove previous presets */
+	if (settings.presets != NULL) {
+		if (main_visible) {
+			gint i, count;
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
+			for (i = 0; i < count - 6; i++) {
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
+			}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
+       	}
+
+	/* get the tree view's model */
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(list_view));
+
+	/* iterate through the root's children items */
+	current = current->xmlChildrenNode;
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
+			}
+			current = current->next;
+		}
+	}
+	/* free the doc node */
+	xmlFreeDoc(doc);
+
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
+	gtk_widget_set_sensitive(save_button, TRUE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
+}
+
+/* Callback for the "Load from file" button; calls load_from_file */
+static void load_from_file_cb(GtkWidget *button, gpointer data)
+{
+	GtkWidget *dialog;
+	GtkFileFilter *file_filter_all;
+	GtkFileFilter *file_filter_xml;
+	gchar *filename;
+
+	dialog = gtk_file_chooser_dialog_new (_("Select file name\xE2\x80\xA6"), NULL,
+					      GTK_FILE_CHOOSER_ACTION_OPEN,
+					      _("_Open"), GTK_RESPONSE_ACCEPT,
+					      _("_Cancel"), GTK_RESPONSE_CANCEL,
+					      NULL);
+
+	file_filter_all = gtk_file_filter_new();
+	gtk_file_filter_set_name(file_filter_all, _("All Files"));
+	gtk_file_filter_add_pattern(file_filter_all, "*");
+	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_all);
+
+	file_filter_xml = gtk_file_filter_new();
+	gtk_file_filter_set_name(file_filter_xml, _("XML Files"));
+	gtk_file_filter_add_pattern(file_filter_xml, "*.xml");
+	gtk_file_filter_add_pattern(file_filter_xml, "*.XML");
+	gtk_file_filter_add_mime_type(file_filter_xml, "text/xml");
+	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
+
+        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
+
+	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+		load_from_file(filename);
+		g_free(filename);
+	}
+	gtk_widget_destroy(dialog);
+}
+
+gboolean action_mode (gint mode)
+{
+	switch (mode) {
+		case RADIO_DEVICE:
+			gtk_widget_grab_focus (device_entry);
+			break;
+		case MIXER_DEVICE:
+			gtk_widget_grab_focus (mixer_entry);
+			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
+		default:
+			break;
+	}
+
+	return TRUE;
+}
+
+GtkWidget* prefs_window(GtkWidget *app)
+{
+	GtkWidget *dialog;
+	GtkWidget *content_area;
+	GtkWidget *box;
+	GtkWidget *grid;
+	GtkWidget *label;
+	GtkWidget *scrolled_window;
+	GtkCellRenderer *cellrenderer;
+	GtkTreeViewColumn *list_column;
+	GtkWidget *button_box;
+	GtkWidget *open_button;
+	GtkWidget *destination_button;
+	GtkWidget *image;
+
+	GstEncodingProfile *profile;
+
+	gint i;
+	gchar *markup;
+	preset* ps;
+	GList *l;
+	
+	dialog = gtk_dialog_new_with_buttons (_("Gnomeradio Settings"), GTK_WINDOW (app),
+					      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					      _("_Close"), GTK_RESPONSE_CLOSE,
+					      _("_Help"), GTK_RESPONSE_HELP,
+					      NULL);
+	
+	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
+	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+
+	content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
+
+	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 15);
+	gtk_container_set_border_width(GTK_CONTAINER(box), 10);
+	gtk_box_pack_start (GTK_BOX (content_area), box, TRUE, TRUE, 0);
+	
+	grid = gtk_grid_new();
+	gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
+	gtk_grid_set_column_spacing(GTK_GRID(grid), 20);
+	gtk_box_pack_start(GTK_BOX(box), grid, TRUE, TRUE, 0);
+
+	/* The general settings part */
+	label = gtk_label_new (NULL);
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("General Settings"));
+	gtk_label_set_markup (GTK_LABEL (label), markup);
+	g_free (markup);
+	gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 2, 1);
+
+	label = gtk_label_new ("");
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 3);
+
+	label = gtk_label_new (_("Radio Device:"));
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1);
+
+	device_entry = gtk_entry_new();
+	if (autodetect)
+		gtk_entry_set_placeholder_text(GTK_ENTRY(device_entry), "auto");
+	else
+		gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
+	gtk_grid_attach(GTK_GRID(grid), device_entry, 2, 1, 1, 1);
+
+	label = gtk_label_new (_("Mixer Source:"));
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_grid_attach (GTK_GRID (grid), label, 1, 2, 1, 1);
+
+	mixer_entry = gtk_entry_new();
+	gtk_entry_set_text(GTK_ENTRY(mixer_entry), settings.mixer);
+	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 2, 2, 1, 1);
+
+	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit"));
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
+
+	gtk_grid_attach(GTK_GRID(grid), mute_on_exit_cb, 1, 3, 1, 1);
+
+	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
+	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
+	g_signal_connect(G_OBJECT(device_entry), "changed", G_CALLBACK(device_entry_auto_activate_cb), NULL);
+	g_signal_connect(G_OBJECT(mixer_entry), "hide", G_CALLBACK(mixer_entry_activate_cb), app);
+	g_signal_connect(G_OBJECT(mixer_entry), "activate", G_CALLBACK(mixer_entry_activate_cb), NULL);
+	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
+
+	gtk_widget_set_tooltip_text(device_entry, _("The radio device to use (e.g. /dev/radio0)"));
+	gtk_widget_set_tooltip_text(mixer_entry, _("The mixer device and channel to use (e.g. hw:0/Line)"));
+	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("Mute mixer device on exit"));
+
+	/* The presets part */
+	label = gtk_label_new (NULL);
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Presets"));
+	gtk_label_set_markup (GTK_LABEL (label), markup);
+	g_free (markup);
+	gtk_grid_attach(GTK_GRID(grid), label, 0, 4, 2, 1);
+
+	label = gtk_label_new ("");
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 2);
+
+	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled_window), 75);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+	list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+	list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
+	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(list_view), TRUE);
+	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list_view), FALSE);
+
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
+	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+	gtk_container_add(GTK_CONTAINER(scrolled_window), list_view);
+
+	g_signal_connect(G_OBJECT(list_view), "button-release-event", G_CALLBACK(button_release_cb), NULL);
+	g_signal_connect(G_OBJECT(list_view), "key-press-event", G_CALLBACK(list_view_key_press_event_cb), NULL);
+	g_signal_connect(G_OBJECT(list_view), "cursor-changed", G_CALLBACK(list_view_cursor_changed_cb), NULL);
+
+	g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(list_view_selection_changed_cb), list_view);
+
+	/*gtk_tree_selection_select_path(selection, gtk_tree_path_new_from_string("0"));
+	gtk_tree_selection_set_select_function(selection, (GtkTreeSelectionFunc)list_view_select_cb, NULL, NULL);*/
+	
+	cellrenderer = gtk_cell_renderer_text_new();
+	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
+	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
+	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 0, NULL);
+	gtk_tree_view_column_set_reorderable(list_column, TRUE);
+	gtk_tree_view_column_set_expand(list_column, TRUE);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
+
+	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(name_cell_edited_cb), NULL);
+
+	cellrenderer = gtk_cell_renderer_text_new();
+	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
+	g_object_set(G_OBJECT(cellrenderer), "xalign", 1.0, NULL);
+	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
+	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 1, NULL);
+	gtk_tree_view_column_set_reorderable(list_column, TRUE);
+	gtk_tree_view_column_set_expand(list_column, FALSE);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
+
+	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(freq_cell_edited_cb), NULL);
+
+	i = 0;
+	for (l = settings.presets; l != NULL; l = l->next) {
+		GtkTreeIter iter = {0};
+		char *buffer;
+		ps = l->data;
+		buffer = g_strdup_printf("%0.2f", ps->freq);
+		gtk_list_store_append(list_store, &iter);
+		gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, ps->title, 1, buffer, -1);
+		g_free(buffer);
+		i++;
+	}
+
+	gtk_grid_attach(GTK_GRID(grid), scrolled_window, 1, 5, 2, 2);
+
+	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+
+	move_up_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("go-up", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON (move_up_button), image);
+	gtk_button_set_relief (GTK_BUTTON (move_up_button), GTK_RELIEF_NONE);
+	gtk_widget_set_sensitive(move_up_button, FALSE);
+	gtk_widget_set_tooltip_text(move_up_button, _("Move preset up"));
+
+	g_signal_connect(G_OBJECT(move_up_button), "clicked", G_CALLBACK(move_up_button_clicked_cb), NULL);
+
+	move_down_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("go-down", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON (move_down_button), image);
+	gtk_button_set_relief (GTK_BUTTON (move_down_button), GTK_RELIEF_NONE);
+	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_tooltip_text(move_down_button, _("Move preset down"));
+
+	g_signal_connect(G_OBJECT(move_down_button), "clicked", G_CALLBACK(move_down_button_clicked_cb), NULL);
+
+	add_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("list-add", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON(add_button), image);
+	gtk_button_set_relief (GTK_BUTTON (add_button), GTK_RELIEF_NONE);
+	gtk_widget_set_tooltip_text(add_button, _("Add preset"));
+
+	g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(add_button_clicked_cb), NULL);
+
+ 	remove_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("list-remove", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON (remove_button), image);
+	gtk_button_set_relief (GTK_BUTTON (remove_button), GTK_RELIEF_NONE);
+	gtk_widget_set_tooltip_text(remove_button, _("Remove preset"));
+ 	gtk_widget_set_sensitive(remove_button, FALSE);
+
+	g_signal_connect(G_OBJECT(remove_button), "clicked", G_CALLBACK(remove_button_clicked_cb), NULL);
+
+ 	save_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("document-save", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON (save_button), image);
+	gtk_button_set_relief (GTK_BUTTON (save_button), GTK_RELIEF_NONE);
+	gtk_widget_set_tooltip_text(save_button, _("Save to file\xE2\x80\xA6"));
+
+	if (settings.presets == NULL)
+		gtk_widget_set_sensitive (save_button, FALSE);
+	else
+		gtk_widget_set_sensitive (save_button, TRUE);
+
+	g_signal_connect(G_OBJECT(save_button), "clicked", G_CALLBACK(save_to_file_cb), NULL);
+
+ 	open_button = gtk_button_new();
+	image = gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_MENU);
+	gtk_button_set_image (GTK_BUTTON(open_button), image);
+	gtk_button_set_relief (GTK_BUTTON (open_button), GTK_RELIEF_NONE);
+	gtk_widget_set_tooltip_text(open_button, _("Load from file\xE2\x80\xA6"));
+	gtk_widget_set_sensitive(open_button, TRUE);
+
+	g_signal_connect(G_OBJECT(open_button), "clicked", G_CALLBACK(load_from_file_cb), NULL);
+
+	gtk_box_pack_end(GTK_BOX(button_box), move_down_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), move_up_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), remove_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), add_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), save_button, FALSE, FALSE, 0);
+	gtk_box_pack_end(GTK_BOX(button_box), open_button, FALSE, FALSE, 0);
+
+	gtk_grid_attach(GTK_GRID(grid), button_box, 2, 7, 1, 1);
+
+	/* The record settings part */
+	label = gtk_label_new (NULL);
+	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Record Settings"));
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_label_set_markup (GTK_LABEL (label), markup);
+	g_free (markup);
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 8, 2, 1);
+
+	label = gtk_label_new ("");
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 9, 1, 2);
+
+	label = gtk_label_new (_("Destination:"));
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_grid_attach(GTK_GRID(grid), label, 1, 9, 1, 1);
+
+	destination_button = gtk_file_chooser_button_new (_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
+	gtk_grid_attach(GTK_GRID(grid), destination_button, 2, 9, 1, 1);
+
+	label = gtk_label_new (_("Format:"));
+	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_grid_attach (GTK_GRID (grid), label, 1, 10, 1, 1);
+
+	audio_profile_combo = audio_profile_choose_new();
+	audio_profile_chooser_set_active(audio_profile_combo, rec_settings.profile);
+	gtk_grid_attach (GTK_GRID (grid), audio_profile_combo, 2, 10, 1, 1);
+
+	install_button = gtk_button_new_with_label(_("Install additional software required to use this format"));
+	gtk_widget_set_no_show_all (install_button, TRUE);
+	gtk_grid_attach (GTK_GRID (grid), install_button, 2, 11, 1, 1);
+
+	profile = rb_gst_get_encoding_profile (rec_settings.profile);
+	if (rb_gst_check_missing_plugins (profile, NULL, NULL)) {
+		gtk_widget_set_visible (install_button, TRUE);
+		gtk_widget_set_sensitive (install_button,
+					gst_install_plugins_supported ());
+	} else {
+		gtk_widget_set_visible (install_button, FALSE);
+	}
+
+	g_signal_connect(GTK_FILE_CHOOSER(destination_button), "selection-changed", G_CALLBACK(destination_button_clicked_cb), NULL);
+	g_signal_connect(G_OBJECT(audio_profile_combo), "changed", G_CALLBACK(audio_profile_combo_change_cb), NULL);
+	g_signal_connect(G_OBJECT(install_button), "clicked", G_CALLBACK(audio_profile_install_plugins_cb), NULL);
+
+	gtk_widget_set_tooltip_text(destination_button, _("Select a location where to save recorded file."));
+	gtk_widget_set_tooltip_text(audio_profile_combo, _("Choose the format that should be used for recording."));
+
+	gtk_widget_show_all(dialog);
+
+	return dialog;
+}

=== removed directory '.pc/gnomeradio-prefs.patch'
=== removed directory '.pc/gnomeradio-prefs.patch/src'
=== removed file '.pc/gnomeradio-prefs.patch/src/prefs.c'
--- .pc/gnomeradio-prefs.patch/src/prefs.c	2012-06-12 11:44:06 +0000
+++ .pc/gnomeradio-prefs.patch/src/prefs.c	1970-01-01 00:00:00 +0000
@@ -1,736 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <gconf/gconf-client.h>
-#include <glib/gi18n.h>
-#include <libgnome-media-profiles/audio-profile-choose.h>
-#include <string.h>
-#include "config.h"
-#include "prefs.h"
-#include "trayicon.h"
-#include "gui.h"
-#include "rec_tech.h"
-
-extern GtkWidget* mute_button, *preset_combo;
-extern GtkAdjustment *adj;
-
-extern int mom_ps;
-extern gnomeradio_settings settings;
-
-extern gboolean main_visible;
-
-static GtkWidget *device_entry;
-static GtkWidget *mixer_combo;
-static GtkWidget *mute_on_exit_cb;
-static GtkWidget *list_view;
-static GtkListStore *list_store;
-static GtkTreeSelection *selection;
-
-gboolean save_settings(void)
-{
-	gint i, count;
-	gchar *buffer;
-	preset *ps;
-	GConfClient* client = NULL;
-	
-	if (!gconf_is_initialized())
-		return FALSE;
-
-	client = gconf_client_get_default();
-	if (!client)
-		return FALSE;
-	
-	/* Store general settings */
-	gconf_client_set_string(client, "/apps/gnomeradio/device", settings.device, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/driver", settings.driver, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/mixer", settings.mixer, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/mixer-device", settings.mixer_dev, NULL);
-	gconf_client_set_bool(client, "/apps/gnomeradio/mute-on-exit", settings.mute_on_exit, NULL);
-	/*gconf_client_set_float(client, "/apps/gnomeradio/volume", volume->value, NULL);*/
-	gconf_client_set_float(client, "/apps/gnomeradio/last-freq", gtk_adjustment_get_value(adj)/STEPS, NULL);
-
-	/* Store recording settings */
-/*	gconf_client_set_string(client, "/apps/gnomeradio/recording/audiodevice", rec_settings.audiodevice, NULL);
-	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-as-mp3", rec_settings.mp3, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-rate", rec_settings.rate, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/sample-format", rec_settings.sample, NULL);
-	gconf_client_set_bool(client, "/apps/gnomeradio/recording/record-in-stereo", rec_settings.stereo, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/encoder", rec_settings.encoder, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/bitrate", rec_settings.bitrate, NULL);
-*/
-
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/destination", rec_settings.destination, NULL);
-	gconf_client_set_string(client, "/apps/gnomeradio/recording/profile", rec_settings.profile, NULL);
-
-	/* Store the presets */
-	count = g_list_length(settings.presets);
-	gconf_client_set_int(client, "/apps/gnomeradio/presets/presets", count, NULL);
-	for (i=0;i<count;i++)
-	{
-		ps = g_list_nth_data(settings.presets, i);
-		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
-		gconf_client_set_string(client, buffer, ps->title, NULL); 
-		g_free(buffer);
-		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
-		gconf_client_set_float(client, buffer, ps->freq, NULL); 
-		g_free(buffer);
-	}	
-	gconf_client_set_int(client, "/apps/gnomeradio/presets/last", mom_ps, NULL);
-	/*g_print("Storing Settings in GConf database\n");*/
-	
-	return TRUE;
-}			
-
-gboolean load_settings(void)
-{
-	gint i, count;
-	gchar *buffer;
-	preset *ps;
-	GConfClient *client = NULL;
-	double freq;
-	
-	settings.presets = NULL;
-		
-	if (!gconf_is_initialized())
-		return FALSE;
-	
-	client = gconf_client_get_default();
-	if (!client)
-		return FALSE;
-
-	/* Load general settings */
-	settings.device = gconf_client_get_string(client, "/apps/gnomeradio/device" , NULL);
-	if (!settings.device)
-		settings.device = g_strdup("/dev/radio0");
-	settings.driver = gconf_client_get_string(client, "/apps/gnomeradio/driver" , NULL);
-	if (!settings.driver)
-		settings.driver = g_strdup("any");
-	settings.mixer = gconf_client_get_string(client, "/apps/gnomeradio/mixer", NULL);
-	if (!settings.mixer)
-		settings.mixer = g_strdup("line");
-	settings.mixer_dev = gconf_client_get_string(client, "/apps/gnomeradio/mixer-device", NULL);
-	if (!settings.mixer_dev)
-		settings.mixer_dev = g_strdup("/dev/mixer");
-	settings.mute_on_exit = gconf_client_get_bool(client, "/apps/gnomeradio/mute-on-exit", NULL);
-	/*volume->value = gconf_client_get_float(client, "/apps/gnomeradio/volume", NULL);*/
-	freq = gconf_client_get_float(client, "/apps/gnomeradio/last-freq", NULL);
-	if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
-		gtk_adjustment_set_value(adj, FREQ_MIN * STEPS);
-	else
-		gtk_adjustment_set_value(adj, freq * STEPS);
-	
-	/* Load recording settings */
-/*	rec_settings.audiodevice = gconf_client_get_string(client, "/apps/gnomeradio/recording/audiodevice", NULL);
-	if (!rec_settings.audiodevice)
-		rec_settings.audiodevice = g_strdup("/dev/audio");
-	rec_settings.mp3 = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-as-mp3", NULL);
-	rec_settings.rate = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-rate", NULL);
-	if (!rec_settings.rate)
-		rec_settings.rate = g_strdup("44100");
-	rec_settings.sample = gconf_client_get_string(client, "/apps/gnomeradio/recording/sample-format", NULL);
-	if (!rec_settings.sample)
-		rec_settings.sample = g_strdup("16");
-	rec_settings.stereo = gconf_client_get_bool(client, "/apps/gnomeradio/recording/record-in-stereo", NULL);
-	rec_settings.encoder = gconf_client_get_string(client, "/apps/gnomeradio/recording/encoder", NULL);
-	if (!rec_settings.encoder)
-		rec_settings.encoder = g_strdup("oggenc");
-	rec_settings.bitrate = gconf_client_get_string(client, "/apps/gnomeradio/recording/bitrate", NULL);
-	if (!rec_settings.bitrate)
-		rec_settings.bitrate = g_strdup("192");*/
-
-	rec_settings.destination = gconf_client_get_string(client, "/apps/gnomeradio/recording/destination", NULL);
-	if (!rec_settings.destination)
-		rec_settings.destination = g_strdup(g_get_home_dir());
-	rec_settings.profile = gconf_client_get_string(client, "/apps/gnomeradio/recording/profile", NULL);
-	if (!rec_settings.profile)
-		rec_settings.profile = g_strdup("cdlossy");
-	
-	/* Load the presets */
-	count = gconf_client_get_int(client, "/apps/gnomeradio/presets/presets", NULL);
-	for (i=0;i<count;i++)
-	{
-		ps = malloc(sizeof(preset));
-		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/name", i);
-		ps->title = gconf_client_get_string(client, buffer, NULL); 
-		g_free(buffer);
-		if (!ps->title)
-			ps->title = g_strdup(_("unnamed"));
-		buffer = g_strdup_printf("/apps/gnomeradio/presets/%d/freqency", i);
-		freq = gconf_client_get_float(client, buffer, NULL); 
-		if ((freq < FREQ_MIN) || (freq > FREQ_MAX))
-			ps->freq = FREQ_MIN;
-		else
-			ps->freq = freq;
-		g_free(buffer);
-		settings.presets = g_list_append(settings.presets, (gpointer)ps);	
-	}	
-	mom_ps = gconf_client_get_int(client, "/apps/gnomeradio/presets/last", NULL);
-	if (mom_ps >= count)
-		mom_ps = -1;
-
-	return TRUE;
-}			
-	
-static void mute_on_exit_toggled_cb(GtkWidget* widget, gpointer data)
-{
-	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb));
-}	
-
-static gboolean device_entry_activate_cb(GtkWidget *widget, gpointer data)
-{
-	const gchar *text = gtk_entry_get_text(GTK_ENTRY(device_entry));
-
-	if (!strcmp(settings.device, text)) return FALSE;
-	
-	if (settings.device) g_free(settings.device);
-	settings.device = g_strdup(text);
-	
-	start_radio(TRUE, data);
-	
-	return FALSE;
-}
-
-static gboolean mixer_combo_change_cb(GtkComboBox *combo, gpointer data)
-{
-	GList *mixer_devs;
-	int active;
-	gchar *mixer_dev, *tmp;
-	
-	g_assert(combo);
-	mixer_devs = g_object_get_data(G_OBJECT(combo), "mixer_devs");
-	active = gtk_combo_box_get_active(combo);
-	g_assert(active > -1);
-	
-	mixer_dev = (gchar*)g_list_nth_data(mixer_devs, active);
-	g_assert(mixer_dev);
-	
-	if (g_str_equal(mixer_dev, settings.mixer))
-		return FALSE;
-
-	if (settings.mixer) g_free(settings.mixer);
-	settings.mixer = g_strdup(mixer_dev);
-	
-	if ((tmp = strstr(settings.mixer, " (")))
-		tmp[0] = '\0';
-	
-	start_mixer(TRUE, data);
-	
-	return FALSE;
-}
-
-/*static gboolean bitrate_combo_change_cb(GtkComboBox *combo, gpointer data)
-{
-	GList *bitrates;
-	gint active;
-	gchar *bitrate;
-
-	g_assert(combo);
-	bitrates = g_object_get_data(G_OBJECT(combo), "bitrates");
-	active = gtk_combo_box_get_active(combo);
-	g_assert(active > -1);
-	
-	bitrate = (gchar*)g_list_nth_data(bitrates, active);
-	g_assert(bitrate);
-
-	if (rec_settings.bitrate) g_free(rec_settings.bitrate);
-	rec_settings.bitrate = g_strdup(bitrate);
-	
-	return FALSE;
-}*/
-
-/*static gboolean encoder_combo_change_cb(GtkComboBox *combo, gpointer bitrate_combo)
-{
-	GList *encoders;
-	gint active;
-	gchar *encoder;
-	
-	g_assert(combo);
-	encoders = g_object_get_data(G_OBJECT(combo), "encoders");
-	active = gtk_combo_box_get_active(combo);
-	g_assert(active > -1);
-	
-	encoder = (gchar*)g_list_nth_data(encoders, active);
-	g_assert(encoder);
-
-	if (g_str_equal(encoder, _("Wave file"))) rec_settings.mp3 = FALSE;
-	else {
-		rec_settings.mp3 = TRUE;
-		if (rec_settings.encoder) g_free(rec_settings.encoder);
-		rec_settings.encoder = g_strdup(encoder);
-	}
-	gtk_widget_set_sensitive(bitrate_combo, rec_settings.mp3);
-	
-	return FALSE;
-}*/
-
-static gboolean profile_combo_change_cb(GtkComboBox *combo, gpointer userdata)
-{
-	GMAudioProfile* profile = gm_audio_profile_choose_get_active(GTK_WIDGET(combo));
-
-	g_assert(rec_settings.profile);
-	g_free(rec_settings.profile);
-	rec_settings.profile = g_strdup(gm_audio_profile_get_id(profile));
-
-	return FALSE;
-}
-
-static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
-	preset *ps;
-	gchar *buffer;
-	GtkTreeIter iter = {0};
-	GtkAdjustment* v_scb;
-	GtkTreePath *path = NULL;
-	GList* menuitems;
-	GtkWidget *menuitem;
-	
-	ps = malloc(sizeof(preset));
-	ps->title = g_strdup(_("unnamed"));
-	ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
-	settings.presets = g_list_append(settings.presets, (gpointer) ps);
-	buffer = g_strdup_printf("%.2f", ps->freq);
-
-	gtk_list_store_append(list_store, &iter);
-	gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);
-
-	g_free(buffer);
-	gtk_tree_selection_unselect_all(selection);
-	
-	v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
-	gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
-	
-	if (main_visible) {
-		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-		mom_ps = g_list_length(settings.presets) - 1;
-		preset_combo_set_item(mom_ps);
-
-		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-		menuitem = gtk_menu_item_new_with_label(ps->title); 
-			
-		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);		
-		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
-		gtk_widget_show(menuitem);
-	}
-
-	buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
-	path = gtk_tree_path_new_from_string(buffer);
-	g_free(buffer);
-	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
-	gtk_tree_path_free(path);
-}
-
-
-static void del_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
-	GtkTreePath *path = NULL;
-	GtkTreeViewColumn *focus_column = NULL;
-	GtkTreeIter iter;
-	preset *ps;
-	int *row;
-	GList* menuitems;
-	GtkWidget *menuitem;
-	
-	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
-	
-	if (!path) return;
-
-	row = gtk_tree_path_get_indices(path);
-	g_assert(row);
-	g_assert(*row < g_list_length(settings.presets));
-
-	ps = g_list_nth_data(settings.presets, *row);
-	g_assert(ps);	
-	settings.presets = g_list_remove(settings.presets, (gpointer)ps);
-	g_free(ps->title);
-	g_free(ps);
-	
-	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
-	gtk_list_store_remove(list_store, &iter);
-
-	if (main_visible) {
-		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
-		if (--mom_ps < 0) mom_ps = 0;
-		if (!g_list_length(settings.presets)) mom_ps = -1;
-		preset_combo_set_item(mom_ps);
-
-		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-		g_assert(*row < g_list_length(menuitems));
-		menuitem = g_list_nth_data(menuitems, *row);
-		gtk_widget_destroy(menuitem);
-	}
-	
-	gtk_tree_path_prev(path);
-	gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
-	gtk_tree_path_free(path);	
-}
-
-static void destination_button_clicked_cb(GtkWidget *button, gpointer data)
-{
-	GtkWidget *dialog;
-	
-	dialog = gtk_file_chooser_dialog_new(_("Choose a destination folder"), NULL, 
-					GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
-					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
-					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
-					NULL);
-	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), rec_settings.destination);
-	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-		if (rec_settings.destination) g_free(rec_settings.destination);
-		rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-		gtk_button_set_label(GTK_BUTTON(button), rec_settings.destination);
-	}
-	
-	gtk_widget_destroy (dialog);
-}
-
-static gboolean list_view_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
-{
-	if (event->keyval == GDK_KEY_Delete)
-		del_button_clicked_cb(widget, user_data);
-	if (event->keyval == GDK_KEY_Insert)
-		add_button_clicked_cb(widget, user_data);
-	
-	return FALSE;
-}		
-
-static void name_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
-{
-	GtkTreePath *path = NULL;
-	GtkTreeIter iter;
-	preset *ps;
-	int *row;
-	GList* menuitems;
-	GtkWidget *menuitem;
-	
-	path = gtk_tree_path_new_from_string(path_str);
-
-	row = gtk_tree_path_get_indices(path);
-	g_assert(row);
-	g_assert(*row < g_list_length(settings.presets));
-
-	ps = g_list_nth_data(settings.presets, *row);
-	g_assert(ps);	
-	if (ps->title) g_free(ps->title);
-	ps->title = g_strdup(new_val);
-
-	if (main_visible) {
-		gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1);
-		gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(preset_combo), *row + 1, ps->title);
-		mom_ps = *row;
-		preset_combo_set_item(mom_ps);
-
-		menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-		g_assert(mom_ps < g_list_length(menuitems));
-		menuitem = g_list_nth_data(menuitems, mom_ps);
-		gtk_widget_destroy(menuitem);
-		menuitem = gtk_menu_item_new_with_label(ps->title); 
-			
-		gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, *row);		
-		g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
-		gtk_widget_show(menuitem);
-	}
-	
-	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
-	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, new_val, -1);
-	gtk_tree_path_free(path);	
-}	
-
-static void freq_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str, gchar *new_val, gpointer user_data)
-{
-	GtkTreePath *path = NULL;
-	GtkTreeIter iter;
-	preset *ps;
-	int *row;
-	double value;
-	gchar *freq_str;
-	
-	if (sscanf(new_val, "%lf", &value) != 1) return;
-	
-	if (value < FREQ_MIN) value = FREQ_MIN;
-	if (value > FREQ_MAX) value = FREQ_MAX;
-	value = rint(value * STEPS) / STEPS;
-	
-	freq_str = g_strdup_printf("%.2f", value);
-	
-	path = gtk_tree_path_new_from_string(path_str);
-	
-	row = gtk_tree_path_get_indices(path);
-	g_assert(row);
-	g_assert(*row < g_list_length(settings.presets));
-
-	ps = g_list_nth_data(settings.presets, *row);
-	g_assert(ps);	
-	ps->freq = value;
-
-	gtk_adjustment_set_value(adj, value * STEPS);
-	mom_ps = *row;
-	preset_combo_set_item(mom_ps);
-	
-	gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path);
-	gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 1, freq_str, -1);
-	g_free(freq_str);
-	gtk_tree_path_free(path);	
-}	
-
-static void
-list_view_cursor_changed_cb(GtkWidget *widget, gpointer data)
-{
-	int *row;
-	GtkTreePath *path = NULL;
-	GtkTreeViewColumn *focus_column = NULL;
-	
-	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
-	
-	if (!path) return;
-
-	row = gtk_tree_path_get_indices(path);
-	g_assert(row);
-
-	mom_ps = *row;
-	preset_combo_set_item(mom_ps);
-	return;
-}
-
-static void free_string_list(GList *list)
-{
-	if (!list) return;
-	g_list_foreach(list, (GFunc)g_free, NULL);
-	g_list_free(list);
-}
-
-GtkWidget* prefs_window(GtkWidget *app)
-{
-	GtkWidget *dialog;
-	GtkWidget *box, *sbox, *pbox, *rbox;
-	GtkWidget *settings_box, *presets_box, *record_box;
-	GtkWidget *settings_label, *presets_label, *record_label;
-	GtkWidget *s_indent_label, *p_indent_label, *r_indent_label;
-	GtkWidget *destination_label;
-	GtkWidget *destination_button;
-	GtkWidget *profile_combo;
-	GtkWidget *mixer_eb, *profile_eb;
-	GtkWidget *preset_box;
-	GtkWidget *settings_table, *record_table;
-	GtkWidget *device_label, *mixer_label;
-	GtkWidget *button_box;
-	GtkWidget *add_button, *del_button;
-	GtkWidget *scrolled_window;
-	GtkCellRenderer *cellrenderer;
-	GtkTreeViewColumn *list_column;
-	GList *mixer_devs, *profiles, *ptr;
-	gint i, active;
-	char *settings_hdr, *presets_hdr, *record_hdr;
-	preset* ps;
-	
-	dialog = gtk_dialog_new_with_buttons(_("Gnomeradio Settings"), GTK_WINDOW(app), 
-			GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-			GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, 
-			GTK_STOCK_HELP, GTK_RESPONSE_HELP,
-			NULL);
-	
-	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
-	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
-
-	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
-	gtk_container_set_border_width(GTK_CONTAINER(box), 12);
-	gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), box, TRUE, TRUE, 0);
-	
-	settings_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_box_pack_start(GTK_BOX(box), settings_box, TRUE, TRUE, 0);
-
-	settings_hdr = g_strconcat("<span weight=\"bold\">", _("General Settings"), "</span>", NULL);
-	settings_label = gtk_label_new(settings_hdr);
-	gtk_misc_set_alignment(GTK_MISC(settings_label), 0, 0.5);
-	gtk_label_set_use_markup(GTK_LABEL(settings_label), TRUE);
-	g_free(settings_hdr);
-	gtk_box_pack_start(GTK_BOX(settings_box), settings_label, TRUE, TRUE, 0);
-
-	presets_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_box_pack_start(GTK_BOX(box), presets_box, TRUE, TRUE, 0);
-
-	presets_hdr = g_strconcat("<span weight=\"bold\">", _("Presets"), "</span>", NULL);
-	presets_label = gtk_label_new(presets_hdr);
-	gtk_misc_set_alignment(GTK_MISC(presets_label), 0, 0.5);
-	gtk_label_set_use_markup(GTK_LABEL(presets_label), TRUE);
-	g_free(presets_hdr);
-	gtk_box_pack_start(GTK_BOX(presets_box), presets_label, TRUE, TRUE, 0);
-
-	record_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_box_pack_start(GTK_BOX(box), record_box, TRUE, TRUE, 0);
-
-	record_hdr = g_strconcat("<span weight=\"bold\">", _("Record Settings"), "</span>", NULL);
-	record_label = gtk_label_new(record_hdr);
-	gtk_misc_set_alignment(GTK_MISC(record_label), 0, 0.5);
-	gtk_label_set_use_markup(GTK_LABEL(record_label), TRUE);
-	g_free(record_hdr);
-	gtk_box_pack_start(GTK_BOX(record_box), record_label, TRUE, TRUE, 0);
-
-	/* The general settings part */
-	sbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(settings_box), sbox, TRUE, TRUE, 0);
-	s_indent_label = gtk_label_new("    ");
-	gtk_box_pack_start(GTK_BOX(sbox), s_indent_label, FALSE, FALSE, 0);
-	
-	settings_table = gtk_table_new(3, 2, FALSE);
-	gtk_table_set_row_spacings(GTK_TABLE(settings_table), 5);
-	gtk_table_set_col_spacings(GTK_TABLE(settings_table), 15);
-	gtk_box_pack_start(GTK_BOX(sbox), settings_table, TRUE, TRUE, 0);
-	
-	device_label = gtk_label_new(_("Radio Device:"));
-	gtk_misc_set_alignment(GTK_MISC(device_label), 0.0f, 0.5f); 
-	device_entry = gtk_entry_new();
-	gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
-	gtk_table_attach_defaults(GTK_TABLE(settings_table), device_label, 0, 1, 0, 1);
-	gtk_table_attach_defaults(GTK_TABLE(settings_table), device_entry, 1, 2, 0, 1);
-
-	mixer_label = gtk_label_new(_("Mixer Source:"));
-	gtk_misc_set_alignment(GTK_MISC(mixer_label), 0.0f, 0.5f);
-	mixer_eb = gtk_event_box_new();
-	mixer_combo = gtk_combo_box_text_new();
-	gtk_container_add(GTK_CONTAINER(mixer_eb), mixer_combo);
-	ptr = mixer_devs = get_mixer_recdev_list();
-	for (i = 0, active = 0; ptr; ptr = g_list_next(ptr)) {
-		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mixer_combo), ptr->data);
-		if (g_str_equal(ptr->data, settings.mixer)) active = i;
-		++i;
-	}
-	gtk_combo_box_set_active(GTK_COMBO_BOX(mixer_combo), active);
-	g_object_set_data_full(G_OBJECT(mixer_combo), "mixer_devs", mixer_devs, (GDestroyNotify)free_string_list);
-	
-	gtk_table_attach_defaults(GTK_TABLE(settings_table), mixer_label, 0, 1, 1, 2);
-	gtk_table_attach_defaults(GTK_TABLE(settings_table), mixer_eb, 1, 2, 1, 2);
-
-	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit?"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
-
-	gtk_table_attach_defaults(GTK_TABLE(settings_table), mute_on_exit_cb, 0, 2, 2, 3);
-
-	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
-	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
-	g_signal_connect(G_OBJECT(mixer_combo), "changed", G_CALLBACK(mixer_combo_change_cb), app);
-	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
-
-	gtk_widget_set_tooltip_text(device_entry, _("Specify the radio-device (in most cases /dev/radio0)"));
-	gtk_widget_set_tooltip_text(mixer_eb, 
-	_("Choose the mixer source (line, line1, etc.) that is able to control the volume of your radio"));
-	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("If unchecked, gnomeradio won't mute after exiting"));
-
-	
-	/* The presets part */
-	pbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(presets_box), pbox, TRUE, TRUE, 0);
-	p_indent_label = gtk_label_new("    ");
-	gtk_box_pack_start(GTK_BOX(pbox), p_indent_label, FALSE, FALSE, 0);
-
-	preset_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
-	gtk_box_pack_start(GTK_BOX(pbox), preset_box, TRUE, TRUE, 0);
-
-	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
-	list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
-	list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
-	gtk_container_add(GTK_CONTAINER(scrolled_window), list_view);
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	gtk_widget_set_size_request(list_view, 200, 150);
-	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list_view), FALSE);
-	
-	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
-	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
-	/*gtk_tree_selection_select_path(selection, gtk_tree_path_new_from_string("0"));
-	gtk_tree_selection_set_select_function(selection, (GtkTreeSelectionFunc)list_view_select_cb, NULL, NULL);*/
-	
-	cellrenderer = gtk_cell_renderer_text_new();
-	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
-	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
-	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 0, NULL);
-	gtk_tree_view_column_set_min_width(list_column, 150);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
-	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(name_cell_edited_cb), NULL);
-
-	cellrenderer = gtk_cell_renderer_text_new();
-	g_object_set(G_OBJECT(cellrenderer), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
-	g_object_set(G_OBJECT(cellrenderer), "xalign", 1.0f, NULL);
-	g_object_set(G_OBJECT(GTK_CELL_RENDERER_TEXT(cellrenderer)), "editable", TRUE, NULL);
-	list_column = gtk_tree_view_column_new_with_attributes(NULL, cellrenderer, "text", 1, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
-	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(freq_cell_edited_cb), NULL);
-
-	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
-
-	add_button = gtk_button_new_from_stock(GTK_STOCK_ADD);
-	del_button = gtk_button_new_from_stock(GTK_STOCK_DELETE);
-	
-	gtk_box_pack_end(GTK_BOX(button_box), del_button, FALSE, FALSE, 0);
-	gtk_box_pack_end(GTK_BOX(button_box), add_button, FALSE, FALSE, 0);
-	
-	gtk_box_pack_start(GTK_BOX(preset_box), scrolled_window, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(preset_box), button_box, TRUE, TRUE, 0);
-
-	for (i=0;i<g_list_length(settings.presets);i++) {
-		GtkTreeIter iter = {0};
-		char *buffer;
-		ps = g_list_nth_data(settings.presets, i);
-		buffer = g_strdup_printf("%0.2f", ps->freq);
-		gtk_list_store_append(list_store, &iter);
-		gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);
-		g_free(buffer);
-	}
-
-	g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(add_button_clicked_cb), NULL);
-	g_signal_connect(G_OBJECT(del_button), "clicked", G_CALLBACK(del_button_clicked_cb), NULL);
-	g_signal_connect(G_OBJECT(list_view), "key-press-event", G_CALLBACK(list_view_key_press_event_cb), NULL);
-	g_signal_connect(G_OBJECT(list_view), "cursor-changed", G_CALLBACK(list_view_cursor_changed_cb), NULL);
-
-	gtk_widget_set_tooltip_text(add_button, _("Add a new preset"));
-	gtk_widget_set_tooltip_text(del_button, _("Remove preset from List"));
-
-
-	/* The record settings part */
-	rbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(record_box), rbox, TRUE, TRUE, 0);
-	r_indent_label = gtk_label_new("    ");
-	gtk_box_pack_start(GTK_BOX(rbox), r_indent_label, FALSE, FALSE, 0);
-
-	record_table = gtk_table_new(2, 2, FALSE);
-	gtk_table_set_col_spacings(GTK_TABLE(record_table), 15);
-	gtk_table_set_row_spacings(GTK_TABLE(record_table), 5);
-	
-	destination_label = gtk_label_new(_("Destination directory:"));
-	gtk_misc_set_alignment(GTK_MISC(destination_label), 0.0f, 0.5f);
-
-	destination_button = gtk_button_new();
-	gtk_button_set_label(GTK_BUTTON(destination_button), rec_settings.destination);
-	
-	profile_eb = gtk_event_box_new();
-	profile_combo = gm_audio_profile_choose_new();
-	gtk_container_add(GTK_CONTAINER(profile_eb), profile_combo);
-	gm_audio_profile_choose_set_active(profile_combo, rec_settings.profile);
-
-	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_label, 0, 1, 0, 1);
-	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_button, 1, 2, 0, 1);
-	gtk_table_attach_defaults(GTK_TABLE(record_table), profile_eb, 0, 2, 1, 2);
-
-	g_signal_connect(G_OBJECT(destination_button), "clicked", G_CALLBACK(destination_button_clicked_cb), NULL);
-	g_signal_connect(G_OBJECT(profile_combo), "changed", G_CALLBACK(profile_combo_change_cb), NULL);
-
-	gtk_widget_set_tooltip_text(profile_eb, _("Choose the Media Profile that should be used to record."));
-	
-	gtk_box_pack_start(GTK_BOX(rbox), record_table, TRUE, TRUE, 0);
-
-	gtk_widget_show_all(dialog);
-
-	return dialog;
-}

=== modified file '.pc/gnomeradio-record_information.patch/src/gui.c'
--- .pc/gnomeradio-record_information.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-record_information.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -818,7 +818,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -832,7 +832,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-save_the_world.patch/src/gui.c'
--- .pc/gnomeradio-save_the_world.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-save_the_world.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -244,7 +244,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -256,7 +256,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -287,6 +287,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -311,6 +312,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -874,7 +876,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -888,7 +890,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1358,7 +1360,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1410,6 +1411,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file '.pc/gnomeradio-set_pulse_role.patch/src/gui.c'
--- .pc/gnomeradio-set_pulse_role.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-set_pulse_role.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -840,7 +840,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -854,7 +854,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,

=== modified file '.pc/gnomeradio-thread_safe.patch/src/gui.c'
--- .pc/gnomeradio-thread_safe.patch/src/gui.c	2013-09-06 10:54:25 +0000
+++ .pc/gnomeradio-thread_safe.patch/src/gui.c	2013-09-15 02:42:45 +0000
@@ -245,7 +245,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -257,7 +257,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -288,6 +288,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -312,6 +313,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -875,7 +877,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -889,7 +891,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1359,7 +1361,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1412,6 +1413,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file 'debian/changelog'
--- debian/changelog	2013-09-10 17:10:13 +0000
+++ debian/changelog	2013-09-15 02:42:45 +0000
@@ -1,3 +1,23 @@
+gnomeradio (1.8-2ubuntu20) saucy; urgency=low
+
+  * Updated debian/patches/gnomeradio-station_list.patch: Prevent to parse
+    malformed/incomplete/invalid XML file.
+  * Updated debian/patches/gnomeradio-auto_device.patch:
+    - Automatically detect radio device when users type auto in settings field.
+    - Updated error messages to be clear and precise.
+  * Updated debian/patches/gnomeradio-alsamixer.patch: Make presets list the
+    default widget when open settings dialog. Presets are the most common
+    settings for users than devices settings.
+  * Updated debian/patches/gnomeradio-about.patch: It is not safe in principle
+    to write raw UTF-8 in narrow string literals, made to be multibyte
+    encodings.
+  * debian/patches/gnomeradio-prefs.patch: Renamed to
+    debian/patches/gnomeradio-about.patch.
+  * debian/patches/gnomeradio-preferences.patch: Make sentence capitalization in
+    text and increased preferences dialog.
+
+ -- POJAR GEORGE <geoubuntu@gmail.com>  Wed, 11 Sep 2013 15:06:44 +0000
+
 gnomeradio (1.8-2ubuntu19) saucy; urgency=low
 
   * debian/patches/gnomeradio-auto_device.patch: Added option to auto detect

=== modified file 'debian/patches/gnomeradio-about.patch'
--- debian/patches/gnomeradio-about.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-about.patch	2013-09-15 02:42:45 +0000
@@ -5,8 +5,8 @@
 ## Forwarded: no
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-06 11:51:53.831095776 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-06 12:36:22.851016435 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-14 23:28:41.916435000 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-14 23:39:12.717222588 +0000
 @@ -793,43 +793,58 @@
  }
  */
@@ -40,7 +40,7 @@
  	static GtkWidget *about;
 -	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
 -	char *text;
-+	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
++	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
  	
  	/* Feel free to put your names here translators :-) */
  	char *translators = _("TRANSLATORS");
@@ -75,7 +75,7 @@
 -				"logo", app_icon, NULL);
 +	gtk_show_about_dialog (NULL,
 +			       "version", VERSION,
-+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
++			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 +			       "comments", _("Listen to FM radio"),
 +			       "authors", authors,
 +			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -93,8 +93,8 @@
  							strcmp("TRANSLATORS", translators) ? translators : NULL, 
 Index: gnomeradio-1.8/data/icons/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/data/icons/Makefile.am	2013-09-06 11:51:53.831095776 +0000
-+++ gnomeradio-1.8/data/icons/Makefile.am	2013-09-06 11:51:53.827095776 +0000
+--- gnomeradio-1.8.orig/data/icons/Makefile.am	2013-09-14 23:28:41.916435000 +0000
++++ gnomeradio-1.8/data/icons/Makefile.am	2013-09-14 23:28:41.916435000 +0000
 @@ -1,11 +1,13 @@
  SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable
  

=== modified file 'debian/patches/gnomeradio-alsa.patch'
--- debian/patches/gnomeradio-alsa.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-alsa.patch	2013-09-15 02:42:45 +0000
@@ -4,7 +4,7 @@
 Index: gnomeradio-1.8/src/alsa_stream.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/alsa_stream.c	2013-09-07 13:27:59.961077000 +0000
++++ gnomeradio-1.8/src/alsa_stream.c	2013-09-13 05:31:36.291992000 +0000
 @@ -0,0 +1,640 @@
 +/*
 + *  ALSA streaming support
@@ -649,7 +649,7 @@
 Index: gnomeradio-1.8/src/alsa_stream.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/alsa_stream.h	2013-09-07 13:27:59.961077000 +0000
++++ gnomeradio-1.8/src/alsa_stream.h	2013-09-13 05:31:36.291992000 +0000
 @@ -0,0 +1,34 @@
 +
 +/*
@@ -688,7 +688,7 @@
 Index: gnomeradio-1.8/src/get_media_devices.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/get_media_devices.c	2013-09-07 13:28:09.000000000 +0000
++++ gnomeradio-1.8/src/get_media_devices.c	2013-09-13 05:31:46.000000000 +0000
 @@ -0,0 +1,595 @@
 +/*
 +   Copyright © 2011 by Mauro Carvalho Chehab <mchehab@redhat.com>
@@ -1288,7 +1288,7 @@
 Index: gnomeradio-1.8/src/get_media_devices.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/get_media_devices.h	2013-09-07 13:27:59.961077000 +0000
++++ gnomeradio-1.8/src/get_media_devices.h	2013-09-13 05:31:36.291992000 +0000
 @@ -0,0 +1,168 @@
 +/*
 +   Copyright © 2011 by Mauro Carvalho Chehab <mchehab@redhat.com>
@@ -1460,8 +1460,8 @@
 +				      const enum device_type not_desired_type);
 Index: gnomeradio-1.8/configure.in
 ===================================================================
---- gnomeradio-1.8.orig/configure.in	2013-09-07 13:27:59.961077000 +0000
-+++ gnomeradio-1.8/configure.in	2013-09-07 13:28:14.000000000 +0000
+--- gnomeradio-1.8.orig/configure.in	2013-09-13 05:31:36.291992000 +0000
++++ gnomeradio-1.8/configure.in	2013-09-13 05:31:49.000000000 +0000
 @@ -5,7 +5,7 @@
  AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
  
@@ -1511,8 +1511,8 @@
 +AC_OUTPUT
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-07 13:27:59.961077000 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-07 13:28:15.000000000 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:31:36.291992000 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:15.862571490 +0000
 @@ -36,6 +36,7 @@
  #include "lirc.h"
  #include "prefs.h"
@@ -1674,7 +1674,7 @@
  int main(int argc, char* argv[])
  {
  	GList *ptr;
-@@ -1205,23 +1318,39 @@
+@@ -1205,23 +1318,38 @@
  	gboolean do_scan = FALSE;
  	GOptionContext *ctx;
  	const GOptionEntry entries[] = {
@@ -1708,7 +1708,6 @@
 +		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 +			  err->message, argv[0]);
 +		g_error_free(err);
-+		g_option_context_free(ctx);
 +		exit(1);
 +	}
 +	g_option_context_free(ctx);
@@ -1719,7 +1718,7 @@
  	/* Main app */
  	main_visible = FALSE;
  	app = gnome_radio_gui();
-@@ -1244,11 +1373,12 @@
+@@ -1244,11 +1372,12 @@
  	}
  
  	load_settings();
@@ -1733,7 +1732,7 @@
  		} else {
  			initial_frequency_scan(app);
  			set_first_time_flag();
-@@ -1281,12 +1411,12 @@
+@@ -1281,12 +1410,12 @@
  		gtk_dialog_run (GTK_DIALOG (dialog));
  		gtk_widget_destroy (dialog);
  */
@@ -1748,7 +1747,7 @@
  /* Connect the Session Management signals
   */
  
-@@ -1327,7 +1457,7 @@
+@@ -1327,7 +1456,7 @@
  {
  	DBusGConnection *connection;
  	DBusGProxy      *proxy;
@@ -1759,8 +1758,8 @@
  
 Index: gnomeradio-1.8/src/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/src/Makefile.am	2013-09-07 13:27:59.961077000 +0000
-+++ gnomeradio-1.8/src/Makefile.am	2013-09-07 13:28:15.000000000 +0000
+--- gnomeradio-1.8.orig/src/Makefile.am	2013-09-13 05:31:36.291992000 +0000
++++ gnomeradio-1.8/src/Makefile.am	2013-09-13 05:31:50.000000000 +0000
 @@ -1,35 +1,39 @@
 -INCLUDES = -I$(top_srcdir) -I$(includedir) \
 -           $(GNOME_CFLAGS) $(GSTREAMER_CFLAGS) $(XML_CFLAGS)\
@@ -1834,8 +1833,8 @@
 +gnomeradio_LDADD = $(ALSA_LIBS) $(GNOME_LIBS) $(GSTREAMER_LIBS) $(XML_LIBS) $(LIRC)
 Index: gnomeradio-1.8/src/radio.c
 ===================================================================
---- gnomeradio-1.8.orig/src/radio.c	2013-09-07 13:27:59.961077000 +0000
-+++ gnomeradio-1.8/src/radio.c	2013-09-07 13:32:50.183077806 +0000
+--- gnomeradio-1.8.orig/src/radio.c	2013-09-13 05:31:36.291992000 +0000
++++ gnomeradio-1.8/src/radio.c	2013-09-13 05:31:45.000000000 +0000
 @@ -26,6 +26,14 @@
  #include "radio.h"
  #include "v4l1.h"

=== modified file 'debian/patches/gnomeradio-alsamixer.patch'
--- debian/patches/gnomeradio-alsamixer.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-alsamixer.patch	2013-09-15 02:42:45 +0000
@@ -4,7 +4,7 @@
 Index: gnomeradio-1.8/src/mixer.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/mixer.c	2013-09-08 16:39:53.850442728 +0000
++++ gnomeradio-1.8/src/mixer.c	2013-09-13 05:32:26.626571170 +0000
 @@ -0,0 +1,128 @@
 +/**
 + * Copyright (C) 2002, 2003 Doug Bell <drbell@users.sourceforge.net>
@@ -137,7 +137,7 @@
 Index: gnomeradio-1.8/src/mixer.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/mixer.h	2013-09-08 16:39:53.850442728 +0000
++++ gnomeradio-1.8/src/mixer.h	2013-09-13 05:32:26.626571170 +0000
 @@ -0,0 +1,86 @@
 +/**
 + * Copyright (C) 2002, 2003 Doug Bell <drbell@users.sourceforge.net>
@@ -227,7 +227,7 @@
 +#endif /* MIXER_H_INCLUDED */
 Index: gnomeradio-1.8/src/tech.c
 ===================================================================
---- gnomeradio-1.8.orig/src/tech.c	2013-09-08 16:39:53.858442728 +0000
+--- gnomeradio-1.8.orig/src/tech.c	2013-09-13 05:32:26.638571169 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,171 +0,0 @@
 -/*
@@ -403,7 +403,7 @@
 -}
 Index: gnomeradio-1.8/src/tech.h
 ===================================================================
---- gnomeradio-1.8.orig/src/tech.h	2013-09-08 16:39:53.858442728 +0000
+--- gnomeradio-1.8.orig/src/tech.h	2013-09-13 05:32:26.638571169 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,34 +0,0 @@
 -/*
@@ -442,8 +442,8 @@
 -#endif
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 17:32:34.000000000 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:26.626571170 +0000
 @@ -30,7 +30,7 @@
  #include <stdlib.h>
  #include "gui.h"
@@ -474,12 +474,21 @@
  	
  	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
  	
-+	settings_device_cb (mode);
++	action_mode (mode);
 +
  	choise = GTK_RESPONSE_HELP;
  	while (choise == GTK_RESPONSE_HELP)
  	{
-@@ -259,81 +262,60 @@
+@@ -250,7 +253,7 @@
+ 				display_help_cb("gnomeradio-settings");
+ 			break;
+ 			default:
+-				/* We need the hide signal to get the value of the device_entry */
++				/* We need the hide signal to get the value of the device[mixer]_entry */
+ 				gtk_widget_hide(dialog);
+ 				gtk_widget_destroy(dialog);
+ 		}
+@@ -259,81 +262,62 @@
  
  void start_radio(gboolean restart, GtkWidget *app)
  {
@@ -518,6 +527,7 @@
 +		if (!restart) {
 +			mode = RADIO_DEVICE;
  			prefs_button_clicked_cb(NULL, app);
++			mode = PRESETS;
 +		}
  	}
  }
@@ -563,6 +573,7 @@
 +		if (!restart) {
 +			mode = MIXER_DEVICE;
 +			prefs_button_clicked_cb(NULL, app);
++			mode = PRESETS;
 +		}
  
 -GList* get_mixer_recdev_list(void)
@@ -596,7 +607,7 @@
  }
  
  static gboolean redraw_status_window(void)
-@@ -431,12 +413,11 @@
+@@ -431,12 +415,11 @@
  
  void exit_gnome_radio(void)
  {
@@ -611,7 +622,7 @@
  	save_settings();
  	gtk_main_quit();
  }
-@@ -487,27 +468,22 @@
+@@ -487,27 +470,22 @@
  
  static void volume_value_changed_cb(GtkVolumeButton *button, gpointer user_data)
  {
@@ -649,7 +660,7 @@
  		return FALSE;
  	
  	if (vol != (int)volume->value)
-@@ -732,16 +708,6 @@
+@@ -732,16 +710,6 @@
  	Recording* recording;
  	char *filename;
  	
@@ -666,7 +677,7 @@
  	/* You can translate the filename for a recording:
  	 * args for this format are: path, station title, time 
  	 */ 
-@@ -799,7 +765,7 @@
+@@ -799,7 +767,7 @@
  void toggle_volume(void)
  {
  	static int old_vol;
@@ -675,7 +686,7 @@
  	
  	if (vol) {
  		old_vol = vol;
-@@ -818,21 +784,21 @@
+@@ -818,21 +786,21 @@
  			alsa_thread_startup(alsa_playback, alsa_capture,
  					    alsa_latency, stderr, alsa_debug);
  	}	
@@ -703,7 +714,7 @@
  	}
  	toggle_volume();
  }
-@@ -988,9 +954,10 @@
+@@ -988,9 +956,10 @@
  	stfw_button = gtk_button_new();
  	stbw_button = gtk_button_new();
  	about_button = gtk_button_new();
@@ -717,7 +728,7 @@
  	rec_button = gtk_button_new();
  	/*help_button = gtk_button_new();*/
  
-@@ -1001,7 +968,7 @@
+@@ -1001,7 +970,7 @@
  	gtk_container_add(GTK_CONTAINER(stfw_button), stfw_pixmap);
  	gtk_container_add(GTK_CONTAINER(stbw_button), stbw_pixmap);
  	gtk_container_add(GTK_CONTAINER(about_button), about_pixmap);
@@ -726,7 +737,7 @@
  	gtk_container_add(GTK_CONTAINER(rec_button), rec_pixmap);
  	/*gtk_container_add(GTK_CONTAINER(help_button), help_pixmap);*/
  
-@@ -1055,7 +1022,7 @@
+@@ -1055,7 +1024,7 @@
  /*	gtk_scale_set_digits(GTK_SCALE(vol_scale), 0);
  	gtk_scale_set_draw_value(GTK_SCALE(vol_scale), FALSE);
  
@@ -735,7 +746,7 @@
  
  	gtk_widget_set_size_request(drawing_area, DIGIT_WIDTH*6+10+SIGNAL_WIDTH+STEREO_WIDTH, DIGIT_HEIGTH+10);
  
-@@ -1066,7 +1033,7 @@
+@@ -1066,7 +1035,7 @@
  	gtk_box_pack_start(GTK_BOX(hbox2), stfw_button, FALSE, FALSE, 2);
  	gtk_box_pack_start(GTK_BOX(hbox2), scfw_button, FALSE, FALSE, 2);
  	gtk_box_pack_start(GTK_BOX(hbox2), vseparator1, FALSE, FALSE, 2);
@@ -744,7 +755,7 @@
  	/*gtk_box_pack_start(GTK_BOX(hbox2), vseparator2, TRUE, TRUE, 3);*/
  	gtk_box_pack_start(GTK_BOX(hbox2), rec_button, FALSE, FALSE, 2);
  	gtk_box_pack_start(GTK_BOX(hbox2), vseparator4, FALSE, FALSE, 2);
-@@ -1107,7 +1074,7 @@
+@@ -1107,7 +1076,7 @@
  	g_signal_connect(G_OBJECT(app), "delete_event", G_CALLBACK(delete_event_cb), NULL);
  	g_signal_connect(G_OBJECT(quit_button), "clicked", G_CALLBACK(quit_button_clicked_cb), NULL);
  	g_signal_connect(G_OBJECT(adj), "value-changed", G_CALLBACK(adj_value_changed_cb), (gpointer) app);
@@ -753,7 +764,7 @@
  	g_signal_connect(G_OBJECT(stfw_button), "pressed", G_CALLBACK(step_button_pressed_cb), (gpointer)TRUE);
  	g_signal_connect(G_OBJECT(stbw_button), "pressed", G_CALLBACK(step_button_pressed_cb), (gpointer)FALSE);
  	g_signal_connect(G_OBJECT(stfw_button), "clicked", G_CALLBACK(step_button_clicked_cb), (gpointer)TRUE);
-@@ -1128,7 +1095,7 @@
+@@ -1128,7 +1097,7 @@
  	gtk_widget_set_tooltip_text(about_button, _("About Gnomeradio"));
  	gtk_widget_set_tooltip_text(rec_button, _("Record radio as OGG, Flac, Wave or MP3"));
  	gtk_widget_set_tooltip_text(prefs_button, _("Edit your Preferences"));
@@ -762,7 +773,7 @@
  	gtk_widget_set_tooltip_text(quit_button, _("Quit"));
  	text = g_strdup_printf(_("Frequency: %.2f MHz"), gtk_adjustment_get_value(adj)/STEPS);
  	gtk_widget_set_tooltip_text(freq_scale, text);
-@@ -1146,12 +1113,11 @@
+@@ -1146,12 +1115,11 @@
  static void
  session_die_cb(void)
  {
@@ -777,7 +788,7 @@
  	gtk_main_quit();
  	exit (0);
  }
-@@ -1175,7 +1141,7 @@
+@@ -1175,7 +1143,7 @@
  gboolean
  key_press_event_cb(GtkWidget *app, GdkEventKey *event, gpointer data)
  {
@@ -786,7 +797,7 @@
  	
  	switch (event->keyval)
  	{
-@@ -1207,12 +1173,12 @@
+@@ -1207,12 +1175,12 @@
  				break;
  		case GDK_KEY_KP_Add:
  		case GDK_KEY_plus:	
@@ -801,7 +812,7 @@
  				/*gtk_adjustment_set_value(volume,(volume->value < 5) ? 0 : volume->value-5);*/
  				break;
  	}
-@@ -1374,8 +1340,8 @@
+@@ -1373,8 +1341,8 @@
  
  	load_settings();
  
@@ -811,10 +822,18 @@
  	if (is_first_start() || do_scan) {
  		if (!radio_is_init()) {
  			fprintf(stderr, "Could not scan. Radio is not initialized\n");
+@@ -1394,6 +1362,7 @@
+ 
+ 	gtk_widget_show_all(app);
+ 	main_visible = TRUE;
++	mode = PRESETS;
+ 
+ 	/* Create an tray icon */
+ 	create_tray_icon(app);
 Index: gnomeradio-1.8/src/gui.h
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.h	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/gui.h	2013-09-08 16:39:53.850442728 +0000
+--- gnomeradio-1.8.orig/src/gui.h	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/gui.h	2013-09-13 05:32:26.626571170 +0000
 @@ -30,10 +30,9 @@
  struct Gnomeradio_Settings
  {
@@ -838,8 +857,8 @@
  void scfw_button_clicked_cb(GtkButton *button, gpointer data);
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-08 17:32:34.000000000 +0000
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-13 05:32:26.630571169 +0000
 @@ -26,7 +26,7 @@
  #include "gui.h"
  #include "rec_tech.h"
@@ -849,7 +868,7 @@
  extern GtkAdjustment *adj;
  
  extern int mom_ps;
-@@ -34,8 +34,7 @@
+@@ -34,10 +34,9 @@
  
  extern gboolean main_visible;
  
@@ -857,8 +876,11 @@
 -static GtkWidget *mixer_combo;
 +static GtkWidget *device_entry, *mixer_entry;
  static GtkWidget *mute_on_exit_cb;
- static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+-static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
++static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
  static GtkWidget *list_view;
+ static GtkListStore *list_store;
+ static GtkTreeSelection *selection;
 @@ -60,7 +59,6 @@
  	gconf_client_set_string(client, "/apps/gnomeradio/device", settings.device, NULL);
  	gconf_client_set_string(client, "/apps/gnomeradio/driver", settings.driver, NULL);
@@ -921,11 +943,11 @@
 -	if (g_str_equal(mixer_dev, settings.mixer))
 -		return FALSE;
 +	const gchar *text;
++
++	text = gtk_entry_get_text(GTK_ENTRY(mixer_entry));
  
 -	if (settings.mixer) g_free(settings.mixer);
 -	settings.mixer = g_strdup(mixer_dev);
-+	text = gtk_entry_get_text(GTK_ENTRY(mixer_entry));
-+
 +	if (!strcmp(settings.mixer, text) || (text[0] == '\0'))
 +		return FALSE;
  	
@@ -938,25 +960,66 @@
  	
  	start_mixer(TRUE, data);
  	
-@@ -692,13 +683,6 @@
+@@ -650,11 +641,13 @@
+ 	GtkTreePath *path = NULL;
+ 	GtkTreeViewColumn *focus_column = NULL;
+ 	
+-	if (settings.presets == NULL) return;
++	if (settings.presets == NULL)
++		return;
+ 
+ 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
+ 	
+-	if (!path) return;
++	if (!path)
++		return;
+ 
+ 	row = gtk_tree_path_get_indices(path);
+ 	g_assert(row);
+@@ -692,11 +685,34 @@
  	gtk_widget_set_sensitive(save_button, sel);
  }
  
 -static void free_string_list(GList *list)
--{
++static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+ {
 -	if (!list) return;
 -	g_list_foreach(list, (GFunc)g_free, NULL);
 -	g_list_free(list);
--}
--
++	GtkTreePath *path = NULL;
++	GtkTreeIter iter;
++	gint active;
++
++	if (settings.presets == NULL) {
++		gtk_widget_grab_focus(add_button);
++		return;
++	}
++
++	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
++
++	if (active < 0) {
++		gtk_widget_grab_focus(add_button);
++		return;
++	}
++
++	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
++		return;
++
++	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
++
++	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
++	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
++	gtk_tree_path_free(path);
++
++	gtk_widget_grab_focus(list_view);
+ }
+ 
  static void free_preset_list(gpointer data, gpointer user_data)
- {
- 	preset *ps;
-@@ -992,6 +976,22 @@
+@@ -1015,6 +1031,25 @@
  	gtk_widget_destroy(dialog);
  }
  
-+gboolean settings_device_cb (gint mode)
++gboolean action_mode (gint mode)
 +{
 +	switch (mode) {
 +		case RADIO_DEVICE:
@@ -965,6 +1028,9 @@
 +		case MIXER_DEVICE:
 +			gtk_widget_grab_focus (mixer_entry);
 +			break;
++		case PRESETS:
++			list_view_scroll_to_active_preset_cb(list_view, NULL);
++			break;
 +		default:
 +			break;
 +	}
@@ -975,7 +1041,7 @@
  GtkWidget* prefs_window(GtkWidget *app)
  {
  	GtkWidget *dialog;
-@@ -1002,15 +1002,14 @@
+@@ -1025,15 +1060,14 @@
  	GtkWidget *destination_label;
  	GtkWidget *destination_button;
  	GtkWidget *profile_combo;
@@ -983,7 +1049,8 @@
 +	GtkWidget *profile_eb;
  	GtkWidget *device_label, *mixer_label;
  	GtkWidget *button_box;
- 	GtkWidget *open_button, *add_button;
+-	GtkWidget *open_button, *add_button;
++	GtkWidget *open_button;
  	GtkWidget *scrolled_window;
  	GtkCellRenderer *cellrenderer;
  	GtkTreeViewColumn *list_column;
@@ -993,7 +1060,7 @@
  	char *settings_hdr, *presets_hdr, *record_hdr;
  	preset* ps;
  	
-@@ -1052,20 +1051,11 @@
+@@ -1075,20 +1109,11 @@
  
  	mixer_label = gtk_label_new(_("Mixer Source:"));
  	gtk_widget_set_halign(mixer_label, GTK_ALIGN_START);
@@ -1017,7 +1084,7 @@
  
  	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit"));
  	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
-@@ -1074,13 +1064,13 @@
+@@ -1097,13 +1122,13 @@
  
  	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
  	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
@@ -1036,7 +1103,7 @@
  
  	/* The presets part */
  	presets_hdr = g_strconcat("<span weight=\"bold\">", _("Presets"), "</span>", NULL);
-@@ -1210,7 +1200,7 @@
+@@ -1233,7 +1258,7 @@
  	gtk_box_pack_end(GTK_BOX(button_box), save_button, FALSE, FALSE, 0);
  	gtk_box_pack_end(GTK_BOX(button_box), open_button, FALSE, FALSE, 0);
  
@@ -1047,8 +1114,8 @@
  	record_hdr = g_strconcat("<span weight=\"bold\">", _("Record Settings"), "</span>", NULL);
 Index: gnomeradio-1.8/src/trayicon.c
 ===================================================================
---- gnomeradio-1.8.orig/src/trayicon.c	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/trayicon.c	2013-09-08 17:32:29.000000000 +0000
+--- gnomeradio-1.8.orig/src/trayicon.c	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/trayicon.c	2013-09-13 05:32:26.630571169 +0000
 @@ -23,7 +23,7 @@
  #include <gtk/gtk.h>
  #include "gui.h"
@@ -1069,8 +1136,8 @@
  	g_signal_connect(G_OBJECT(mute_menuitem), "toggled", (GCallback)mute_menuitem_toggled_cb, (gpointer)app);
 Index: gnomeradio-1.8/src/record.c
 ===================================================================
---- gnomeradio-1.8.orig/src/record.c	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/record.c	2013-09-08 17:32:34.000000000 +0000
+--- gnomeradio-1.8.orig/src/record.c	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/record.c	2013-09-13 05:32:26.630571169 +0000
 @@ -27,7 +27,6 @@
  #include <gtk/gtk.h>
  #include <glib/gi18n.h>
@@ -1081,8 +1148,8 @@
  
 Index: gnomeradio-1.8/src/lirc.c
 ===================================================================
---- gnomeradio-1.8.orig/src/lirc.c	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/lirc.c	2013-09-08 16:39:53.850442728 +0000
+--- gnomeradio-1.8.orig/src/lirc.c	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/lirc.c	2013-09-13 05:32:26.630571169 +0000
 @@ -22,13 +22,12 @@
  #include <fcntl.h>
  #include <stdlib.h>
@@ -1124,8 +1191,8 @@
  	else if (strcasecmp (cmd, "mute") == 0)
 Index: gnomeradio-1.8/data/gnomeradio.schemas.in
 ===================================================================
---- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-08 17:32:34.000000000 +0000
+--- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-13 05:32:26.630571169 +0000
 @@ -8,7 +8,7 @@
        <default>TRUE</default>
        <locale name="C">
@@ -1189,8 +1256,8 @@
  	
 Index: gnomeradio-1.8/src/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/src/Makefile.am	2013-09-08 16:39:53.858442728 +0000
-+++ gnomeradio-1.8/src/Makefile.am	2013-09-08 17:32:34.000000000 +0000
+--- gnomeradio-1.8.orig/src/Makefile.am	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/Makefile.am	2013-09-13 05:32:26.630571169 +0000
 @@ -15,11 +15,11 @@
  	get_media_devices.h	\
  	gui.h			\
@@ -1222,7 +1289,7 @@
 Index: gnomeradio-1.8/src/mixer-alsa.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/mixer-alsa.c	2013-09-08 16:39:53.850442728 +0000
++++ gnomeradio-1.8/src/mixer-alsa.c	2013-09-13 05:32:26.630571169 +0000
 @@ -0,0 +1,238 @@
 +/**
 + * Copyright (C) 2006 Philipp Hahn <pmhahn@users.sourceforge.net>
@@ -1465,7 +1532,7 @@
 Index: gnomeradio-1.8/src/mixer-oss.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/mixer-oss.c	2013-09-08 16:39:53.854442728 +0000
++++ gnomeradio-1.8/src/mixer-oss.c	2013-09-13 05:32:26.630571169 +0000
 @@ -0,0 +1,261 @@
 +/**
 + * Copyright (C) 2002, 2003 Doug Bell <drbell@users.sourceforge.net>
@@ -1730,19 +1797,20 @@
 +};
 Index: gnomeradio-1.8/src/prefs.h
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.h	2013-09-08 16:38:29.271650000 +0000
-+++ gnomeradio-1.8/src/prefs.h	2013-09-08 17:32:53.118348218 +0000
-@@ -22,6 +22,14 @@
+--- gnomeradio-1.8.orig/src/prefs.h	2013-09-13 05:32:26.638571169 +0000
++++ gnomeradio-1.8/src/prefs.h	2013-09-13 05:32:26.630571169 +0000
+@@ -22,6 +22,15 @@
  gboolean save_settings(void);
  gboolean load_settings(void);
  
 +enum
 +{
 +	RADIO_DEVICE,
-+	MIXER_DEVICE
++	MIXER_DEVICE,
++	PRESETS
 +};
 +
-+gboolean settings_device_cb (gint mode);
++gboolean action_mode (gint mode);
 +
  GtkWidget* prefs_window(GtkWidget *app);
  

=== modified file 'debian/patches/gnomeradio-auto_device.patch'
--- debian/patches/gnomeradio-auto_device.patch	2013-09-10 17:10:13 +0000
+++ debian/patches/gnomeradio-auto_device.patch	2013-09-15 02:42:45 +0000
@@ -3,17 +3,18 @@
 
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-10 21:07:38.591933000 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-10 21:07:38.591933000 +0000
-@@ -36,6 +36,7 @@
- extern int mom_ps;
- extern gnomeradio_settings settings;
- extern gboolean main_visible;
-+extern gboolean autodetect;
- 
- static GtkWidget *device_entry;
- static GtkWidget *mixer_entry;
-@@ -65,7 +66,10 @@
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-15 02:32:10.044914103 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-15 02:33:03.324912519 +0000
+@@ -30,6 +30,8 @@
+ #include "rb_gst_media_types.h"
+ #include "rb_missing_plugins.h"
+ 
++extern int autodetect;
++
+ extern GtkWidget *preset_combo;
+ extern GtkAdjustment *adj;
+ 
+@@ -67,7 +69,10 @@
  		return FALSE;
  	
  	/* Store general settings */
@@ -25,7 +26,7 @@
  	gconf_client_set_string(client, "/apps/gnomeradio/driver", settings.driver, NULL);
  	gconf_client_set_string(client, "/apps/gnomeradio/mixer", settings.mixer, NULL);
  	gconf_client_set_bool(client, "/apps/gnomeradio/mute-on-exit", settings.mute_on_exit, NULL);
-@@ -124,7 +128,7 @@
+@@ -126,7 +131,7 @@
  	/* Load general settings */
  	settings.device = gconf_client_get_string(client, "/apps/gnomeradio/device" , NULL);
  	if (!settings.device)
@@ -34,50 +35,71 @@
  	settings.driver = gconf_client_get_string(client, "/apps/gnomeradio/driver" , NULL);
  	if (!settings.driver)
  		settings.driver = g_strdup("any");
-@@ -211,6 +215,10 @@
- 		g_free(settings.device);
+@@ -219,6 +224,24 @@
+ 	return FALSE;
+ }
  
- 	settings.device = g_strdup(text);
-+
-+	autodetect = FALSE;
-+	if (0 == strcmp(settings.device, "auto"))
-+		autodetect = TRUE;
- 	
- 	start_radio(TRUE, data);
- 	
-@@ -1182,7 +1190,10 @@
++static void
++device_entry_auto_activate_cb(GtkEntry* entry, const gchar* text, gpointer data)
++{
++	GtkEditable *editable;
++
++	editable = GTK_EDITABLE (entry);
++
++	text = gtk_entry_get_text(GTK_ENTRY(device_entry));
++
++	autodetect = 0;
++	if (0 == strcmp(text, "auto")) {
++		g_signal_emit_by_name(G_OBJECT (editable), "activate");
++		autodetect = 1;
++
++		gtk_widget_grab_focus(add_button);
++	}
++}
++
+ static gboolean mixer_entry_activate_cb(GtkWidget *widget, gpointer data)
+ {
+ 	const gchar *text;
+@@ -1239,7 +1262,10 @@
  	gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1);
  
  	device_entry = gtk_entry_new();
 -	gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
 +	if (autodetect)
-+		gtk_entry_set_text(GTK_ENTRY(device_entry), "auto");
++		gtk_entry_set_placeholder_text(GTK_ENTRY(device_entry), "auto");
 +	else
 +		gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
  	gtk_grid_attach(GTK_GRID(grid), device_entry, 2, 1, 1, 1);
  
  	label = gtk_label_new (_("Mixer Source:"));
+@@ -1257,6 +1283,7 @@
+ 
+ 	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
+ 	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
++	g_signal_connect(G_OBJECT(device_entry), "changed", G_CALLBACK(device_entry_auto_activate_cb), NULL);
+ 	g_signal_connect(G_OBJECT(mixer_entry), "hide", G_CALLBACK(mixer_entry_activate_cb), app);
+ 	g_signal_connect(G_OBJECT(mixer_entry), "activate", G_CALLBACK(mixer_entry_activate_cb), NULL);
+ 	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-10 21:07:38.591933000 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-10 21:10:10.634239077 +0000
-@@ -68,6 +68,7 @@
- gnomeradio_settings settings;
- 
- gboolean main_visible;
-+gboolean autodetect;
- 
- GtkWidget *app;
- GtkWidget *preset_combo;
-@@ -289,10 +290,24 @@
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-15 02:32:10.044914103 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-15 02:32:10.040914103 +0000
+@@ -58,6 +58,8 @@
+    USB radio devices benefit from a larger default latency */
+ #define DEFAULT_LATENCY 500
+ 
++int autodetect;
++
+ int alsa_loopback = 1;
+ char *alsa_playback = NULL;
+ char *alsa_capture = NULL;
+@@ -289,10 +291,23 @@
  			driver = DRIVER_V4L2;
  	}
  
-+	autodetect = FALSE;
-+	if (0 == strcmp(settings.device, "auto")) {
-+		radio_set_device(settings.device, AUTO);
-+		autodetect = TRUE;
-+	}
++	autodetect = 0;
++	if (0 == strcmp(settings.device, "auto"))
++		autodetect = 1;
 +
  	if (!radio_init(settings.device, driver)) {
 -		char *caption = g_strdup_printf(_("Could not open radio device \"%s\"!"), settings.device);
@@ -86,9 +108,10 @@
 +		char *caption, *detail;
 +
 +		if (autodetect) {
-+			caption = g_strdup_printf (_("Could not find an radio device to connect to!"));
-+			detail = g_strdup_printf (_("Please ensure that you have a radio device connected.\n"
-+						    "Also make sure that the device is connected properly."));
++			caption = g_strdup_printf (_("Could not find any radio device!"));
++			detail = g_strdup_printf (_("Please ensure that you have a radio device connected to your computer.\n"
++						    "You can also use the dmesg command: \"dmesg | grep radio\" to determine\n"
++						    "whether device is properly detected."));
 +		} else {
 +			caption = g_strdup_printf (_("Could not open radio device \"%s\"!"), settings.device);
 +			detail = g_strdup_printf (_("You can auto detect radio device by typing \"auto\" in device settings."));
@@ -97,7 +120,7 @@
  		show_error_message(caption, detail);
  		g_free(caption);
  		g_free(detail);
-@@ -312,9 +327,12 @@
+@@ -313,9 +328,12 @@
  		mixer->close_device();
  	
  	if (!mixer_set_device(settings.mixer)) {
@@ -115,8 +138,8 @@
  		g_free(detail);
 Index: gnomeradio-1.8/src/radio.c
 ===================================================================
---- gnomeradio-1.8.orig/src/radio.c	2013-09-10 21:07:38.591933000 +0000
-+++ gnomeradio-1.8/src/radio.c	2013-09-10 21:07:38.591933000 +0000
+--- gnomeradio-1.8.orig/src/radio.c	2013-09-15 02:32:10.044914103 +0000
++++ gnomeradio-1.8/src/radio.c	2013-09-15 02:32:10.040914103 +0000
 @@ -22,6 +22,7 @@
  #include <fcntl.h>
  #include <sys/ioctl.h>
@@ -125,58 +148,89 @@
  
  #include "radio.h"
  #include "v4l1.h"
-@@ -40,6 +41,28 @@
+@@ -29,6 +30,8 @@
+ #include "alsa_stream.h"
+ #include "get_media_devices.h"
+ 
++extern int autodetect;
++
+ extern int alsa_loopback;
+ extern char *alsa_playback;
+ extern char *alsa_capture;
+@@ -40,11 +43,37 @@
  /*
   * These functions handle the radio device
   */
-+void radio_set_device(char *device, DeviceMode mode)
-+{
-+	switch (mode) {
-+		case AUTO:
-+		{
-+			void *md = discover_media_devices();
-+			const char *p = NULL;
-+
-+			while (1) {
-+				p = get_associated_device(md, p, MEDIA_V4L_RADIO, NULL, NONE);
-+				if (!p)
-+					break;
-+				snprintf(device, PATH_MAX, "/dev/%s", p);
-+			}
-+
-+			free_media_devices(md);
-+		}
-+			break;
-+		default:
-+			break;
-+	}
-+}
-  
+- 
  int radio_init(char *device, DriverType driver)
  {
-Index: gnomeradio-1.8/src/radio.h
-===================================================================
---- gnomeradio-1.8.orig/src/radio.h	2013-09-10 21:07:38.591933000 +0000
-+++ gnomeradio-1.8/src/radio.h	2013-09-10 21:07:38.591933000 +0000
-@@ -39,6 +39,14 @@
- 
- int radio_init(char *device, DriverType type);
- 
-+typedef enum _DeviceMode DeviceMode;
-+enum _DeviceMode
-+{
-+	AUTO
-+};
-+
-+void radio_set_device(char *device, DeviceMode mode);
-+
- int radio_is_init(void);
- 
- void radio_stop(void);
+ 	int rv = -1;
+ 
++	if (autodetect) {
++		void *md;
++		const char *p = NULL;
++		char buf[PATH_MAX];
++
++		*device = 0;
++		md = discover_media_devices();
++		if (!md) {
++			fprintf (stderr, "open: Failed to open \"auto\" device");
++			if (*device)
++				fprintf (stderr, " at %s\n", device);
++			else
++				fprintf (stderr, "\n");
++			goto failure;
++		}
++
++		while (1) {
++			p = get_associated_device(md, p, MEDIA_V4L_RADIO, NULL, NONE);
++			if (!p)
++				break;
++			snprintf(buf, sizeof(buf), "/dev/%s", p);
++			device = &buf[0];
++		}
++
++		free_media_devices(md);
++	}
++
+ 	switch (driver) {
+ 		case DRIVER_ANY:
+ 		case DRIVER_V4L2:
+@@ -58,7 +87,7 @@
+ 	dev = v4l1_radio_dev_new();
+ 	rv = dev->init (dev, device);
+ 	if (rv == 0) {
+-        fprintf(stderr, "Initializing v4l1 failed\n");
++        fprintf(stderr, "v4l1: Initialization failed\n");
+ 		dev->finalize (dev);
+ 		dev = NULL;
+ 		if (driver != DRIVER_ANY)
+@@ -71,7 +100,7 @@
+ 	dev = v4l2_radio_dev_new();
+ 	rv = dev->init (dev, device);
+ 	if (rv == 0) {
+-        fprintf(stderr, "Initializing v4l2 failed\n");
++        fprintf(stderr, "v4l2: Initialization failed\n");
+ 		dev->finalize (dev);
+ 		dev = NULL;
+ 		if (driver != DRIVER_ANY)
+@@ -81,6 +110,12 @@
+ 	}
+ 
+ success:
++	if (autodetect)
++		fprintf(stderr, "open: Using radio device: %s\n", device);
++
++	if (dev == NULL)
++		alsa_loopback = 0;
++
+ 	if (alsa_loopback) {
+ 		if (alsa_capture == NULL) {
+ 			void *md = discover_media_devices();
 Index: gnomeradio-1.8/data/gnomeradio.schemas.in
 ===================================================================
---- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-10 21:07:38.591933000 +0000
-+++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-10 21:07:38.591933000 +0000
+--- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-15 02:32:10.044914103 +0000
++++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-15 02:32:10.040914103 +0000
 @@ -29,7 +29,7 @@
        <applyto>/apps/gnomeradio/device</applyto>
        <owner>gnomeradio</owner>

=== modified file 'debian/patches/gnomeradio-documentation.patch'
--- debian/patches/gnomeradio-documentation.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-documentation.patch	2013-09-15 02:42:45 +0000
@@ -3,8 +3,8 @@
 Author: POJAR GEORGE <geoubuntu@gmail.com>
 Index: gnomeradio-1.8/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/Makefile.am	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/Makefile.am	2013-09-08 16:48:54.938426643 +0000
+--- gnomeradio-1.8.orig/Makefile.am	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/Makefile.am	2013-09-13 05:32:33.226570973 +0000
 @@ -1,22 +1,20 @@
 -SUBDIRS = help data po src
 +distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper'
@@ -45,7 +45,7 @@
 +	intltool-update
 Index: gnomeradio-1.8/help/C/gnomeradio.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/C/gnomeradio.xml	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/C/gnomeradio.xml	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,819 +0,0 @@
 -<?xml version="1.0"?>
@@ -870,7 +870,7 @@
 Index: gnomeradio-1.8/help/C/index.docbook
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/help/C/index.docbook	2013-09-08 16:48:54.938426643 +0000
++++ gnomeradio-1.8/help/C/index.docbook	2013-09-13 05:32:33.226570973 +0000
 @@ -0,0 +1,817 @@
 +<?xml version="1.0"?>
 +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
@@ -1691,8 +1691,8 @@
 +</article>
 Index: gnomeradio-1.8/help/C/legal.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/C/legal.xml	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/C/legal.xml	2013-09-08 16:48:54.942426643 +0000
+--- gnomeradio-1.8.orig/help/C/legal.xml	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/C/legal.xml	2013-09-13 05:32:33.226570973 +0000
 @@ -6,7 +6,7 @@
  	  by the Free Software Foundation with no Invariant Sections,
  	  no Front-Cover Texts, and no Back-Cover Texts.  You can find
@@ -1704,8 +1704,8 @@
           <para> This manual is part of a collection of GNOME manuals
 Index: gnomeradio-1.8/help/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/help/Makefile.am	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/Makefile.am	2013-09-08 16:48:54.942426643 +0000
+--- gnomeradio-1.8.orig/help/Makefile.am	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/Makefile.am	2013-09-13 05:32:33.226570973 +0000
 @@ -1,20 +1,22 @@
 -include $(top_srcdir)/gnome-doc-utils.make
 -dist-hook: doc-dist-hook
@@ -1749,7 +1749,7 @@
 +HELP_LINGUAS = es fr oc sv
 Index: gnomeradio-1.8/help/gnomeradio.omf.in
 ===================================================================
---- gnomeradio-1.8.orig/help/gnomeradio.omf.in	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/gnomeradio.omf.in	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,9 +0,0 @@
 -<?xml version="1.0" standalone="no"?>
@@ -1763,9 +1763,9 @@
 -</omf>
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:48:54.942426643 +0000
-@@ -924,21 +924,24 @@
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:33.226570973 +0000
+@@ -926,21 +926,24 @@
  	char *uri;
  
  	if (topic)
@@ -1794,7 +1794,7 @@
  }
  
  void toggle_mainwindow_visibility(GtkWidget *app)
-@@ -1503,8 +1506,8 @@
+@@ -1505,8 +1508,8 @@
  	
  	g_assert(text);
  	
@@ -1807,7 +1807,7 @@
  	}
 Index: gnomeradio-1.8/help/es/gnomeradio.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/es/gnomeradio.xml	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/es/gnomeradio.xml	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,611 +0,0 @@
 -<?xml version="1.0" encoding="utf-8"?>
@@ -2424,7 +2424,7 @@
 Index: gnomeradio-1.8/help/es/index.docbook
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/help/es/index.docbook	2013-09-08 16:48:54.942426643 +0000
++++ gnomeradio-1.8/help/es/index.docbook	2013-09-13 05:32:33.230570973 +0000
 @@ -0,0 +1,611 @@
 +<?xml version="1.0" encoding="utf-8"?>
 +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
@@ -3039,7 +3039,7 @@
 +</article>
 Index: gnomeradio-1.8/help/fr/gnomeradio.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/fr/gnomeradio.xml	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/fr/gnomeradio.xml	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,611 +0,0 @@
 -<?xml version="1.0" encoding="utf-8"?>
@@ -3656,7 +3656,7 @@
 Index: gnomeradio-1.8/help/fr/index.docbook
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/help/fr/index.docbook	2013-09-08 16:48:54.946426643 +0000
++++ gnomeradio-1.8/help/fr/index.docbook	2013-09-13 05:32:33.230570973 +0000
 @@ -0,0 +1,611 @@
 +<?xml version="1.0" encoding="utf-8"?>
 +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
@@ -4271,7 +4271,7 @@
 +</article>
 Index: gnomeradio-1.8/help/oc/gnomeradio.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/oc/gnomeradio.xml	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/oc/gnomeradio.xml	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,873 +0,0 @@
 -<?xml version="1.0" encoding="utf-8"?>
@@ -5150,7 +5150,7 @@
 Index: gnomeradio-1.8/help/oc/index.docbook
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/help/oc/index.docbook	2013-09-08 16:48:54.946426643 +0000
++++ gnomeradio-1.8/help/oc/index.docbook	2013-09-13 05:32:33.230570973 +0000
 @@ -0,0 +1,873 @@
 +<?xml version="1.0" encoding="utf-8"?>
 +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
@@ -6027,7 +6027,7 @@
 +</article>
 Index: gnomeradio-1.8/help/sv/gnomeradio.xml
 ===================================================================
---- gnomeradio-1.8.orig/help/sv/gnomeradio.xml	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/help/sv/gnomeradio.xml	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,611 +0,0 @@
 -<?xml version="1.0" encoding="utf-8"?>
@@ -6644,7 +6644,7 @@
 Index: gnomeradio-1.8/help/sv/index.docbook
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/help/sv/index.docbook	2013-09-08 16:48:54.946426643 +0000
++++ gnomeradio-1.8/help/sv/index.docbook	2013-09-13 05:32:33.234570973 +0000
 @@ -0,0 +1,611 @@
 +<?xml version="1.0" encoding="utf-8"?>
 +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
@@ -7259,8 +7259,8 @@
 +</article>
 Index: gnomeradio-1.8/help/es/es.po
 ===================================================================
---- gnomeradio-1.8.orig/help/es/es.po	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/es/es.po	2013-09-08 16:48:54.950426643 +0000
+--- gnomeradio-1.8.orig/help/es/es.po	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/es/es.po	2013-09-13 05:32:33.234570973 +0000
 @@ -110,7 +110,7 @@
  "the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
  "later version published by the Free Software Foundation with no Invariant "
@@ -7281,8 +7281,8 @@
  #: C/gnomeradio.xml:12(para)
 Index: gnomeradio-1.8/help/fr/fr.po
 ===================================================================
---- gnomeradio-1.8.orig/help/fr/fr.po	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/fr/fr.po	2013-09-08 16:48:54.950426643 +0000
+--- gnomeradio-1.8.orig/help/fr/fr.po	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/fr/fr.po	2013-09-13 05:32:33.234570973 +0000
 @@ -104,14 +104,14 @@
  msgstr "Projet de documentation GNOME"
  
@@ -7302,8 +7302,8 @@
  #: C/gnomeradio.xml:12(para)
 Index: gnomeradio-1.8/help/oc/oc.po
 ===================================================================
---- gnomeradio-1.8.orig/help/oc/oc.po	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/oc/oc.po	2013-09-08 16:48:54.950426643 +0000
+--- gnomeradio-1.8.orig/help/oc/oc.po	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/oc/oc.po	2013-09-13 05:32:33.234570973 +0000
 @@ -109,7 +109,7 @@
  "the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
  "later version published by the Free Software Foundation with no Invariant "
@@ -7315,8 +7315,8 @@
  
 Index: gnomeradio-1.8/help/sv/sv.po
 ===================================================================
---- gnomeradio-1.8.orig/help/sv/sv.po	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/help/sv/sv.po	2013-09-08 16:48:54.950426643 +0000
+--- gnomeradio-1.8.orig/help/sv/sv.po	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/help/sv/sv.po	2013-09-13 05:32:33.234570973 +0000
 @@ -95,8 +95,8 @@
  msgstr "Dokumentationsprojekt för GNOME"
  
@@ -7330,7 +7330,7 @@
  msgid "This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
 Index: gnomeradio-1.8/gnome-doc-utils.make
 ===================================================================
---- gnomeradio-1.8.orig/gnome-doc-utils.make	2013-09-08 16:48:54.954426642 +0000
+--- gnomeradio-1.8.orig/gnome-doc-utils.make	2013-09-13 05:32:33.238570973 +0000
 +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
 @@ -1,574 +0,0 @@
 -# gnome-doc-utils.make - make magic for building documentation
@@ -7909,8 +7909,8 @@
 -	done
 Index: gnomeradio-1.8/configure.in
 ===================================================================
---- gnomeradio-1.8.orig/configure.in	2013-09-08 16:48:54.954426642 +0000
-+++ gnomeradio-1.8/configure.in	2013-09-08 16:48:54.950426643 +0000
+--- gnomeradio-1.8.orig/configure.in	2013-09-13 05:32:33.238570973 +0000
++++ gnomeradio-1.8/configure.in	2013-09-13 05:32:33.234570973 +0000
 @@ -38,7 +38,9 @@
  AC_SUBST(XML_CFLAGS)
  AC_SUBST(XML_LIBS)

=== added file 'debian/patches/gnomeradio-file_chooser.patch'
--- debian/patches/gnomeradio-file_chooser.patch	1970-01-01 00:00:00 +0000
+++ debian/patches/gnomeradio-file_chooser.patch	2013-09-15 02:42:45 +0000
@@ -0,0 +1,55 @@
+## Description: Switch from a GtkButton to a GtkFileChooserButton, instead of fidling around with the dialog.
+## Origin: upstream, no
+## Author: Pojar George 
+## Forwarded: no
+Index: gnomeradio-1.8/src/prefs.c
+===================================================================
+--- gnomeradio-1.8.orig/src/prefs.c	2013-05-29 16:41:32.179964469 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-05-29 16:42:36.471962557 +0000
+@@ -379,21 +379,11 @@
+ 
+ static void destination_button_clicked_cb(GtkWidget *button, gpointer data)
+ {
+-	GtkWidget *dialog;
+-	
+-	dialog = gtk_file_chooser_dialog_new(_("Choose a destination folder"), NULL, 
+-					GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
+-					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
+-					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+-					NULL);
+-	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), rec_settings.destination);
+-	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+-		if (rec_settings.destination) g_free(rec_settings.destination);
+-		rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+-		gtk_button_set_label(GTK_BUTTON(button), rec_settings.destination);
++	if (rec_settings.destination)
++	{
++		g_free(rec_settings.destination);
+ 	}
+-	
+-	gtk_widget_destroy (dialog);
++	rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(button));
+ }
+ 
+ static gboolean list_view_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+@@ -711,8 +701,9 @@
+ 	destination_label = gtk_label_new(_("Destination directory:"));
+ 	gtk_misc_set_alignment(GTK_MISC(destination_label), 0.0f, 0.5f);
+ 
+-	destination_button = gtk_button_new();
+-	gtk_button_set_label(GTK_BUTTON(destination_button), rec_settings.destination);
++	destination_button = gtk_file_chooser_button_new(
++		_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
++	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
+ 	
+ 	profile_eb = gtk_event_box_new();
+ 	profile_combo = gm_audio_profile_choose_new();
+@@ -723,7 +714,7 @@
+ 	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_button, 1, 2, 0, 1);
+ 	gtk_table_attach_defaults(GTK_TABLE(record_table), profile_eb, 0, 2, 1, 2);
+ 
+-	g_signal_connect(G_OBJECT(destination_button), "clicked", G_CALLBACK(destination_button_clicked_cb), NULL);
++	g_signal_connect(GTK_FILE_CHOOSER(destination_button), "selection-changed", G_CALLBACK(destination_button_clicked_cb), NULL);
+ 	g_signal_connect(G_OBJECT(profile_combo), "changed", G_CALLBACK(profile_combo_change_cb), NULL);
+ 
+ 	gtk_widget_set_tooltip_text(profile_eb, _("Choose the Media Profile that should be used to record."));

=== modified file 'debian/patches/gnomeradio-g_list.patch'
--- debian/patches/gnomeradio-g_list.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-g_list.patch	2013-09-15 02:42:45 +0000
@@ -3,8 +3,8 @@
 
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:49:02.946426405 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:49:02.942426405 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:41.998570713 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:41.990570713 +0000
 @@ -186,13 +186,13 @@
  		timeout_id = 0;
  		gtk_widget_destroy(data.dialog);
@@ -42,7 +42,7 @@
  		}
  	}	
  }	
-@@ -1326,7 +1327,7 @@
+@@ -1328,7 +1329,7 @@
  
  int main(int argc, char* argv[])
  {
@@ -51,7 +51,7 @@
  	DBusGProxy *proxy;
  	GError *err = NULL;
  	gboolean do_scan = FALSE;
-@@ -1402,10 +1403,11 @@
+@@ -1403,10 +1404,11 @@
  	create_tray_menu(app);
  	
  	gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
@@ -67,8 +67,8 @@
  	gtk_widget_show_all(app);
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-08 16:49:02.946426405 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-08 16:49:02.942426405 +0000
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-13 05:32:41.998570713 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-13 05:32:41.994570713 +0000
 @@ -179,8 +179,10 @@
  		else
  			ps->freq = freq;
@@ -99,8 +99,8 @@
   		gtk_widget_set_sensitive(save_button, FALSE);
  	} else {
  		gtk_widget_set_sensitive(save_button, TRUE);
-@@ -809,13 +811,11 @@
- 	gtk_widget_set_sensitive(save_button, sel);
+@@ -841,13 +843,11 @@
+ 	gtk_widget_grab_focus(list_view);
  }
  
 -static void free_preset_list(gpointer data, gpointer user_data)
@@ -117,39 +117,7 @@
  }
  
  /* Go through each row and add its data to the xmlDocPtr */
-@@ -991,9 +991,9 @@
- 
- 	/* remove previous presets */
- 	if (settings.presets != NULL) {
--		g_list_foreach(settings.presets, free_preset_list, NULL);
--		g_list_free(settings.presets);
-+		g_list_free_full (settings.presets, free_presets_list);
- 		settings.presets = NULL;
-+
- 		gtk_list_store_clear(GTK_LIST_STORE(list_store));
- 
- 		if (main_visible) {
-@@ -1031,7 +1031,9 @@
- 			preset *ps = g_malloc0(sizeof(preset));
- 			ps->title = g_strdup((gchar*)title);
- 			ps->freq = atof((gchar*)freq);
--			settings.presets = g_list_append(settings.presets, ps);
-+
-+			settings.presets = g_list_prepend(settings.presets, ps);
-+
- 			/* make sure that the path exists */
- 			gtk_tree_model_generate_path(model, (gchar*)position);
- 			/* get an iter to the path */
-@@ -1060,6 +1062,8 @@
- 	/* free the doc node */
- 	xmlFreeDoc(doc);
- 
-+	settings.presets = g_list_reverse(settings.presets);
-+
- 	gtk_widget_set_sensitive(save_button, TRUE);
- 	gtk_widget_set_sensitive(remove_button, FALSE);
- 	gtk_widget_set_sensitive(move_up_button, FALSE);
-@@ -1139,6 +1143,7 @@
+@@ -1197,6 +1197,7 @@
  	gint i;
  	char *settings_hdr, *presets_hdr, *record_hdr;
  	preset* ps;
@@ -157,7 +125,7 @@
  	
  	dialog = gtk_dialog_new_with_buttons(_("Gnomeradio Settings"), GTK_WINDOW(app), 
  			GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-@@ -1254,14 +1259,16 @@
+@@ -1312,14 +1313,16 @@
  
  	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(freq_cell_edited_cb), NULL);
  

=== modified file 'debian/patches/gnomeradio-gtk_stock.patch'
--- debian/patches/gnomeradio-gtk_stock.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-gtk_stock.patch	2013-09-15 02:42:45 +0000
@@ -2,8 +2,8 @@
 Author: POJAR GEORGE <geoubuntu@gmail.com>
 Index: gnomeradio-1.8/src/trayicon.c
 ===================================================================
---- gnomeradio-1.8.orig/src/trayicon.c	2013-09-08 16:53:04.310419230 +0000
-+++ gnomeradio-1.8/src/trayicon.c	2013-09-08 16:53:04.302419230 +0000
+--- gnomeradio-1.8.orig/src/trayicon.c	2013-09-13 05:32:45.782570600 +0000
++++ gnomeradio-1.8/src/trayicon.c	2013-09-13 05:32:45.778570600 +0000
 @@ -65,6 +65,7 @@
  }
  
@@ -66,8 +66,8 @@
          gtk_status_icon_set_tooltip_text(GTK_STATUS_ICON(tray_icon), text);
 Index: gnomeradio-1.8/src/record.c
 ===================================================================
---- gnomeradio-1.8.orig/src/record.c	2013-09-08 16:53:04.310419230 +0000
-+++ gnomeradio-1.8/src/record.c	2013-09-08 16:53:04.302419230 +0000
+--- gnomeradio-1.8.orig/src/record.c	2013-09-13 05:32:45.782570600 +0000
++++ gnomeradio-1.8/src/record.c	2013-09-13 05:32:45.778570600 +0000
 @@ -203,15 +203,14 @@
  
  GtkWidget* record_status_window(Recording *recording)
@@ -228,20 +228,17 @@
  	gtk_window_set_position(GTK_WINDOW(status_dialog), GTK_WIN_POS_CENTER);
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-08 16:53:04.310419230 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-08 16:53:04.302419230 +0000
-@@ -35,17 +35,20 @@
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-13 05:32:45.782570600 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-13 05:32:45.778570600 +0000
+@@ -38,14 +38,19 @@
  
- extern int mom_ps;
- extern gnomeradio_settings settings;
--
  extern gboolean main_visible;
  
 -static GtkWidget *device_entry, *mixer_entry;
 +static GtkWidget *device_entry;
 +static GtkWidget *mixer_entry;
  static GtkWidget *mute_on_exit_cb;
--static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+-static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
 -static GtkWidget *audio_profile_combo;
 -static GtkWidget *install_plugins_button;
  static GtkWidget *list_view;
@@ -250,13 +247,14 @@
 +static GtkWidget *save_button;
 +static GtkWidget *move_up_button;
 +static GtkWidget *move_down_button;
++static GtkWidget *add_button;
 +static GtkWidget *remove_button;
 +static GtkWidget *audio_profile_combo;
 +static GtkWidget *install_button;
  
  gboolean save_settings(void)
  {
-@@ -299,12 +302,12 @@
+@@ -299,12 +304,12 @@
  
  	/* indicate whether additional plugins are required to encode in this format */
  	if (rb_gst_check_missing_plugins (profile, NULL, NULL)) {
@@ -272,7 +270,7 @@
  	}
  	g_free (media_type);
  }
-@@ -876,11 +879,11 @@
+@@ -908,11 +913,11 @@
  	GtkFileFilter *file_filter_xml;
  	gchar *filename;
  
@@ -289,7 +287,7 @@
  
  	file_filter_all = gtk_file_filter_new();
  	gtk_file_filter_set_name(file_filter_all, _("All Files"));
-@@ -1078,11 +1081,11 @@
+@@ -1129,11 +1134,11 @@
  	GtkFileFilter *file_filter_xml;
  	gchar *filename;
  
@@ -306,7 +304,7 @@
  
  	file_filter_all = gtk_file_filter_new();
  	gtk_file_filter_set_name(file_filter_all, _("All Files"));
-@@ -1125,38 +1128,38 @@
+@@ -1179,38 +1184,39 @@
  GtkWidget* prefs_window(GtkWidget *app)
  {
  	GtkWidget *dialog;
@@ -320,17 +318,18 @@
 -	GtkWidget *audio_profile_label;
 -	GtkWidget *device_label, *mixer_label;
 -	GtkWidget *button_box;
--	GtkWidget *open_button, *add_button;
+-	GtkWidget *open_button;
 +	GtkWidget *label;
  	GtkWidget *scrolled_window;
  	GtkCellRenderer *cellrenderer;
  	GtkTreeViewColumn *list_column;
 +	GtkWidget *button_box;
-+	GtkWidget *open_button, *add_button;
++	GtkWidget *open_button;
 +	GtkWidget *destination_button;
 +	GtkWidget *image;
  
  	GstEncodingProfile *profile;
++
  	gint i;
 -	char *settings_hdr, *presets_hdr, *record_hdr;
 +	gchar *markup;
@@ -360,7 +359,7 @@
  	
  	grid = gtk_grid_new();
  	gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
-@@ -1164,29 +1167,30 @@
+@@ -1218,29 +1224,30 @@
  	gtk_box_pack_start(GTK_BOX(box), grid, TRUE, TRUE, 0);
  
  	/* The general settings part */
@@ -370,9 +369,6 @@
 -	gtk_label_set_use_markup(GTK_LABEL(settings_label), TRUE);
 -	g_free(settings_hdr);
 -	gtk_grid_attach(GTK_GRID(grid), settings_label, 0, 0, 2, 1);
--
--	s_indent_label = gtk_label_new("");
--	gtk_grid_attach(GTK_GRID(grid), s_indent_label, 0, 1, 1, 3);
 +	label = gtk_label_new (NULL);
 +	gtk_widget_set_halign (label, GTK_ALIGN_START);
 +	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("General Settings"));
@@ -387,6 +383,9 @@
 +	gtk_widget_set_halign (label, GTK_ALIGN_START);
 +	gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1);
  
+-	s_indent_label = gtk_label_new("");
+-	gtk_grid_attach(GTK_GRID(grid), s_indent_label, 0, 1, 1, 3);
+-
 -	device_label = gtk_label_new(_("Radio Device:"));
 -	gtk_widget_set_halign(device_label, GTK_ALIGN_START);
  	device_entry = gtk_entry_new();
@@ -407,7 +406,7 @@
  	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 2, 2, 1, 1);
  
  	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit"));
-@@ -1205,15 +1209,15 @@
+@@ -1259,15 +1266,15 @@
  	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("Mute mixer device on exit"));
  
  	/* The presets part */
@@ -431,7 +430,7 @@
  
  	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
  	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled_window), 75);
-@@ -1276,7 +1280,8 @@
+@@ -1330,7 +1337,8 @@
  	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
  
  	move_up_button = gtk_button_new();
@@ -441,7 +440,7 @@
  	gtk_button_set_relief (GTK_BUTTON (move_up_button), GTK_RELIEF_NONE);
  	gtk_widget_set_sensitive(move_up_button, FALSE);
  	gtk_widget_set_tooltip_text(move_up_button, _("Move preset up"));
-@@ -1284,7 +1289,8 @@
+@@ -1338,7 +1346,8 @@
  	g_signal_connect(G_OBJECT(move_up_button), "clicked", G_CALLBACK(move_up_button_clicked_cb), NULL);
  
  	move_down_button = gtk_button_new();
@@ -451,7 +450,7 @@
  	gtk_button_set_relief (GTK_BUTTON (move_down_button), GTK_RELIEF_NONE);
  	gtk_widget_set_sensitive(move_down_button, FALSE);
  	gtk_widget_set_tooltip_text(move_down_button, _("Move preset down"));
-@@ -1292,14 +1298,16 @@
+@@ -1346,14 +1355,16 @@
  	g_signal_connect(G_OBJECT(move_down_button), "clicked", G_CALLBACK(move_down_button_clicked_cb), NULL);
  
  	add_button = gtk_button_new();
@@ -470,7 +469,7 @@
  	gtk_button_set_relief (GTK_BUTTON (remove_button), GTK_RELIEF_NONE);
  	gtk_widget_set_tooltip_text(remove_button, _("Remove preset"));
   	gtk_widget_set_sensitive(remove_button, FALSE);
-@@ -1307,20 +1315,21 @@
+@@ -1361,20 +1372,21 @@
  	g_signal_connect(G_OBJECT(remove_button), "clicked", G_CALLBACK(remove_button_clicked_cb), NULL);
  
   	save_button = gtk_button_new();
@@ -499,7 +498,7 @@
  	gtk_button_set_relief (GTK_BUTTON (open_button), GTK_RELIEF_NONE);
  	gtk_widget_set_tooltip_text(open_button, _("Load from file\xE2\x80\xA6"));
  	gtk_widget_set_sensitive(open_button, TRUE);
-@@ -1337,49 +1346,48 @@
+@@ -1391,49 +1403,48 @@
  	gtk_grid_attach(GTK_GRID(grid), button_box, 2, 7, 1, 1);
  
  	/* The record settings part */
@@ -578,8 +577,8 @@
  	gtk_widget_set_tooltip_text(audio_profile_combo, _("Choose the format that should be used for recording."));
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:53:04.310419230 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:53:04.306419230 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:45.782570600 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:45.778570600 +0000
 @@ -158,29 +158,33 @@
  static void initial_frequency_scan(GtkWidget *app)
  {
@@ -631,7 +630,7 @@
  	
  	gtk_widget_show_all(data.dialog);
  	
-@@ -468,7 +472,7 @@
+@@ -470,7 +474,7 @@
  	else
  		buffer = g_strdup_printf(_("Gnomeradio - %.2f MHz"), freq);
  	gtk_window_set_title(GTK_WINDOW(window), buffer);
@@ -640,7 +639,7 @@
  	g_free(buffer);
  	
  	buffer = g_strdup_printf(_("Frequency: %.2f MHz"), freq);
-@@ -974,194 +978,180 @@
+@@ -976,194 +980,180 @@
  GtkWidget* gnome_radio_gui(void)
  {
  	GtkWidget *app;
@@ -994,7 +993,7 @@
  
  	gtk_container_add (GTK_CONTAINER (app), vbox);
  	gtk_widget_show_all (vbox);
-@@ -1489,15 +1479,15 @@
+@@ -1491,15 +1481,15 @@
  	connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
  
  	if (error) {

=== modified file 'debian/patches/gnomeradio-media_types.patch'
--- debian/patches/gnomeradio-media_types.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-media_types.patch	2013-09-15 02:42:45 +0000
@@ -3,8 +3,8 @@
 Author: POJAR GEORGE <geoubuntu@gmail.com>
 Index: gnomeradio-1.8/configure.in
 ===================================================================
---- gnomeradio-1.8.orig/configure.in	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/configure.in	2013-09-08 16:48:51.298426751 +0000
+--- gnomeradio-1.8.orig/configure.in	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/configure.in	2013-09-13 05:32:30.430571057 +0000
 @@ -26,11 +26,11 @@
  AC_SUBST(ALSA_CFLAGS)
  AC_SUBST(ALSA_LIBS)
@@ -22,7 +22,7 @@
 Index: gnomeradio-1.8/data/gnomeradio.gep
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/data/gnomeradio.gep	2013-09-08 16:48:51.298426751 +0000
++++ gnomeradio-1.8/data/gnomeradio.gep	2013-09-13 05:32:30.430571057 +0000
 @@ -0,0 +1,49 @@
 +[GStreamer Encoding Target]
 +name = gnomeradio
@@ -75,8 +75,8 @@
 +presence = 1
 Index: gnomeradio-1.8/data/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/data/Makefile.am	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/data/Makefile.am	2013-09-08 16:48:51.298426751 +0000
+--- gnomeradio-1.8.orig/data/Makefile.am	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/data/Makefile.am	2013-09-13 05:32:30.430571057 +0000
 @@ -5,6 +5,9 @@
  applications_DATA = $(applications_in_files:.desktop.in=.desktop)
  @INTLTOOL_DESKTOP_RULE@
@@ -90,7 +90,7 @@
 Index: gnomeradio-1.8/src/rb_missing_plugins.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/rb_missing_plugins.c	2013-09-08 16:48:51.298426751 +0000
++++ gnomeradio-1.8/src/rb_missing_plugins.c	2013-09-13 05:32:30.430571057 +0000
 @@ -0,0 +1,253 @@
 +/* rb_missing_plugins.c
 +
@@ -348,7 +348,7 @@
 Index: gnomeradio-1.8/src/rb_missing_plugins.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/rb_missing_plugins.h	2013-09-08 16:48:51.298426751 +0000
++++ gnomeradio-1.8/src/rb_missing_plugins.h	2013-09-13 05:32:30.430571057 +0000
 @@ -0,0 +1,33 @@
 +/* rb_missing_plugins.h
 +
@@ -386,7 +386,7 @@
 Index: gnomeradio-1.8/src/rb_gst_media_types.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/rb_gst_media_types.c	2013-09-08 16:48:51.298426751 +0000
++++ gnomeradio-1.8/src/rb_gst_media_types.c	2013-09-13 05:32:30.430571057 +0000
 @@ -0,0 +1,338 @@
 +/*
 + *  Copyright (C) 2010  Jonathan Matthew  <jonathan@d14n.org>
@@ -729,7 +729,7 @@
 Index: gnomeradio-1.8/src/rb_gst_media_types.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gnomeradio-1.8/src/rb_gst_media_types.h	2013-09-08 16:48:51.298426751 +0000
++++ gnomeradio-1.8/src/rb_gst_media_types.h	2013-09-13 05:32:30.430571057 +0000
 @@ -0,0 +1,76 @@
 +/*
 + *  Copyright (C) 2010  Jonathan Matthew <jonathan@d14n.org>
@@ -809,8 +809,8 @@
 +#endif /* __MEDIA_TYPES_H */
 Index: gnomeradio-1.8/data/gnomeradio.schemas.in
 ===================================================================
---- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-08 16:48:51.298426751 +0000
+--- gnomeradio-1.8.orig/data/gnomeradio.schemas.in	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/data/gnomeradio.schemas.in	2013-09-13 05:32:30.430571057 +0000
 @@ -89,10 +89,10 @@
        <applyto>/apps/gnomeradio/recording/profile</applyto>
        <owner>gnomeradio</owner>
@@ -827,8 +827,8 @@
  
 Index: gnomeradio-1.8/src/Makefile.am
 ===================================================================
---- gnomeradio-1.8.orig/src/Makefile.am	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/Makefile.am	2013-09-08 16:48:51.298426751 +0000
+--- gnomeradio-1.8.orig/src/Makefile.am	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/Makefile.am	2013-09-13 05:32:30.434571056 +0000
 @@ -18,6 +18,8 @@
  	mixer.h			\
  	prefs.h			\
@@ -849,8 +849,8 @@
  	trayicon.c		\
 Index: gnomeradio-1.8/src/rec_tech.c
 ===================================================================
---- gnomeradio-1.8.orig/src/rec_tech.c	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/rec_tech.c	2013-09-08 16:48:51.302426751 +0000
+--- gnomeradio-1.8.orig/src/rec_tech.c	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/rec_tech.c	2013-09-13 05:32:30.434571056 +0000
 @@ -18,17 +18,19 @@
  #include "rec_tech.h"
  #include <gtk/gtk.h>
@@ -1236,8 +1236,8 @@
  /*
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:48:51.302426751 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:30.434571056 +0000
 @@ -22,7 +22,7 @@
  
  #include <config.h>
@@ -1257,7 +1257,7 @@
  #include "../data/pixmaps/digits.xpm"
  #include "../data/pixmaps/signal.xpm"
  #include "../data/pixmaps/stereo.xpm"
-@@ -706,27 +709,69 @@
+@@ -708,27 +711,69 @@
  static int start_recording(const gchar *destination, const char* station, const char* time)
  {
  	Recording* recording;
@@ -1345,7 +1345,7 @@
  
  	return 1;
  }
-@@ -1093,8 +1138,8 @@
+@@ -1095,8 +1140,8 @@
  	gtk_widget_set_tooltip_text(stbw_button, _("0.05 MHz Backwards"));
  	gtk_widget_set_tooltip_text(stfw_button, _("0.05 MHz Forwards"));
  	gtk_widget_set_tooltip_text(about_button, _("About Gnomeradio"));
@@ -1356,7 +1356,7 @@
  	gtk_widget_set_tooltip_text(volume_button, _("Adjust the Volume"));
  	gtk_widget_set_tooltip_text(quit_button, _("Quit"));
  	text = g_strdup_printf(_("Frequency: %.2f MHz"), gtk_adjustment_get_value(adj)/STEPS);
-@@ -1323,6 +1368,8 @@
+@@ -1324,6 +1369,8 @@
  
  	/* Initizialize GStreamer */
  	gst_init(&argc, &argv);
@@ -1365,7 +1365,7 @@
  	
  	/* Initizialize Gconf */
  	if (!gconf_init(argc, argv, &err)) {
-@@ -1335,7 +1382,6 @@
+@@ -1336,7 +1383,6 @@
  	} else {
  		gconf_client_set_global_default_error_handler((GConfClientErrorHandlerFunc)gconf_error_handler);
  		gconf_client_set_error_handling(gconf_client_get_default(),  GCONF_CLIENT_HANDLE_ALL);
@@ -1375,8 +1375,8 @@
  	load_settings();
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-08 16:48:51.302426751 +0000
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-13 05:32:30.434571056 +0000
 @@ -16,7 +16,9 @@
  
  #include <gconf/gconf-client.h>
@@ -1400,7 +1400,7 @@
 @@ -37,6 +41,8 @@
  static GtkWidget *device_entry, *mixer_entry;
  static GtkWidget *mute_on_exit_cb;
- static GtkWidget *save_button, *move_up_button, *move_down_button, *remove_button;
+ static GtkWidget *save_button, *move_up_button, *move_down_button, *add_button, *remove_button;
 +static GtkWidget *audio_profile_combo;
 +static GtkWidget *install_plugins_button;
  static GtkWidget *list_view;
@@ -1557,7 +1557,7 @@
  }
  
  static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
-@@ -1001,14 +1127,15 @@
+@@ -1059,14 +1185,15 @@
  	GtkWidget *s_indent_label, *p_indent_label, *r_indent_label;
  	GtkWidget *destination_label;
  	GtkWidget *destination_button;
@@ -1566,7 +1566,7 @@
 +	GtkWidget *audio_profile_label;
  	GtkWidget *device_label, *mixer_label;
  	GtkWidget *button_box;
- 	GtkWidget *open_button, *add_button;
+ 	GtkWidget *open_button;
  	GtkWidget *scrolled_window;
  	GtkCellRenderer *cellrenderer;
  	GtkTreeViewColumn *list_column;
@@ -1575,7 +1575,7 @@
  	gint i;
  	char *settings_hdr, *presets_hdr, *record_hdr;
  	preset* ps;
-@@ -1220,22 +1347,35 @@
+@@ -1278,22 +1405,35 @@
  		_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
  	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
  	
@@ -1623,8 +1623,8 @@
  
 Index: gnomeradio-1.8/src/record.c
 ===================================================================
---- gnomeradio-1.8.orig/src/record.c	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/record.c	2013-09-08 16:48:51.302426751 +0000
+--- gnomeradio-1.8.orig/src/record.c	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/record.c	2013-09-13 05:32:30.434571056 +0000
 @@ -30,17 +30,20 @@
  #include "rec_tech.h"
  #include "prefs.h"
@@ -1798,8 +1798,8 @@
  	return TRUE;
 Index: gnomeradio-1.8/src/rec_tech.h
 ===================================================================
---- gnomeradio-1.8.orig/src/rec_tech.h	2013-09-08 16:48:51.310426751 +0000
-+++ gnomeradio-1.8/src/rec_tech.h	2013-09-08 16:48:51.302426751 +0000
+--- gnomeradio-1.8.orig/src/rec_tech.h	2013-09-13 05:32:30.438571056 +0000
++++ gnomeradio-1.8/src/rec_tech.h	2013-09-13 05:32:30.434571056 +0000
 @@ -16,6 +16,7 @@
  
  #ifndef _REC_TECH_H

=== added file 'debian/patches/gnomeradio-preferences.patch'
--- debian/patches/gnomeradio-preferences.patch	1970-01-01 00:00:00 +0000
+++ debian/patches/gnomeradio-preferences.patch	2013-09-15 02:42:45 +0000
@@ -0,0 +1,182 @@
+Index: gnomeradio-1.8/src/prefs.c
+===================================================================
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-15 01:58:13.036974657 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-15 01:58:13.032974657 +0000
+@@ -42,7 +42,7 @@
+ 
+ static GtkWidget *device_entry;
+ static GtkWidget *mixer_entry;
+-static GtkWidget *mute_on_exit_cb;
++static GtkWidget *mute_on_exit;
+ static GtkWidget *list_view;
+ static GtkListStore *list_store;
+ static GtkTreeSelection *selection;
+@@ -202,7 +202,7 @@
+ 	
+ static void mute_on_exit_toggled_cb(GtkWidget* widget, gpointer data)
+ {
+-	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb));
++	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit));
+ }	
+ 
+ static gboolean device_entry_activate_cb(GtkWidget *widget, gpointer data)
+@@ -1237,73 +1237,72 @@
+ 
+ 	content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
+ 
+-	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 15);
++	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+ 	gtk_container_set_border_width(GTK_CONTAINER(box), 10);
+ 	gtk_box_pack_start (GTK_BOX (content_area), box, TRUE, TRUE, 0);
+ 	
+ 	grid = gtk_grid_new();
+ 	gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
+-	gtk_grid_set_column_spacing(GTK_GRID(grid), 20);
++	gtk_grid_set_column_spacing(GTK_GRID(grid), 40);
+ 	gtk_box_pack_start(GTK_BOX(box), grid, TRUE, TRUE, 0);
+ 
+ 	/* The general settings part */
+ 	label = gtk_label_new (NULL);
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("General Settings"));
+ 	gtk_label_set_markup (GTK_LABEL (label), markup);
+ 	g_free (markup);
+-	gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 2, 1);
++	gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 1, 1);
+ 
+-	label = gtk_label_new ("");
+-	gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 3);
+-
+-	label = gtk_label_new (_("Radio Device:"));
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+-	gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1);
++	label = gtk_label_new (_("Radio device:"));
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
++	gtk_widget_set_margin_left (label, 10);
++	gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
+ 
+ 	device_entry = gtk_entry_new();
++
+ 	if (autodetect)
+ 		gtk_entry_set_placeholder_text(GTK_ENTRY(device_entry), "auto");
+ 	else
+ 		gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
+-	gtk_grid_attach(GTK_GRID(grid), device_entry, 2, 1, 1, 1);
+ 
+-	label = gtk_label_new (_("Mixer Source:"));
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+-	gtk_grid_attach (GTK_GRID (grid), label, 1, 2, 1, 1);
++	gtk_grid_attach(GTK_GRID(grid), device_entry, 1, 1, 1, 1);
++
++	label = gtk_label_new (_("Mixer source:"));
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
++	gtk_widget_set_margin_left (label, 10);
++	gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
+ 
+ 	mixer_entry = gtk_entry_new();
+ 	gtk_entry_set_text(GTK_ENTRY(mixer_entry), settings.mixer);
+-	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 2, 2, 1, 1);
++	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 1, 2, 1, 1);
+ 
+-	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit"));
+-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
+-
+-	gtk_grid_attach(GTK_GRID(grid), mute_on_exit_cb, 1, 3, 1, 1);
++	mute_on_exit = gtk_check_button_new_with_label(_("Mute on exit"));
++	gtk_widget_set_margin_left (mute_on_exit, 10);
++	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit), settings.mute_on_exit);
++	gtk_grid_attach(GTK_GRID(grid), mute_on_exit, 0, 3, 2, 1);
+ 
+ 	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
+ 	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
+ 	g_signal_connect(G_OBJECT(device_entry), "changed", G_CALLBACK(device_entry_auto_activate_cb), NULL);
+ 	g_signal_connect(G_OBJECT(mixer_entry), "hide", G_CALLBACK(mixer_entry_activate_cb), app);
+ 	g_signal_connect(G_OBJECT(mixer_entry), "activate", G_CALLBACK(mixer_entry_activate_cb), NULL);
+-	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
++	g_signal_connect(G_OBJECT(mute_on_exit), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
+ 
+ 	gtk_widget_set_tooltip_text(device_entry, _("The radio device to use (e.g. /dev/radio0)"));
+ 	gtk_widget_set_tooltip_text(mixer_entry, _("The mixer device and channel to use (e.g. hw:0/Line)"));
+-	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("Mute mixer device on exit"));
++	gtk_widget_set_tooltip_text(mute_on_exit, _("Mute mixer device on exit"));
+ 
+ 	/* The presets part */
+ 	label = gtk_label_new (NULL);
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Presets"));
+ 	gtk_label_set_markup (GTK_LABEL (label), markup);
+ 	g_free (markup);
+-	gtk_grid_attach(GTK_GRID(grid), label, 0, 4, 2, 1);
+-
+-	label = gtk_label_new ("");
+-	gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 2);
++	gtk_grid_attach(GTK_GRID(grid), label, 0, 4, 1, 1);
+ 
+ 	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
++	gtk_widget_set_margin_left (scrolled_window, 10);
+ 	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled_window), 75);
+ 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+ 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+@@ -1359,7 +1358,7 @@
+ 		i++;
+ 	}
+ 
+-	gtk_grid_attach(GTK_GRID(grid), scrolled_window, 1, 5, 2, 2);
++	gtk_grid_attach(GTK_GRID(grid), scrolled_window, 0, 5, 2, 1);
+ 
+ 	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ 
+@@ -1427,38 +1426,37 @@
+ 	gtk_box_pack_end(GTK_BOX(button_box), save_button, FALSE, FALSE, 0);
+ 	gtk_box_pack_end(GTK_BOX(button_box), open_button, FALSE, FALSE, 0);
+ 
+-	gtk_grid_attach(GTK_GRID(grid), button_box, 2, 7, 1, 1);
++	gtk_grid_attach(GTK_GRID(grid), button_box, 1, 6, 1, 1);
+ 
+ 	/* The record settings part */
+ 	label = gtk_label_new (NULL);
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Record Settings"));
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	gtk_label_set_markup (GTK_LABEL (label), markup);
+ 	g_free (markup);
+-	gtk_grid_attach (GTK_GRID (grid), label, 0, 8, 2, 1);
+-
+-	label = gtk_label_new ("");
+-	gtk_grid_attach (GTK_GRID (grid), label, 0, 9, 1, 2);
++	gtk_grid_attach (GTK_GRID (grid), label, 0, 7, 1, 1);
+ 
+ 	label = gtk_label_new (_("Destination:"));
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+-	gtk_grid_attach(GTK_GRID(grid), label, 1, 9, 1, 1);
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
++	gtk_widget_set_margin_left (label, 10);
++	gtk_grid_attach(GTK_GRID(grid), label, 0, 8, 1, 1);
+ 
+ 	destination_button = gtk_file_chooser_button_new (_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ 	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
+-	gtk_grid_attach(GTK_GRID(grid), destination_button, 2, 9, 1, 1);
++	gtk_grid_attach(GTK_GRID(grid), destination_button, 1, 8, 1, 1);
+ 
+-	label = gtk_label_new (_("Format:"));
+-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+-	gtk_grid_attach (GTK_GRID (grid), label, 1, 10, 1, 1);
++	label = gtk_label_new (_("Output format:"));
++ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
++	gtk_widget_set_margin_left (label, 10);
++	gtk_grid_attach (GTK_GRID (grid), label, 0, 9, 1, 1);
+ 
+ 	audio_profile_combo = audio_profile_choose_new();
+ 	audio_profile_chooser_set_active(audio_profile_combo, rec_settings.profile);
+-	gtk_grid_attach (GTK_GRID (grid), audio_profile_combo, 2, 10, 1, 1);
++	gtk_grid_attach (GTK_GRID (grid), audio_profile_combo, 1, 9, 1, 1);
+ 
+ 	install_button = gtk_button_new_with_label(_("Install additional software required to use this format"));
+ 	gtk_widget_set_no_show_all (install_button, TRUE);
+-	gtk_grid_attach (GTK_GRID (grid), install_button, 2, 11, 1, 1);
++	gtk_grid_attach (GTK_GRID (grid), install_button, 1, 10, 1, 1);
+ 
+ 	profile = rb_gst_get_encoding_profile (rec_settings.profile);
+ 	if (rb_gst_check_missing_plugins (profile, NULL, NULL)) {

=== removed file 'debian/patches/gnomeradio-prefs.patch'
--- debian/patches/gnomeradio-prefs.patch	2013-05-29 16:24:49 +0000
+++ debian/patches/gnomeradio-prefs.patch	1970-01-01 00:00:00 +0000
@@ -1,55 +0,0 @@
-## Description: Switch from a GtkButton to a GtkFileChooserButton, instead of fidling around with the dialog.
-## Origin: upstream, no
-## Author: Pojar George 
-## Forwarded: no
-Index: gnomeradio-1.8/src/prefs.c
-===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-05-29 16:41:32.179964469 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-05-29 16:42:36.471962557 +0000
-@@ -379,21 +379,11 @@
- 
- static void destination_button_clicked_cb(GtkWidget *button, gpointer data)
- {
--	GtkWidget *dialog;
--	
--	dialog = gtk_file_chooser_dialog_new(_("Choose a destination folder"), NULL, 
--					GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
--					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
--					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
--					NULL);
--	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), rec_settings.destination);
--	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
--		if (rec_settings.destination) g_free(rec_settings.destination);
--		rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
--		gtk_button_set_label(GTK_BUTTON(button), rec_settings.destination);
-+	if (rec_settings.destination)
-+	{
-+		g_free(rec_settings.destination);
- 	}
--	
--	gtk_widget_destroy (dialog);
-+	rec_settings.destination = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(button));
- }
- 
- static gboolean list_view_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
-@@ -711,8 +701,9 @@
- 	destination_label = gtk_label_new(_("Destination directory:"));
- 	gtk_misc_set_alignment(GTK_MISC(destination_label), 0.0f, 0.5f);
- 
--	destination_button = gtk_button_new();
--	gtk_button_set_label(GTK_BUTTON(destination_button), rec_settings.destination);
-+	destination_button = gtk_file_chooser_button_new(
-+		_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-+	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
- 	
- 	profile_eb = gtk_event_box_new();
- 	profile_combo = gm_audio_profile_choose_new();
-@@ -723,7 +714,7 @@
- 	gtk_table_attach_defaults(GTK_TABLE(record_table), destination_button, 1, 2, 0, 1);
- 	gtk_table_attach_defaults(GTK_TABLE(record_table), profile_eb, 0, 2, 1, 2);
- 
--	g_signal_connect(G_OBJECT(destination_button), "clicked", G_CALLBACK(destination_button_clicked_cb), NULL);
-+	g_signal_connect(GTK_FILE_CHOOSER(destination_button), "selection-changed", G_CALLBACK(destination_button_clicked_cb), NULL);
- 	g_signal_connect(G_OBJECT(profile_combo), "changed", G_CALLBACK(profile_combo_change_cb), NULL);
- 
- 	gtk_widget_set_tooltip_text(profile_eb, _("Choose the Media Profile that should be used to record."));

=== modified file 'debian/patches/gnomeradio-save_the_world.patch'
--- debian/patches/gnomeradio-save_the_world.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-save_the_world.patch	2013-09-15 02:42:45 +0000
@@ -2,9 +2,9 @@
 Author: POJAR GEORGE <geoubuntu@gmail.com>
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:48:58.302426543 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:48:58.298426543 +0000
-@@ -1443,7 +1443,7 @@
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-13 05:32:36.438570878 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-13 05:32:36.430570878 +0000
+@@ -1445,7 +1445,7 @@
  	 * Necessary, because the mono/stereo reception
  	 * needs some time to be correctly detected
  	 */

=== modified file 'debian/patches/gnomeradio-station_list.patch'
--- debian/patches/gnomeradio-station_list.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-station_list.patch	2013-09-15 02:42:45 +0000
@@ -5,8 +5,8 @@
 ## Forwarded: no
 Index: gnomeradio-1.8/src/prefs.c
 ===================================================================
---- gnomeradio-1.8.orig/src/prefs.c	2013-09-06 10:50:13.567205773 +0000
-+++ gnomeradio-1.8/src/prefs.c	2013-09-06 10:52:59.979200826 +0000
+--- gnomeradio-1.8.orig/src/prefs.c	2013-09-12 17:32:04.369106000 +0000
++++ gnomeradio-1.8/src/prefs.c	2013-09-12 17:36:19.339848450 +0000
 @@ -17,6 +17,8 @@
  #include <gconf/gconf-client.h>
  #include <glib/gi18n.h>
@@ -160,7 +160,7 @@
  }
  
  static void free_string_list(GList *list)
-@@ -685,6 +699,299 @@
+@@ -685,6 +699,322 @@
  	g_list_free(list);
  }
  
@@ -324,48 +324,51 @@
 +	xmlNodePtr current;
 +	xmlChar *title, *freq, *position;
 +	GtkTreeModel *model;
++	GtkTreePath *path = NULL;
 +	GtkTreeIter iter;
++	GtkAdjustment* v_scb;
 +	GList* menuitems;
 +	GtkWidget *menuitem;
 +
 +	/* load the file */
 +	doc = xmlParseFile(filename);
 +	/* get the root item */
++	if (doc == NULL)
++		return;
++
 +	current = xmlDocGetRootElement(doc);
++	if (current == NULL) {
++		xmlFreeDoc(doc);
++		return;
++	}
 +
-+	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-+	{
++	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 +		xmlFreeDoc(doc);
-+		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-+		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-+		show_error_message(caption, detail);
-+		g_free(caption);
-+		g_free(detail);
 +		return;
 +	}
 +
 +	/* remove previous presets */
 +	if (settings.presets != NULL) {
-+		g_list_foreach(settings.presets, free_preset_list, NULL);
-+		g_list_free(settings.presets);
-+		settings.presets = NULL;
-+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-+
 +		if (main_visible) {
-+			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-+			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-+			mom_ps = g_list_length(settings.presets) - 1;
-+			preset_combo_set_item(mom_ps);
-+
-+			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-+
 +			gint i, count;
-+			count = g_list_length(menuitems);
++
++			count = g_list_length (settings.presets);
++			for (i = 0; i < count; i++)
++				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
++
++			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
++
++			count = g_list_length (menuitems);
 +			for (i = 0; i < count - 6; i++) {
-+				menuitem = g_list_nth_data(menuitems, i);
-+				gtk_widget_destroy(menuitem);
++				menuitem = g_list_nth_data (menuitems, i);
++				gtk_widget_destroy (menuitem);
 +			}
-+		}
++       		}
++
++		gtk_list_store_clear(GTK_LIST_STORE(list_store));
++
++		g_list_free_full (settings.presets, free_presets_list);
++		settings.presets = NULL;
 +       	}
 +
 +	/* get the tree view's model */
@@ -373,52 +376,72 @@
 +
 +	/* iterate through the root's children items */
 +	current = current->xmlChildrenNode;
-+	while (current)
-+	{
-+		/* check for the proper element name */
-+		if (!xmlStrcmp(current->name, (guchar*)"station"))
-+		{
-+			/* get the saved properties */
-+			title = xmlGetProp(current, (guchar*)"name");
-+			freq = xmlGetProp(current, (guchar*)"freq");
-+			position = xmlGetProp(current, (guchar*)"position");
-+
-+			preset *ps = g_malloc0(sizeof(preset));
-+			ps->title = g_strdup((gchar*)title);
-+			ps->freq = atof((gchar*)freq);
-+			settings.presets = g_list_append(settings.presets, ps);
-+			/* make sure that the path exists */
-+			gtk_tree_model_generate_path(model, (gchar*)position);
-+			/* get an iter to the path */
-+			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-+			/* set the data */
-+			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-+
-+			if (main_visible) {
-+				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-+				mom_ps = g_list_length(settings.presets) - 1;
-+				preset_combo_set_item(mom_ps);
-+
-+				menuitem = gtk_menu_item_new_with_label(ps->title);
-+
-+				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-+				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-+				gtk_widget_show(menuitem);
++	while (current) {
++        	if(!xmlIsBlankNode(current)) {
++			/* check for the proper element name */
++			if (!xmlStrcmp(current->name, (guchar*)"station")) {
++				/* get the saved properties */
++				title = xmlGetProp(current, (guchar*)"name");
++				freq = xmlGetProp(current, (guchar*)"freq");
++				position = xmlGetProp(current, (guchar*)"position");
++
++				if( title && freq && position ) {
++					preset *ps = g_malloc0(sizeof(preset));
++					ps->title = g_strdup((gchar*)title);
++					ps->freq = atof((gchar*)freq);
++
++					settings.presets = g_list_append(settings.presets, ps);
++
++					/* make sure that the path exists */
++					gtk_tree_model_generate_path(model, (gchar*)position);
++					/* get an iter to the path */
++					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
++					/* set the data */
++					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
++
++					gtk_tree_selection_unselect_all(selection);
++
++					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
++					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
++
++					if (main_visible) {
++						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
++						mom_ps = g_list_length(settings.presets) - 1;
++						preset_combo_set_item(mom_ps);
++
++						menuitem = gtk_menu_item_new_with_label(title);
++
++						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
++						g_signal_connect(G_OBJECT(menuitem), "activate",
++								 (GCallback)preset_menuitem_activate_cb,
++								 GINT_TO_POINTER (mom_ps));
++						gtk_widget_show(menuitem);
++					}
++				}
++				/* free the data */
++				xmlFree(title);
++				xmlFree(freq);
++				xmlFree(position);
 +			}
-+			/* free the data */
-+			xmlFree(title);
-+			xmlFree(freq);
-+			xmlFree(position);
++			current = current->next;
 +		}
-+		current = current->next;
 +	}
 +	/* free the doc node */
 +	xmlFreeDoc(doc);
 +
++	if (settings.presets == NULL)
++		return;
++
++	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
++
++	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
++	gtk_tree_path_free(path);
++
++	gtk_widget_grab_focus(list_view);
++
++	list_view_cursor_changed_cb(list_view, NULL);
 +	gtk_widget_set_sensitive(save_button, TRUE);
-+	gtk_widget_set_sensitive(remove_button, FALSE);
-+	gtk_widget_set_sensitive(move_up_button, FALSE);
-+	gtk_widget_set_sensitive(move_down_button, FALSE);
++	gtk_widget_set_sensitive(remove_button, TRUE);
 +}
 +
 +/* Callback for the "Load from file" button; calls load_from_file */
@@ -460,7 +483,7 @@
  GtkWidget* prefs_window(GtkWidget *app)
  {
  	GtkWidget *dialog;
-@@ -698,7 +1005,7 @@
+@@ -698,7 +1028,7 @@
  	GtkWidget *mixer_eb, *profile_eb;
  	GtkWidget *device_label, *mixer_label;
  	GtkWidget *button_box;
@@ -469,7 +492,7 @@
  	GtkWidget *scrolled_window;
  	GtkCellRenderer *cellrenderer;
  	GtkTreeViewColumn *list_column;
-@@ -788,22 +1095,22 @@
+@@ -788,22 +1118,22 @@
  
  	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
  	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled_window), 75);
@@ -500,7 +523,7 @@
  	g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(list_view_selection_changed_cb), list_view);
  
  	/*gtk_tree_selection_select_path(selection, gtk_tree_path_new_from_string("0"));
-@@ -816,6 +1123,7 @@
+@@ -816,6 +1146,7 @@
  	gtk_tree_view_column_set_reorderable(list_column, TRUE);
  	gtk_tree_view_column_set_expand(list_column, TRUE);
  	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
@@ -508,7 +531,7 @@
  	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(name_cell_edited_cb), NULL);
  
  	cellrenderer = gtk_cell_renderer_text_new();
-@@ -826,6 +1134,7 @@
+@@ -826,6 +1157,7 @@
  	gtk_tree_view_column_set_reorderable(list_column, TRUE);
  	gtk_tree_view_column_set_expand(list_column, FALSE);
  	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
@@ -516,7 +539,7 @@
  	g_signal_connect(G_OBJECT(cellrenderer), "edited", G_CALLBACK(freq_cell_edited_cb), NULL);
  
  	for (i = 0; i < g_list_length(settings.presets); i++) {
-@@ -838,26 +1147,31 @@
+@@ -838,26 +1170,31 @@
  		g_free(buffer);
  	}
  
@@ -561,7 +584,7 @@
  	g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(add_button_clicked_cb), NULL);
  
   	remove_button = gtk_button_new();
-@@ -865,14 +1179,37 @@
+@@ -865,14 +1202,37 @@
  	gtk_button_set_relief (GTK_BUTTON (remove_button), GTK_RELIEF_NONE);
  	gtk_widget_set_tooltip_text(remove_button, _("Remove preset"));
   	gtk_widget_set_sensitive(remove_button, FALSE);

=== modified file 'debian/patches/gnomeradio-thread_safe.patch'
--- debian/patches/gnomeradio-thread_safe.patch	2013-09-06 10:54:25 +0000
+++ debian/patches/gnomeradio-thread_safe.patch	2013-09-15 02:42:45 +0000
@@ -2,8 +2,8 @@
 Author: POJAR GEORGE <geoubuntu@gmail.com>
 Index: gnomeradio-1.8/src/get_media_devices.c
 ===================================================================
---- gnomeradio-1.8.orig/src/get_media_devices.c	2013-09-08 16:49:05.814426320 +0000
-+++ gnomeradio-1.8/src/get_media_devices.c	2013-09-08 16:49:05.810426320 +0000
+--- gnomeradio-1.8.orig/src/get_media_devices.c	2013-09-11 15:38:52.579604252 +0000
++++ gnomeradio-1.8/src/get_media_devices.c	2013-09-11 15:38:52.575604252 +0000
 @@ -24,6 +24,7 @@
  #include <string.h>
  #include <stdlib.h>
@@ -56,8 +56,8 @@
  			continue;
 Index: gnomeradio-1.8/src/gui.c
 ===================================================================
---- gnomeradio-1.8.orig/src/gui.c	2013-09-08 16:49:05.814426320 +0000
-+++ gnomeradio-1.8/src/gui.c	2013-09-08 16:52:54.186419531 +0000
+--- gnomeradio-1.8.orig/src/gui.c	2013-09-11 15:38:52.579604252 +0000
++++ gnomeradio-1.8/src/gui.c	2013-09-11 15:38:52.575604252 +0000
 @@ -64,23 +64,31 @@
  int alsa_latency = DEFAULT_LATENCY;
  int alsa_debug = 0;
@@ -97,7 +97,7 @@
  static gint mode;
  
  static DBusGProxy      * connect_to_session	       (void);
-@@ -782,10 +790,12 @@
+@@ -784,10 +792,12 @@
  	char *station;
  	char time_str[100];
  	time_t t;

=== modified file 'debian/patches/series'
--- debian/patches/series	2013-09-10 17:10:13 +0000
+++ debian/patches/series	2013-09-15 02:42:45 +0000
@@ -14,7 +14,7 @@
 gnomeradio-lirc.patch
 gnomeradio-ngettext.patch
 gnomeradio-help.patch
-gnomeradio-prefs.patch
+gnomeradio-file_chooser.patch
 gnomeradio-function.patch
 gnomeradio-about.patch
 gnomeradio-record.patch
@@ -41,3 +41,4 @@
 gnomeradio-thread_safe.patch
 gnomeradio-gtk_stock.patch
 gnomeradio-auto_device.patch
+gnomeradio-preferences.patch

=== modified file 'src/gui.c'
--- src/gui.c	2013-09-10 17:10:13 +0000
+++ src/gui.c	2013-09-15 02:42:45 +0000
@@ -58,6 +58,8 @@
    USB radio devices benefit from a larger default latency */
 #define DEFAULT_LATENCY 500
 
+int autodetect;
+
 int alsa_loopback = 1;
 char *alsa_playback = NULL;
 char *alsa_capture = NULL;
@@ -68,7 +70,6 @@
 gnomeradio_settings settings;
 
 gboolean main_visible;
-gboolean autodetect;
 
 GtkWidget *app;
 GtkWidget *preset_combo;
@@ -258,7 +259,7 @@
 	
 	/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
 	
-	settings_device_cb (mode);
+	action_mode (mode);
 
 	choise = GTK_RESPONSE_HELP;
 	while (choise == GTK_RESPONSE_HELP)
@@ -270,7 +271,7 @@
 				display_help_cb("gnomeradio-settings");
 			break;
 			default:
-				/* We need the hide signal to get the value of the device_entry */
+				/* We need the hide signal to get the value of the device[mixer]_entry */
 				gtk_widget_hide(dialog);
 				gtk_widget_destroy(dialog);
 		}
@@ -290,19 +291,18 @@
 			driver = DRIVER_V4L2;
 	}
 
-	autodetect = FALSE;
-	if (0 == strcmp(settings.device, "auto")) {
-		radio_set_device(settings.device, AUTO);
-		autodetect = TRUE;
-	}
+	autodetect = 0;
+	if (0 == strcmp(settings.device, "auto"))
+		autodetect = 1;
 
 	if (!radio_init(settings.device, driver)) {
 		char *caption, *detail;
 
 		if (autodetect) {
-			caption = g_strdup_printf (_("Could not find an radio device to connect to!"));
-			detail = g_strdup_printf (_("Please ensure that you have a radio device connected.\n"
-						    "Also make sure that the device is connected properly."));
+			caption = g_strdup_printf (_("Could not find any radio device!"));
+			detail = g_strdup_printf (_("Please ensure that you have a radio device connected to your computer.\n"
+						    "You can also use the dmesg command: \"dmesg | grep radio\" to determine\n"
+						    "whether device is properly detected."));
 		} else {
 			caption = g_strdup_printf (_("Could not open radio device \"%s\"!"), settings.device);
 			detail = g_strdup_printf (_("You can auto detect radio device by typing \"auto\" in device settings."));
@@ -315,6 +315,7 @@
 		if (!restart) {
 			mode = RADIO_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 	}
 }
@@ -342,6 +343,7 @@
 		if (!restart) {
 			mode = MIXER_DEVICE;
 			prefs_button_clicked_cb(NULL, app);
+			mode = PRESETS;
 		}
 
 	} else {
@@ -907,7 +909,7 @@
 static void about_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	static GtkWidget *about;
-	const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
+	const char *authors[] = {"J\xc3\xb6rgen Scheibengruber <mfcn@gmx.de>", NULL};
 	
 	/* Feel free to put your names here translators :-) */
 	char *translators = _("TRANSLATORS");
@@ -921,7 +923,7 @@
 	
 	gtk_show_about_dialog (NULL,
 			       "version", VERSION,
-			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 Jörgen Scheibengruber"),
+			       "copyright", _("Copyright \xc2\xa9 2001 - 2006 J\xc3\xb6rgen Scheibengruber"),
 			       "comments", _("Listen to FM radio"),
 			       "authors", authors,
 			       "translator-credits", strcmp("TRANSLATORS", translators) ? translators : NULL,
@@ -1377,7 +1379,6 @@
 		g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
 			  err->message, argv[0]);
 		g_error_free(err);
-		g_option_context_free(ctx);
 		exit(1);
 	}
 	g_option_context_free(ctx);
@@ -1430,6 +1431,7 @@
 
 	gtk_widget_show_all(app);
 	main_visible = TRUE;
+	mode = PRESETS;
 
 	/* Create an tray icon */
 	create_tray_icon(app);

=== modified file 'src/prefs.c'
--- src/prefs.c	2013-09-10 17:10:13 +0000
+++ src/prefs.c	2013-09-15 02:42:45 +0000
@@ -30,23 +30,26 @@
 #include "rb_gst_media_types.h"
 #include "rb_missing_plugins.h"
 
+extern int autodetect;
+
 extern GtkWidget *preset_combo;
 extern GtkAdjustment *adj;
 
 extern int mom_ps;
 extern gnomeradio_settings settings;
+
 extern gboolean main_visible;
-extern gboolean autodetect;
 
 static GtkWidget *device_entry;
 static GtkWidget *mixer_entry;
-static GtkWidget *mute_on_exit_cb;
+static GtkWidget *mute_on_exit;
 static GtkWidget *list_view;
 static GtkListStore *list_store;
 static GtkTreeSelection *selection;
 static GtkWidget *save_button;
 static GtkWidget *move_up_button;
 static GtkWidget *move_down_button;
+static GtkWidget *add_button;
 static GtkWidget *remove_button;
 static GtkWidget *audio_profile_combo;
 static GtkWidget *install_button;
@@ -199,7 +202,7 @@
 	
 static void mute_on_exit_toggled_cb(GtkWidget* widget, gpointer data)
 {
-	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb));
+	settings.mute_on_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_on_exit));
 }	
 
 static gboolean device_entry_activate_cb(GtkWidget *widget, gpointer data)
@@ -215,16 +218,30 @@
 		g_free(settings.device);
 
 	settings.device = g_strdup(text);
-
-	autodetect = FALSE;
-	if (0 == strcmp(settings.device, "auto"))
-		autodetect = TRUE;
 	
 	start_radio(TRUE, data);
 	
 	return FALSE;
 }
 
+static void
+device_entry_auto_activate_cb(GtkEntry* entry, const gchar* text, gpointer data)
+{
+	GtkEditable *editable;
+
+	editable = GTK_EDITABLE (entry);
+
+	text = gtk_entry_get_text(GTK_ENTRY(device_entry));
+
+	autodetect = 0;
+	if (0 == strcmp(text, "auto")) {
+		g_signal_emit_by_name(G_OBJECT (editable), "activate");
+		autodetect = 1;
+
+		gtk_widget_grab_focus(add_button);
+	}
+}
+
 static gboolean mixer_entry_activate_cb(GtkWidget *widget, gpointer data)
 {
 	const gchar *text;
@@ -780,11 +797,13 @@
 	GtkTreePath *path = NULL;
 	GtkTreeViewColumn *focus_column = NULL;
 	
-	if (settings.presets == NULL) return;
+	if (settings.presets == NULL)
+		return;
 
 	gtk_tree_view_get_cursor(GTK_TREE_VIEW(list_view), &path, &focus_column);
 	
-	if (!path) return;
+	if (!path)
+		return;
 
 	row = gtk_tree_path_get_indices(path);
 	g_assert(row);
@@ -822,6 +841,36 @@
 	gtk_widget_set_sensitive(save_button, sel);
 }
 
+static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTreePath *path = NULL;
+	GtkTreeIter iter;
+	gint active;
+
+	if (settings.presets == NULL) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
+
+	if (active < 0) {
+		gtk_widget_grab_focus(add_button);
+		return;
+	}
+
+	if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+}
+
 static void free_presets_list (gpointer data)
 {
 	preset *ps = (preset *) data;
@@ -980,48 +1029,51 @@
 	xmlNodePtr current;
 	xmlChar *title, *freq, *position;
 	GtkTreeModel *model;
+	GtkTreePath *path = NULL;
 	GtkTreeIter iter;
+	GtkAdjustment* v_scb;
 	GList* menuitems;
 	GtkWidget *menuitem;
 
 	/* load the file */
 	doc = xmlParseFile(filename);
 	/* get the root item */
+	if (doc == NULL)
+		return;
+
 	current = xmlDocGetRootElement(doc);
+	if (current == NULL) {
+		xmlFreeDoc(doc);
+		return;
+	}
 
-	if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
-	{
+	if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
 		xmlFreeDoc(doc);
-		char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
-		char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
-		show_error_message(caption, detail);
-		g_free(caption);
-		g_free(detail);
 		return;
 	}
 
 	/* remove previous presets */
 	if (settings.presets != NULL) {
-		g_list_free_full (settings.presets, free_presets_list);
-		settings.presets = NULL;
-
-		gtk_list_store_clear(GTK_LIST_STORE(list_store));
-
 		if (main_visible) {
-			gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
-			gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
-			mom_ps = g_list_length(settings.presets) - 1;
-			preset_combo_set_item(mom_ps);
-
-			menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
-
 			gint i, count;
-			count = g_list_length(menuitems);
+
+			count = g_list_length (settings.presets);
+			for (i = 0; i < count; i++)
+				gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
+
+			menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
+
+			count = g_list_length (menuitems);
 			for (i = 0; i < count - 6; i++) {
-				menuitem = g_list_nth_data(menuitems, i);
-				gtk_widget_destroy(menuitem);
+				menuitem = g_list_nth_data (menuitems, i);
+				gtk_widget_destroy (menuitem);
 			}
-		}
+       		}
+
+		gtk_list_store_clear(GTK_LIST_STORE(list_store));
+
+		g_list_free_full (settings.presets, free_presets_list);
+		settings.presets = NULL;
        	}
 
 	/* get the tree view's model */
@@ -1029,56 +1081,72 @@
 
 	/* iterate through the root's children items */
 	current = current->xmlChildrenNode;
-	while (current)
-	{
-		/* check for the proper element name */
-		if (!xmlStrcmp(current->name, (guchar*)"station"))
-		{
-			/* get the saved properties */
-			title = xmlGetProp(current, (guchar*)"name");
-			freq = xmlGetProp(current, (guchar*)"freq");
-			position = xmlGetProp(current, (guchar*)"position");
-
-			preset *ps = g_malloc0(sizeof(preset));
-			ps->title = g_strdup((gchar*)title);
-			ps->freq = atof((gchar*)freq);
-
-			settings.presets = g_list_prepend(settings.presets, ps);
-
-			/* make sure that the path exists */
-			gtk_tree_model_generate_path(model, (gchar*)position);
-			/* get an iter to the path */
-			gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
-			/* set the data */
-			gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
-
-			if (main_visible) {
-				gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
-				mom_ps = g_list_length(settings.presets) - 1;
-				preset_combo_set_item(mom_ps);
-
-				menuitem = gtk_menu_item_new_with_label(ps->title);
-
-				gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
-				g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
-				gtk_widget_show(menuitem);
+	while (current) {
+        	if(!xmlIsBlankNode(current)) {
+			/* check for the proper element name */
+			if (!xmlStrcmp(current->name, (guchar*)"station")) {
+				/* get the saved properties */
+				title = xmlGetProp(current, (guchar*)"name");
+				freq = xmlGetProp(current, (guchar*)"freq");
+				position = xmlGetProp(current, (guchar*)"position");
+
+				if( title && freq && position ) {
+					preset *ps = g_malloc0(sizeof(preset));
+					ps->title = g_strdup((gchar*)title);
+					ps->freq = atof((gchar*)freq);
+
+					settings.presets = g_list_append(settings.presets, ps);
+
+					/* make sure that the path exists */
+					gtk_tree_model_generate_path(model, (gchar*)position);
+					/* get an iter to the path */
+					gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
+					/* set the data */
+					gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
+
+					gtk_tree_selection_unselect_all(selection);
+
+					v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
+					gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
+
+					if (main_visible) {
+						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
+						mom_ps = g_list_length(settings.presets) - 1;
+						preset_combo_set_item(mom_ps);
+
+						menuitem = gtk_menu_item_new_with_label(title);
+
+						gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
+						g_signal_connect(G_OBJECT(menuitem), "activate",
+								 (GCallback)preset_menuitem_activate_cb,
+								 GINT_TO_POINTER (mom_ps));
+						gtk_widget_show(menuitem);
+					}
+				}
+				/* free the data */
+				xmlFree(title);
+				xmlFree(freq);
+				xmlFree(position);
 			}
-			/* free the data */
-			xmlFree(title);
-			xmlFree(freq);
-			xmlFree(position);
+			current = current->next;
 		}
-		current = current->next;
 	}
 	/* free the doc node */
 	xmlFreeDoc(doc);
 
-	settings.presets = g_list_reverse(settings.presets);
-
+	if (settings.presets == NULL)
+		return;
+
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
+
+	gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
+	gtk_tree_path_free(path);
+
+	gtk_widget_grab_focus(list_view);
+
+	list_view_cursor_changed_cb(list_view, NULL);
 	gtk_widget_set_sensitive(save_button, TRUE);
-	gtk_widget_set_sensitive(remove_button, FALSE);
-	gtk_widget_set_sensitive(move_up_button, FALSE);
-	gtk_widget_set_sensitive(move_down_button, FALSE);
+	gtk_widget_set_sensitive(remove_button, TRUE);
 }
 
 /* Callback for the "Load from file" button; calls load_from_file */
@@ -1117,7 +1185,7 @@
 	gtk_widget_destroy(dialog);
 }
 
-gboolean settings_device_cb (gint mode)
+gboolean action_mode (gint mode)
 {
 	switch (mode) {
 		case RADIO_DEVICE:
@@ -1126,6 +1194,9 @@
 		case MIXER_DEVICE:
 			gtk_widget_grab_focus (mixer_entry);
 			break;
+		case PRESETS:
+			list_view_scroll_to_active_preset_cb(list_view, NULL);
+			break;
 		default:
 			break;
 	}
@@ -1144,11 +1215,12 @@
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;
 	GtkWidget *button_box;
-	GtkWidget *open_button, *add_button;
+	GtkWidget *open_button;
 	GtkWidget *destination_button;
 	GtkWidget *image;
 
 	GstEncodingProfile *profile;
+
 	gint i;
 	gchar *markup;
 	preset* ps;
@@ -1165,72 +1237,72 @@
 
 	content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
 
-	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 15);
+	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
 	gtk_container_set_border_width(GTK_CONTAINER(box), 10);
 	gtk_box_pack_start (GTK_BOX (content_area), box, TRUE, TRUE, 0);
 	
 	grid = gtk_grid_new();
 	gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
-	gtk_grid_set_column_spacing(GTK_GRID(grid), 20);
+	gtk_grid_set_column_spacing(GTK_GRID(grid), 40);
 	gtk_box_pack_start(GTK_BOX(box), grid, TRUE, TRUE, 0);
 
 	/* The general settings part */
 	label = gtk_label_new (NULL);
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("General Settings"));
 	gtk_label_set_markup (GTK_LABEL (label), markup);
 	g_free (markup);
-	gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 2, 1);
-
-	label = gtk_label_new ("");
-	gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 3);
-
-	label = gtk_label_new (_("Radio Device:"));
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
-	gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1);
+	gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 1, 1);
+
+	label = gtk_label_new (_("Radio device:"));
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_widget_set_margin_left (label, 10);
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
 
 	device_entry = gtk_entry_new();
+
 	if (autodetect)
-		gtk_entry_set_text(GTK_ENTRY(device_entry), "auto");
+		gtk_entry_set_placeholder_text(GTK_ENTRY(device_entry), "auto");
 	else
 		gtk_entry_set_text(GTK_ENTRY(device_entry), settings.device);
-	gtk_grid_attach(GTK_GRID(grid), device_entry, 2, 1, 1, 1);
-
-	label = gtk_label_new (_("Mixer Source:"));
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
-	gtk_grid_attach (GTK_GRID (grid), label, 1, 2, 1, 1);
+
+	gtk_grid_attach(GTK_GRID(grid), device_entry, 1, 1, 1, 1);
+
+	label = gtk_label_new (_("Mixer source:"));
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_widget_set_margin_left (label, 10);
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
 
 	mixer_entry = gtk_entry_new();
 	gtk_entry_set_text(GTK_ENTRY(mixer_entry), settings.mixer);
-	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 2, 2, 1, 1);
-
-	mute_on_exit_cb = gtk_check_button_new_with_label(_("Mute on exit"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit_cb), settings.mute_on_exit);
-
-	gtk_grid_attach(GTK_GRID(grid), mute_on_exit_cb, 1, 3, 1, 1);
+	gtk_grid_attach(GTK_GRID(grid), mixer_entry, 1, 2, 1, 1);
+
+	mute_on_exit = gtk_check_button_new_with_label(_("Mute on exit"));
+	gtk_widget_set_margin_left (mute_on_exit, 10);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mute_on_exit), settings.mute_on_exit);
+	gtk_grid_attach(GTK_GRID(grid), mute_on_exit, 0, 3, 2, 1);
 
 	g_signal_connect(G_OBJECT(device_entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
 	g_signal_connect(G_OBJECT(device_entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
+	g_signal_connect(G_OBJECT(device_entry), "changed", G_CALLBACK(device_entry_auto_activate_cb), NULL);
 	g_signal_connect(G_OBJECT(mixer_entry), "hide", G_CALLBACK(mixer_entry_activate_cb), app);
 	g_signal_connect(G_OBJECT(mixer_entry), "activate", G_CALLBACK(mixer_entry_activate_cb), NULL);
-	g_signal_connect(G_OBJECT(mute_on_exit_cb), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
+	g_signal_connect(G_OBJECT(mute_on_exit), "toggled", G_CALLBACK(mute_on_exit_toggled_cb), NULL);
 
 	gtk_widget_set_tooltip_text(device_entry, _("The radio device to use (e.g. /dev/radio0)"));
 	gtk_widget_set_tooltip_text(mixer_entry, _("The mixer device and channel to use (e.g. hw:0/Line)"));
-	gtk_widget_set_tooltip_text(mute_on_exit_cb, _("Mute mixer device on exit"));
+	gtk_widget_set_tooltip_text(mute_on_exit, _("Mute mixer device on exit"));
 
 	/* The presets part */
 	label = gtk_label_new (NULL);
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Presets"));
 	gtk_label_set_markup (GTK_LABEL (label), markup);
 	g_free (markup);
-	gtk_grid_attach(GTK_GRID(grid), label, 0, 4, 2, 1);
-
-	label = gtk_label_new ("");
-	gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 2);
+	gtk_grid_attach(GTK_GRID(grid), label, 0, 4, 1, 1);
 
 	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+	gtk_widget_set_margin_left (scrolled_window, 10);
 	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled_window), 75);
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@@ -1286,7 +1358,7 @@
 		i++;
 	}
 
-	gtk_grid_attach(GTK_GRID(grid), scrolled_window, 1, 5, 2, 2);
+	gtk_grid_attach(GTK_GRID(grid), scrolled_window, 0, 5, 2, 1);
 
 	button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 
@@ -1354,38 +1426,37 @@
 	gtk_box_pack_end(GTK_BOX(button_box), save_button, FALSE, FALSE, 0);
 	gtk_box_pack_end(GTK_BOX(button_box), open_button, FALSE, FALSE, 0);
 
-	gtk_grid_attach(GTK_GRID(grid), button_box, 2, 7, 1, 1);
+	gtk_grid_attach(GTK_GRID(grid), button_box, 1, 6, 1, 1);
 
 	/* The record settings part */
 	label = gtk_label_new (NULL);
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
 	markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", _("Record Settings"));
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
 	gtk_label_set_markup (GTK_LABEL (label), markup);
 	g_free (markup);
-	gtk_grid_attach (GTK_GRID (grid), label, 0, 8, 2, 1);
-
-	label = gtk_label_new ("");
-	gtk_grid_attach (GTK_GRID (grid), label, 0, 9, 1, 2);
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 7, 1, 1);
 
 	label = gtk_label_new (_("Destination:"));
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
-	gtk_grid_attach(GTK_GRID(grid), label, 1, 9, 1, 1);
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_widget_set_margin_left (label, 10);
+	gtk_grid_attach(GTK_GRID(grid), label, 0, 8, 1, 1);
 
 	destination_button = gtk_file_chooser_button_new (_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
 	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(destination_button), rec_settings.destination);
-	gtk_grid_attach(GTK_GRID(grid), destination_button, 2, 9, 1, 1);
+	gtk_grid_attach(GTK_GRID(grid), destination_button, 1, 8, 1, 1);
 
-	label = gtk_label_new (_("Format:"));
-	gtk_widget_set_halign (label, GTK_ALIGN_START);
-	gtk_grid_attach (GTK_GRID (grid), label, 1, 10, 1, 1);
+	label = gtk_label_new (_("Output format:"));
+ 	gtk_widget_set_halign (label, GTK_ALIGN_START);
+	gtk_widget_set_margin_left (label, 10);
+	gtk_grid_attach (GTK_GRID (grid), label, 0, 9, 1, 1);
 
 	audio_profile_combo = audio_profile_choose_new();
 	audio_profile_chooser_set_active(audio_profile_combo, rec_settings.profile);
-	gtk_grid_attach (GTK_GRID (grid), audio_profile_combo, 2, 10, 1, 1);
+	gtk_grid_attach (GTK_GRID (grid), audio_profile_combo, 1, 9, 1, 1);
 
 	install_button = gtk_button_new_with_label(_("Install additional software required to use this format"));
 	gtk_widget_set_no_show_all (install_button, TRUE);
-	gtk_grid_attach (GTK_GRID (grid), install_button, 2, 11, 1, 1);
+	gtk_grid_attach (GTK_GRID (grid), install_button, 1, 10, 1, 1);
 
 	profile = rb_gst_get_encoding_profile (rec_settings.profile);
 	if (rb_gst_check_missing_plugins (profile, NULL, NULL)) {

=== modified file 'src/prefs.h'
--- src/prefs.h	2013-09-06 10:54:25 +0000
+++ src/prefs.h	2013-09-15 02:42:45 +0000
@@ -25,10 +25,11 @@
 enum
 {
 	RADIO_DEVICE,
-	MIXER_DEVICE
+	MIXER_DEVICE,
+	PRESETS
 };
 
-gboolean settings_device_cb (gint mode);
+gboolean action_mode (gint mode);
 
 GtkWidget* prefs_window(GtkWidget *app);
 

=== modified file 'src/radio.c'
--- src/radio.c	2013-09-10 17:10:13 +0000
+++ src/radio.c	2013-09-15 02:42:45 +0000
@@ -30,6 +30,8 @@
 #include "alsa_stream.h"
 #include "get_media_devices.h"
 
+extern int autodetect;
+
 extern int alsa_loopback;
 extern char *alsa_playback;
 extern char *alsa_capture;
@@ -41,33 +43,37 @@
 /*
  * These functions handle the radio device
  */
-void radio_set_device(char *device, DeviceMode mode)
-{
-	switch (mode) {
-		case AUTO:
-		{
-			void *md = discover_media_devices();
-			const char *p = NULL;
-
-			while (1) {
-				p = get_associated_device(md, p, MEDIA_V4L_RADIO, NULL, NONE);
-				if (!p)
-					break;
-				snprintf(device, PATH_MAX, "/dev/%s", p);
-			}
-
-			free_media_devices(md);
-		}
-			break;
-		default:
-			break;
-	}
-}
- 
 int radio_init(char *device, DriverType driver)
 {
 	int rv = -1;
 
+	if (autodetect) {
+		void *md;
+		const char *p = NULL;
+		char buf[PATH_MAX];
+
+		*device = 0;
+		md = discover_media_devices();
+		if (!md) {
+			fprintf (stderr, "open: Failed to open \"auto\" device");
+			if (*device)
+				fprintf (stderr, " at %s\n", device);
+			else
+				fprintf (stderr, "\n");
+			goto failure;
+		}
+
+		while (1) {
+			p = get_associated_device(md, p, MEDIA_V4L_RADIO, NULL, NONE);
+			if (!p)
+				break;
+			snprintf(buf, sizeof(buf), "/dev/%s", p);
+			device = &buf[0];
+		}
+
+		free_media_devices(md);
+	}
+
 	switch (driver) {
 		case DRIVER_ANY:
 		case DRIVER_V4L2:
@@ -81,7 +87,7 @@
 	dev = v4l1_radio_dev_new();
 	rv = dev->init (dev, device);
 	if (rv == 0) {
-        fprintf(stderr, "Initializing v4l1 failed\n");
+        fprintf(stderr, "v4l1: Initialization failed\n");
 		dev->finalize (dev);
 		dev = NULL;
 		if (driver != DRIVER_ANY)
@@ -94,7 +100,7 @@
 	dev = v4l2_radio_dev_new();
 	rv = dev->init (dev, device);
 	if (rv == 0) {
-        fprintf(stderr, "Initializing v4l2 failed\n");
+        fprintf(stderr, "v4l2: Initialization failed\n");
 		dev->finalize (dev);
 		dev = NULL;
 		if (driver != DRIVER_ANY)
@@ -104,6 +110,12 @@
 	}
 
 success:
+	if (autodetect)
+		fprintf(stderr, "open: Using radio device: %s\n", device);
+
+	if (dev == NULL)
+		alsa_loopback = 0;
+
 	if (alsa_loopback) {
 		if (alsa_capture == NULL) {
 			void *md = discover_media_devices();

=== modified file 'src/radio.h'
--- src/radio.h	2013-09-10 17:10:13 +0000
+++ src/radio.h	2013-09-15 02:42:45 +0000
@@ -39,14 +39,6 @@
 
 int radio_init(char *device, DriverType type);
 
-typedef enum _DeviceMode DeviceMode;
-enum _DeviceMode
-{
-	AUTO
-};
-
-void radio_set_device(char *device, DeviceMode mode);
-
 int radio_is_init(void);
 
 void radio_stop(void);

