diff -ur aumix-2.8.old/src/gtk.c aumix-2.8.new/src/gtk.c
--- aumix-2.8.old/src/gtk.c	2002-10-29 22:27:52.000000000 +0100
+++ aumix-2.8.new/src/gtk.c	2007-11-10 19:07:29.000000000 +0100
@@ -164,6 +164,83 @@
 	return;
 }
 
+char            *GetGuiSettingsFilename(char * buffer)
+{
+	char		*home;
+	home = getenv("HOME");
+	sprintf(buffer, "%s/.%s.gui", home, AUMIXRC);
+	return buffer;
+}
+
+int             LoadSettingsGUI(void)
+{
+	char		*dev_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
+	int		ii;
+	FILE		*setfile;
+	char		filename[PATH_MAX];
+	char		textline[32];
+	char		action[16];
+	char		channel[16];
+	for(ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) {
+		visible[ii] = TRUE;
+	}
+	balancevisible = TRUE;
+	valuesvisible = TRUE;
+
+	setfile = (FILE *)CheckAndOpen(GetGuiSettingsFilename(filename), "r");
+	if (setfile == NULL)
+		return EFILE;
+
+	while (fgets(textline, 32, setfile) != NULL) {
+		sscanf(textline, "%[^:;, ]%*[:;, ]%s\n", action, channel);
+		if(!strcmp(action, "disable")) {
+			for(ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) {
+				if(!strcmp(channel, dev_names[ii])) {
+					visible[ii] = FALSE;
+				}
+			}
+		}
+		if(!strcmp(action, "hide")) {
+			if(!strcmp(channel, "balance")) {
+				balancevisible = FALSE;
+			} else if (!strcmp(channel, "values")) {
+				valuesvisible = FALSE;
+			}
+		}
+	}
+}
+
+int             SaveSettingsGUI(void)
+{
+	int		ii;
+	FILE		*setfile;
+	char		filename[PATH_MAX];
+	char		*dev_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
+	setfile = (FILE *)CheckAndOpen(GetGuiSettingsFilename(filename),"w");
+	if (setfile == NULL)
+		return EFILE;
+
+	for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) {
+		if(!visible[ii]) {
+			fprintf(setfile, "disable:%s\n", dev_names[ii]);
+		}
+	}
+	if(!balancevisible)
+		fprintf(setfile, "hide:balance\n");
+	if(!valuesvisible)
+		fprintf(setfile, "hide:values\n");
+
+	if (fclose(setfile))
+		return EFILE;
+	return 0;
+}
+
+gint gtk_quit_callback(gpointer data)
+{
+	SaveSettingsGUI();
+	return FALSE;
+}
+
 void            InitScreenGTK(void)
 {
 	GdkColormap    *colormap;
@@ -192,6 +269,7 @@
 	char           *fileacceltext[5] = {LOCAL_TEXT_NOOP("l"), LOCAL_TEXT_NOOP("s"), LOCAL_TEXT_NOOP("f"), LOCAL_TEXT_NOOP("t"), LOCAL_TEXT_NOOP("q")};
 	char           *viewmenutext[] = {LOCAL_TEXT_NOOP("Menu"), LOCAL_TEXT_NOOP("Balance"), LOCAL_TEXT_NOOP("Numbers")};
 	char           *viewacceltext[] = {LOCAL_TEXT_NOOP("v"), LOCAL_TEXT_NOOP("b"), LOCAL_TEXT_NOOP("n")};
+	LoadSettingsGUI();
 	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	gtk_window_set_title(GTK_WINDOW(window), "aumix");
 	gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
@@ -219,20 +297,20 @@
 		gtk_signal_connect(GTK_OBJECT(filemenuitems[ii]), "activate", filefuncs[ii], NULL);
 	}
 	for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) {
-		visible[ii] = TRUE;
+//		visible[ii] = TRUE;
 		if ((1 << ii) & (devmask | recmask)) {
 			viewmenuitems[ii] = gtk_check_menu_item_new_with_label(LOCAL_TEXT(dev_label[ii]));
 			gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[ii]);
 			gtk_widget_show(viewmenuitems[ii]);
-			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[ii]), TRUE);
+			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[ii]), visible[ii]);
 		}
 	}
 	separator = gtk_menu_item_new();
 	gtk_widget_show(separator);
 	gtk_menu_append(GTK_MENU(viewmenu), separator);
 	menuvisible = TRUE;
-	balancevisible = TRUE;
-	valuesvisible = TRUE;
+//	balancevisible = TRUE;
+//	valuesvisible = TRUE;
 	viewmenuitems[SOUND_MIXER_NRDEVICES] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Menu"));
 	viewmenuitems[SOUND_MIXER_NRDEVICES + 1] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Balance"));
 	viewmenuitems[SOUND_MIXER_NRDEVICES + 2] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Numbers"));
@@ -246,8 +324,8 @@
 	gtk_widget_show(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]);
 	gtk_widget_show(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]);
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES]), TRUE);
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]), TRUE);
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]), TRUE);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]), balancevisible);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]), valuesvisible);
 	muteallitem = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Mute All"));
 	gtk_menu_append(GTK_MENU(mutemenu), muteallitem);
 /* XXX The "m" needs to get translated. */
@@ -297,7 +375,9 @@
 #ifdef HAVE_GTK
 				gtk_widget_set_size_request(GTK_WIDGET (baltracks[ii]), 84, -1);
 #endif
-				gtk_widget_show(baltracks[ii]);
+				gtk_scale_set_draw_value(GTK_SCALE(baltracks[ii]), valuesvisible);
+				if(visible[ii] && balancevisible)
+					gtk_widget_show(baltracks[ii]);
 				gtk_range_set_update_policy(GTK_RANGE(baltracks[ii]), GTK_UPDATE_CONTINUOUS);
 			}
 			lvlcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(adjustment[ii]), "value_changed", GTK_SIGNAL_FUNC(AdjustLevelGTK), (gpointer) ii);
@@ -308,7 +388,9 @@
 #ifdef HAVE_GTK
 			gtk_widget_set_size_request(GTK_WIDGET (levels[ii]), 84, -1);
 #endif
-			gtk_widget_show(GTK_WIDGET(levels[ii]));
+			gtk_scale_set_draw_value(GTK_SCALE(levels[ii]), valuesvisible);
+			if(visible[ii])
+				gtk_widget_show(GTK_WIDGET(levels[ii]));
 			gtk_range_set_update_policy(GTK_RANGE(levels[ii]), GTK_UPDATE_CONTINUOUS);
 		}
 		if ((1 << ii) & recmask) {
@@ -318,10 +400,12 @@
 			ErrorExitWarn(ReadRecSrc(), 'e');
 			/* a pixmap widget to contain the pixmap */
 			pixmapwid[ii] = gtk_pixmap_new((1 << ii) & recsrc ? record_pixmap : play_pixmap, (1 << ii) & recsrc ? rmask : pmask);
-			gtk_widget_show(pixmapwid[ii]);
+			if(visible[ii])
+				gtk_widget_show(pixmapwid[ii]);
 			rpbuttons[ii] = GTK_TOGGLE_BUTTON(gtk_toggle_button_new());
 			gtk_container_add(GTK_CONTAINER(rpbuttons[ii]), pixmapwid[ii]);
-			gtk_widget_show(GTK_WIDGET(rpbuttons[ii]));
+			if(visible[ii])
+				gtk_widget_show(GTK_WIDGET(rpbuttons[ii]));
 			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE);
 			rpcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(rpbuttons[ii]), "clicked", GTK_SIGNAL_FUNC(SwitchRecordPlay), (gpointer) ii);
 		}
@@ -338,7 +422,8 @@
 	gtk_widget_show(labellevel);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labellevel, 2, 3, 0, 1);
 	labelbalance = gtk_label_new(LOCAL_TEXT("Balance"));
-	gtk_widget_show(labelbalance);
+	if(balancevisible)
+		gtk_widget_show(labelbalance);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labelbalance, 6, 7, 0, 1);
 	y = 0;
 	for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) {
@@ -346,7 +431,8 @@
 			if ((1 << ii) & recmask)
 				gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(rpbuttons[ii]), 0, 1, y + 1, y + 2);
 			channellabel[ii] = gtk_label_new(LOCAL_TEXT(dev_label[ii]));
-			gtk_widget_show(channellabel[ii]);
+			if(visible[ii])
+				gtk_widget_show(channellabel[ii]);
 			gtk_table_attach_defaults(GTK_TABLE(maintable), channellabel[ii], 4, 5, y + 1, y + 2);
 			if ((1 << ii) & devmask) {
 				gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(levels[ii]), 1, 4, y + 1, y + 2);
@@ -357,16 +443,20 @@
 		}
 	}
 	labelleft = gtk_label_new(LOCAL_TEXT("L"));
-	gtk_widget_show(labelleft);
+	if(balancevisible)
+		gtk_widget_show(labelleft);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labelleft, 5, 6, y + 1, y + 2);
 	labelright = gtk_label_new(LOCAL_TEXT("R"));
-	gtk_widget_show(labelright);
+	if(balancevisible)
+		gtk_widget_show(labelright);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labelright, 7, 8, y + 1, y + 2);
 	labelzero = gtk_label_new(LOCAL_TEXT("0"));
-	gtk_widget_show(labelzero);
+	if(valuesvisible)
+		gtk_widget_show(labelzero);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labelzero, 1, 2, y + 1, y + 2);
 	labelcent = gtk_label_new(LOCAL_TEXT("100"));
-	gtk_widget_show(labelcent);
+	if(valuesvisible)
+		gtk_widget_show(labelcent);
 	gtk_table_attach_defaults(GTK_TABLE(maintable), labelcent, 3, 4, y + 1, y + 2);
 	gtk_box_pack_start(GTK_BOX(mainbox), control_box, TRUE, TRUE, 0);
 	gtk_widget_realize(window);
@@ -375,11 +465,12 @@
 	gtk_widget_show(window);
 	signal(SIGALRM, AumixSignalHandler);
 	alarm(REFRESH_PERIOD);
+	gtk_quit_add(0, gtk_quit_callback, NULL);
 }
 
 void            CloseScreenGTK(void)
 {
-	gtk_exit(0);
+	gtk_main_quit();
 	return;
 }
 
