Index: configure.ac
===================================================================
--- configure.ac	(revision 4683)
+++ configure.ac	(working copy)
@@ -172,9 +172,9 @@ AC_CHECK_FUNCS(_NSGetEnviron)
 GNOME_COMPILE_WARNINGS
 CFLAGS="$CFLAGS $WARN_CFLAGS"
 
-PKG_CHECK_MODULES(VICIOUS, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
-AC_SUBST(VICIOUS_CFLAGS)
-AC_SUBST(VICIOUS_LIBS)
+PKG_CHECK_MODULES(COMMON, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
+AC_SUBST(COMMON_CFLAGS)
+AC_SUBST(COMMON_LIBS)
 
 PKG_CHECK_MODULES(DAEMON, gtk+-2.0 >= $GTK_REQUIRED)
 AC_SUBST(DAEMON_CFLAGS)
@@ -268,8 +268,8 @@ AC_CHECK_FUNC(inet_aton,,[
 	      AC_CHECK_LIB(resolv,inet_aton, [
 			   EXTRA_CHOOSER_LIBS="$EXTRA_CHOOSER_LIBS -lresolv"])])
 
-VICIOUS_GNOME_LIBS="libviciousui.a  libviciousui-minimal.a "
-AC_SUBST(VICIOUS_GNOME_LIBS)
+COMMON_GNOME_LIBS="libgdmcommon-ui.a"
+AC_SUBST(COMMON_GNOME_LIBS)
 
 dnl *****************************
 dnl     IPv6 specific checks
@@ -1169,7 +1169,7 @@ pixmaps/32x32/Makefile
 pixmaps/48x48/Makefile
 config/Makefile
 po/Makefile.in
-vicious-extensions/Makefile
+common/Makefile
 docs/Makefile
 docs/de/Makefile
 docs/es/Makefile
Index: autogen.sh
===================================================================
--- autogen.sh	(revision 4683)
+++ autogen.sh	(working copy)
@@ -9,13 +9,6 @@ test -z "$srcdir" && srcdir=.
 
 PKG_NAME="GDM"
 
-if test ! -d $srcdir/vicious-extensions; then
-	echo -n "**Error**: vicious-extensions not found, please do a clean "
-	echo "checkout or do:"
-        echo "svn co http://svn.gnome.org/svn/vicious-extensions/trunk vicious-extensions"
-	exit 1
-fi
-
 (test -f $srcdir/configure.ac \
   && test -d $srcdir/daemon \
   && test -f $srcdir/daemon/gdm.h) || {
Index: gui/gdmlanguages.c
===================================================================
--- gui/gdmlanguages.c	(revision 4683)
+++ gui/gdmlanguages.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1999, 2000 Martin K. Petersen <mkp@mkp.net>
  *
  * This file Copyright (c) 2001 George Lebl
@@ -28,6 +30,8 @@
 #include "gdmlanguages.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 typedef struct _Language Language;
 struct _Language {
 	char *name;
Index: gui/gdmconfig.h
===================================================================
--- gui/gdmconfig.h	(revision 4683)
+++ gui/gdmconfig.h	(working copy)
@@ -1,46 +1,45 @@
 /*
  *  GDM - THe GNOME Display Manager
  *  Copyright (C) 2001 Queen of England, (c)2002 George Lebl
- *    
+ *
  *  GDMcommunication routines
  *
  *  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 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- * 
+ *
  */
 
-#ifndef GDMCONFIG_H
-#define GDMCONFIG_H
+#ifndef _GDMCONFIG_H
+#define _GDMCONFIG_H
 
-#include "ve-misc.h"
-#include "ve-miscui.h"
+#include "glib.h"
 
 void		gdm_config_never_cache			(gboolean never_cache);
 void		gdm_config_set_comm_retries		(int tries);
-gchar *		gdm_config_get_string			(gchar *key);
-gchar *		gdm_config_get_translated_string	(gchar *key);
-gint		gdm_config_get_int     			(gchar *key);
-gboolean	gdm_config_get_bool			(gchar *key);
-gboolean	gdm_config_reload_string		(gchar *key);
-gboolean	gdm_config_reload_int			(gchar *key);
-gboolean	gdm_config_reload_bool			(gchar *key);
+gchar *		gdm_config_get_string			(const gchar *key);
+gchar *		gdm_config_get_translated_string	(const gchar *key);
+gint		gdm_config_get_int     			(const gchar *key);
+gboolean	gdm_config_get_bool			(const gchar *key);
+gboolean	gdm_config_reload_string		(const gchar *key);
+gboolean	gdm_config_reload_int			(const gchar *key);
+gboolean	gdm_config_reload_bool			(const gchar *key);
 GSList *	gdm_config_get_xservers			(gboolean flexible);
 
-void		gdm_save_customlist_data		(gchar *file,
-							 gchar *key,
-							 gchar *id);
-char *		gdm_get_theme_greeter			(gchar *file,
+void		gdm_save_customlist_data		(const gchar *file,
+							 const gchar *key,
+							 const gchar *id);
+char *		gdm_get_theme_greeter			(const gchar *file,
 							 const char *fallback);
 
-#endif /* GDMCONFIG_H */
+#endif /* _GDMCONFIG_H */
Index: gui/gdmuser.c
===================================================================
--- gui/gdmuser.c	(revision 4683)
+++ gui/gdmuser.c	(working copy)
@@ -34,6 +34,8 @@
 #include "gdmuser.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 static time_t time_started;
 
 static GdmUser * 
Index: gui/gdmwm.c
===================================================================
--- gui/gdmwm.c	(revision 4683)
+++ gui/gdmwm.c	(working copy)
@@ -36,6 +36,8 @@
 #include "gdmcommon.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 typedef struct _GdmWindow GdmWindow;
 struct _GdmWindow {
 	int x, y;
@@ -1576,6 +1578,32 @@ gdm_wm_show_info_msg_dialog (const gchar
 	g_free (InfoMsg);
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 void
 gdm_wm_message_dialog (const gchar *primary_message, 
 		       const gchar *secondary_message)
@@ -1585,12 +1613,12 @@ gdm_wm_message_dialog (const gchar *prim
 	/* we should be now fine for focusing new windows */
 	gdm_wm_focus_new_windows (TRUE);
 
-	req = ve_hig_dialog_new (NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_INFO,
-				 GTK_BUTTONS_OK,
-				 primary_message,
-				 secondary_message);
+	req = hig_dialog_new (NULL /* parent */,
+                              GTK_DIALOG_MODAL /* flags */,
+                              GTK_MESSAGE_INFO,
+                              GTK_BUTTONS_OK,
+                              primary_message,
+                              secondary_message);
 
 	gdm_wm_center_window (GTK_WINDOW (req));
 
@@ -1614,12 +1642,12 @@ gdm_wm_query_dialog (const gchar *primar
 	/* we should be now fine for focusing new windows */
 	gdm_wm_focus_new_windows (TRUE);
 
-	req = ve_hig_dialog_new (NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_QUESTION,
-				 GTK_BUTTONS_NONE,
-				 primary_message,
-				 secondary_message);
+	req = hig_dialog_new (NULL /* parent */,
+                              GTK_DIALOG_MODAL /* flags */,
+                              GTK_MESSAGE_QUESTION,
+                              GTK_BUTTONS_NONE,
+                              primary_message,
+                              secondary_message);
 
 	if (negbutton != NULL) {
 		button = gtk_button_new_from_stock (negbutton);
@@ -1673,12 +1701,12 @@ gdm_wm_warn_dialog (const gchar *primary
 	/* we should be now fine for focusing new windows */
 	gdm_wm_focus_new_windows (TRUE);
 
-	req = ve_hig_dialog_new (NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_WARNING,
-				 GTK_BUTTONS_NONE,
-				 primary_message,
-				 secondary_message);
+	req = hig_dialog_new (NULL /* parent */,
+                              GTK_DIALOG_MODAL /* flags */,
+                              GTK_MESSAGE_WARNING,
+                              GTK_BUTTONS_NONE,
+                              primary_message,
+                              secondary_message);
 
 	if (negbutton != NULL) {
 		button = gtk_button_new_from_stock (negbutton);
Index: gui/gdmdynamic.c
===================================================================
--- gui/gdmdynamic.c	(revision 4683)
+++ gui/gdmdynamic.c	(working copy)
@@ -1,4 +1,5 @@
-/*
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
  *    GDMcommunication routines
  *    (c)2001 Queen of England, (c)2002,2003 George Lebl
  *    
@@ -40,6 +41,8 @@
 #include "gdmcommon.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 static char *myname = NULL;  /* name of this program */
 
 static void
Index: gui/gdmlogin.c
===================================================================
--- gui/gdmlogin.c	(revision 4683)
+++ gui/gdmlogin.c	(working copy)
@@ -51,8 +51,6 @@
 #define PW_ENTRY_SIZE GDM_MAX_PASS
 #endif
 
-#include "vicious.h"
-
 #include "gdm.h"
 #include "gdmuser.h"
 #include "gdmcomm.h"
@@ -63,6 +61,8 @@
 #include "gdmconfig.h"
 #include "misc.h"
 
+#include "gdm-common.h"
+
 /* set the DOING_GDM_DEVELOPMENT env variable if you aren't running
  * within the protocol */
 static gboolean DOING_GDM_DEVELOPMENT = FALSE;
@@ -314,7 +314,33 @@ back_prog_launch_after_timeout ()
 						    NULL);
 }
 
-/* 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
+/*
  * This function starts the background program (if any).
  */
 static void
@@ -337,9 +363,10 @@ back_prog_run (void)
 	
 	/* Focus new windows. We want to give focus to the background program. */
 	gdm_wm_focus_new_windows (TRUE);
-		
-	back_prog_argv = ve_split (command);	
-	
+
+	back_prog_argv = NULL;
+	g_shell_parse_argv (command, NULL, &back_prog_argv, NULL);
+
 	/* Don't reap child automatically: we want to catch the event. */
 	if (! g_spawn_async (".", 
 			     back_prog_argv, 
@@ -358,12 +385,12 @@ back_prog_run (void)
 		                       command,
 		                       error->message);
 					    
-		dialog = ve_hig_dialog_new (NULL,
-					    GTK_DIALOG_MODAL,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("Cannot start background application"),
-					    msg);
+		dialog = hig_dialog_new (NULL,
+					 GTK_DIALOG_MODAL,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Cannot start background application"),
+					 msg);
 		g_free (msg);
 		
 		gtk_widget_show_all (dialog);
@@ -1680,12 +1707,12 @@ process_operation (guchar       op_code,
 	gdm_wm_focus_new_windows (TRUE);
 
 	tmp = ve_locale_to_utf8 (args);
-	dlg = ve_hig_dialog_new (NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 tmp,
-				 "");
+	dlg = hig_dialog_new (NULL /* parent */,
+			      GTK_DIALOG_MODAL /* flags */,
+			      GTK_MESSAGE_ERROR,
+			      GTK_BUTTONS_OK,
+			      tmp,
+			      "");
 	g_free (tmp);
 
 	gdm_wm_center_window (GTK_WINDOW (dlg));
@@ -1849,15 +1876,15 @@ process_operation (guchar       op_code,
 		/* we should be now fine for focusing new windows */
 		gdm_wm_focus_new_windows (TRUE);
 
-		dlg = ve_hig_dialog_new (NULL /* parent */,
-					 GTK_DIALOG_MODAL /* flags */,
-					 GTK_MESSAGE_INFO,
-					 GTK_BUTTONS_OK,
-					 /* translators:  This is a nice and evil eggie text, translate
-					  * to your favourite currency */
-					 _("Please insert 25 cents "
-					   "to log in."),
-					 "");
+		dlg = hig_dialog_new (NULL /* parent */,
+				      GTK_DIALOG_MODAL /* flags */,
+				      GTK_MESSAGE_INFO,
+				      GTK_BUTTONS_OK,
+				      /* translators:  This is a nice and evil eggie text, translate
+				       * to your favourite currency */
+				      _("Please insert 25 cents "
+					"to log in."),
+				      "");
 		gdm_wm_center_window (GTK_WINDOW (dlg));
 
 		gdm_wm_no_login_focus_push ();
@@ -1877,12 +1904,12 @@ process_operation (guchar       op_code,
 			/* we should be now fine for focusing new windows */
 			gdm_wm_focus_new_windows (TRUE);
 
-			dlg = ve_hig_dialog_new (NULL /* parent */,
-						 GTK_DIALOG_MODAL /* flags */,
-						 GTK_MESSAGE_INFO,
-						 GTK_BUTTONS_OK,
-						 oldtext,
-						 "");
+			dlg = hig_dialog_new (NULL /* parent */,
+					      GTK_DIALOG_MODAL /* flags */,
+					      GTK_MESSAGE_INFO,
+					      GTK_BUTTONS_OK,
+					      oldtext,
+					      "");
 			gtk_window_set_modal (GTK_WINDOW (dlg), TRUE);
 			gdm_wm_center_window (GTK_WINDOW (dlg));
 
@@ -3433,12 +3460,12 @@ main (int argc, char *argv[])
 				     "Please restart the GDM daemon or the computer."),
 				   VERSION);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_OK,
-					_("Cannot start the greeter"),
-					msg);
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_ERROR,
+				     GTK_BUTTONS_OK,
+				     _("Cannot start the greeter"),
+				     msg);
 	    g_free (msg);
 
 	    gtk_widget_show_all (dialog);
@@ -3467,12 +3494,12 @@ main (int argc, char *argv[])
 	                             "Please restart the GDM daemon or the computer."),
 	                           VERSION);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_WARNING,
-					GTK_BUTTONS_NONE,
-					_("Cannot start the greeter"),
-					msg);	
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_WARNING,
+				     GTK_BUTTONS_NONE,
+				     _("Cannot start the greeter"),
+				     msg);
 	    g_free (msg);
 
 	    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
@@ -3515,12 +3542,12 @@ main (int argc, char *argv[])
 	                             "Please restart the GDM daemon or the computer."),
 	                           VERSION, gdm_version);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_WARNING,
-					GTK_BUTTONS_NONE,
-					_("Cannot start the greeter"),
-					msg);
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_WARNING,
+				     GTK_BUTTONS_NONE,
+				     _("Cannot start the greeter"),
+				     msg);
 	    g_free (msg);
 
 	    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
@@ -3730,14 +3757,14 @@ main (int argc, char *argv[])
 
 	    gdm_wm_focus_new_windows (TRUE);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_OK,
-					_("Session directory is missing"),
-					_("Your session directory is missing or empty!  "
-					  "There are two available sessions you can use, but "
-					  "you should log in and correct the GDM configuration."));
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_ERROR,
+				     GTK_BUTTONS_OK,
+				     _("Session directory is missing"),
+				     _("Your session directory is missing or empty!  "
+				       "There are two available sessions you can use, but "
+				       "you should log in and correct the GDM configuration."));
 	    gtk_widget_show_all (dialog);
 	    gdm_wm_center_window (GTK_WINDOW (dialog));
 
@@ -3754,14 +3781,14 @@ main (int argc, char *argv[])
 
 	    gdm_wm_focus_new_windows (TRUE);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_OK,
-					_("Configuration is not correct"),
-					_("The configuration file contains an invalid command "
-					  "line for the login dialog, so running the "
-					  "default command.  Please fix your configuration."));
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_ERROR,
+				     GTK_BUTTONS_OK,
+				     _("Configuration is not correct"),
+				     _("The configuration file contains an invalid command "
+				       "line for the login dialog, so running the "
+				       "default command.  Please fix your configuration."));
 	    gtk_widget_show_all (dialog);
 	    gdm_wm_center_window (GTK_WINDOW (dialog));
 
Index: gui/gdmphotosetup.c
===================================================================
--- gui/gdmphotosetup.c	(revision 4683)
+++ gui/gdmphotosetup.c	(working copy)
@@ -38,7 +38,6 @@
 #include "gdmcomm.h"
 #include "gdmcommon.h"
 #include "gdmconfig.h"
-#include "ve-miscui.h"
 
 static GladeXML *xml;
 static char	*photofile;
@@ -163,6 +162,32 @@ update_preview_cb (GtkFileChooser *choos
 	gtk_file_chooser_set_preview_widget_active (chooser, TRUE);
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 static void
 set_face_from_filename (const char *filename)
 {
@@ -184,16 +209,16 @@ set_face_from_filename (const char *file
 		GtkWidget *d;
 		char	  *tmp = g_filename_to_utf8 (photofile, -1, NULL, NULL, NULL);
 		char      *msg;
-		
+
 		msg = g_strdup_printf (_("File %s cannot be opened for "
 					 "writing."), tmp);
 
-		d = ve_hig_dialog_new (NULL /* parent */,
-				       GTK_DIALOG_MODAL /* flags */,
-				       GTK_MESSAGE_ERROR,
-				       GTK_BUTTONS_OK,
-				       _("Cannot open file"),
-				       msg);
+		d = hig_dialog_new (NULL /* parent */,
+				    GTK_DIALOG_MODAL /* flags */,
+				    GTK_MESSAGE_ERROR,
+				    GTK_BUTTONS_OK,
+				    _("Cannot open file"),
+				    msg);
 
 		gtk_dialog_run (GTK_DIALOG (d));
 		gtk_widget_destroy (d);
Index: gui/gdmsession.c
===================================================================
--- gui/gdmsession.c	(revision 4683)
+++ gui/gdmsession.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1999, 2000 Martin K. Petersen <mkp@mkp.net>
  *
  * This file Copyright (c) 2003 George Lebl
@@ -26,13 +28,13 @@
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
 
-#include "vicious.h"
-
 #include "gdm.h"
 #include "gdmsession.h"
 #include "gdmcommon.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 GHashTable *sessnames        = NULL;
 gchar *default_session       = NULL;
 const gchar *current_session = NULL;
@@ -178,12 +180,13 @@ _gdm_session_list_init (GHashTable **ses
 		    dent = NULL;
 
 	    while (dent != NULL) {
-		    VeConfig *cfg;
+		    GKeyFile *cfg;
 		    char *exec;
 		    char *comment;
 		    char *s;
 		    char *tryexec;
 		    char *ext;
+		    gboolean hidden;
 
 		    /* ignore everything but the .desktop files */
 		    ext = strstr (dent->d_name, ".desktop");
@@ -200,20 +203,23 @@ _gdm_session_list_init (GHashTable **ses
 		    }
 
 		    s = g_strconcat (dir, "/", dent->d_name, NULL);
-		    cfg = ve_config_new (s);
+		    cfg = gdm_common_config_load (s, NULL);
 		    g_free (s);
 
-		    if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false")) {
+		    hidden = FALSE;
+		    gdm_common_config_get_boolean (cfg, "Desktop Entry/Hidden=false", &hidden, NULL);
+		    if (hidden) {
 			    session = g_new0 (GdmSession, 1);
 			    session->name      = g_strdup (dent->d_name);
 			    session->clearname = NULL;
 			    g_hash_table_insert (*sessnames, g_strdup (dent->d_name), session);
-			    ve_config_destroy (cfg);
+			    g_key_file_free (cfg);
 			    dent = readdir (sessdir);
 			    continue;
 		    }
 
-		    tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec");
+		    tryexec = NULL;
+		    gdm_common_config_get_string (cfg, "Desktop Entry/TryExec", &tryexec, NULL);
 		    if ( ! ve_string_empty (tryexec)) {
 			    char **tryexecvec = g_strsplit (tryexec, " ", -1);
 			    char *full = NULL;
@@ -229,7 +235,7 @@ _gdm_session_list_init (GHashTable **ses
 				    g_hash_table_insert (*sessnames, g_strdup (dent->d_name),
 					 session);
 				    g_free (tryexec);
-				    ve_config_destroy (cfg);
+				    g_key_file_free (cfg);
 				    dent = readdir (sessdir);
 				    continue;
 			    }
@@ -238,11 +244,13 @@ _gdm_session_list_init (GHashTable **ses
 		    }
 		    g_free (tryexec);
 
-		    exec = ve_config_get_string (cfg, "Desktop Entry/Exec");
-		    name = ve_config_get_translated_string (cfg, "Desktop Entry/Name");
-		    comment = ve_config_get_translated_string (cfg, "Desktop Entry/Comment");
-
-		    ve_config_destroy (cfg);
+		    exec = NULL;
+		    name = NULL;
+		    comment = NULL;
+		    gdm_common_config_get_string (cfg, "Desktop Entry/Exec", &exec, NULL);
+		    gdm_common_config_get_translated_string (cfg, "Desktop Entry/Name", &name, NULL);
+		    gdm_common_config_get_translated_string (cfg, "Desktop Entry/Comment", &comment, NULL);
+		    g_key_file_free (cfg);
 
 		    if G_UNLIKELY (ve_string_empty (exec) || ve_string_empty (name)) {
 			    session = g_new0 (GdmSession, 1);
Index: gui/gdmXnestchooser.c
===================================================================
--- gui/gdmXnestchooser.c	(revision 4683)
+++ gui/gdmXnestchooser.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (c) 2001 Queen of England
  *    
  * GDMXnestChooser - run X nest with a chooser using xdmcp
@@ -40,6 +42,8 @@
 #include "gdmcommon.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 static gchar **args_remaining;
 static pid_t xnest_pid = 0;
 
@@ -260,13 +264,9 @@ get_font_path (const char *display)
 static char **
 make_us_an_exec_vector (const char *xnest)
 {
-	char **vector;
-	int i, ii;
+	char **argv;
 	int argc;
-	char **xnest_vec;
-	char **options_vec = NULL;
-	gboolean got_font_path = FALSE;
-	char *font_path = NULL;
+	GString *command;
 
 	if ( ! ve_string_empty (xnest_binary))
 		xnest = xnest_binary;
@@ -274,62 +274,37 @@ make_us_an_exec_vector (const char *xnes
 	if (ve_string_empty (xnest))
 		xnest = "Xnest";
 
-	xnest_vec = ve_split (xnest);
-	if (xnest_options != NULL)
-		options_vec = ve_split (xnest_options);
-	else
-		options_vec = NULL;
-
-	argc = ve_vector_len (xnest_vec) +
-		1 +
-		ve_vector_len (options_vec) +
-		3 +
-		2;
-
-	vector = g_new0 (char *, argc);
-
-	ii = 0;
-
-	/* lots of leaks follow */
-
-	vector[ii++] = xnest_vec[0];
-	vector[ii++] = display_num;
-
-	for (i = 1; xnest_vec[i] != NULL; i++) {
-		vector[ii++] = xnest_vec[i];
-		if (strcmp (xnest_vec[i], "-fp") == 0)
-			got_font_path = TRUE;
-	}
+	command = g_string_new (xnest);
+	g_string_append_printf (command, " %s", display_num);
 
-	if (options_vec != NULL) {
-		for (i = 0; options_vec[i] != NULL; i++) {
-			vector[ii++] = options_vec[i];
-			if (strcmp (options_vec[i], "-fp") == 0)
-				got_font_path = TRUE;
-		}
+	if (xnest_options != NULL) {
+		g_string_append_printf (command, " %s", xnest_options);
 	}
 
 	if ( ! no_query) {
 		if (do_broadcast) {
-			vector[ii++] = "-broadcast";
+			g_string_append (command, " -broadcast");
 		} else if (do_direct) {
-			vector[ii++] = "-query";
-			vector[ii++] = indirect_host;
+			g_string_append_printf (command, " -query %s", indirect_host);
 		} else {
-			vector[ii++] = "-indirect";
-			vector[ii++] = indirect_host;
+			g_string_append_printf (command, " -indirect %s", indirect_host);
 		}
 	}
 
-	if ( ! got_font_path)
+	if (g_strrstr (command->str, " -fp ") == NULL) {
+		char *font_path;
 		font_path = get_font_path (NULL);
-
-	if (font_path != NULL) {
-		vector[ii++] = "-fp";
-		vector[ii++] = font_path;
+		g_string_append_printf (command, " -fp %s", font_path);
+		g_free (font_path);
 	}
 
-	return vector;
+	argv = NULL;
+
+	g_shell_parse_argv (command->str, &argc, &argv, NULL);
+
+	g_string_free (command, TRUE);
+
+	return argv;
 }
 
 static const char *
@@ -459,6 +434,32 @@ setup_cookie (int disp)
     XauUnlockAuth (filename);
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -512,14 +513,14 @@ main (int argc, char *argv[])
 
 	if (execvec == NULL) {
 		GtkWidget *d;
-		d = ve_hig_dialog_new (NULL /* parent */,
-				       GTK_DIALOG_MODAL /* flags */,
-				       GTK_MESSAGE_ERROR,
-				       GTK_BUTTONS_OK,
-				       _("Xnest doesn't exist."),
-				       _("Please ask your system "
-					 "administrator "
-					 "to install it."));
+		d = hig_dialog_new (NULL /* parent */,
+				    GTK_DIALOG_MODAL /* flags */,
+				    GTK_MESSAGE_ERROR,
+				    GTK_BUTTONS_OK,
+				    _("Xnest doesn't exist."),
+				    _("Please ask your system "
+				      "administrator "
+				      "to install it."));
 		gtk_widget_show_all (d);
 		gtk_dialog_run (GTK_DIALOG (d));
 		gtk_widget_destroy (d);
@@ -537,15 +538,14 @@ main (int argc, char *argv[])
 		      ! honor_indirect) &&
 		    ! do_direct) {
 			GtkWidget *d;
-			d = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("Indirect XDMCP is not enabled"),
-				 _("Please ask your "
-				   "system administrator to enable "
-				   "this feature."));
+			d = hig_dialog_new (NULL /* parent */,
+					    GTK_DIALOG_MODAL /* flags */,
+					    GTK_MESSAGE_ERROR,
+					    GTK_BUTTONS_OK,
+					    _("Indirect XDMCP is not enabled"),
+					    _("Please ask your "
+					      "system administrator to enable "
+					      "this feature."));
 			gtk_widget_show_all (d);
 			gtk_dialog_run (GTK_DIALOG (d));
 			gtk_widget_destroy (d);
@@ -555,15 +555,14 @@ main (int argc, char *argv[])
 		if ( ! xdmcp_enabled &&
 		    do_direct) {
 			GtkWidget *d;
-			d = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("XDMCP is not enabled"),
-				 _("Please ask your "
-				   "system administrator to enable "
-				   "this feature."));
+			d = hig_dialog_new (NULL /* parent */,
+					    GTK_DIALOG_MODAL /* flags */,
+					    GTK_MESSAGE_ERROR,
+					    GTK_BUTTONS_OK,
+					    _("XDMCP is not enabled"),
+					    _("Please ask your "
+					      "system administrator to enable "
+					      "this feature."));
 			gtk_widget_show_all (d);
 			gtk_dialog_run (GTK_DIALOG (d));
 			gtk_widget_destroy (d);
@@ -587,14 +586,13 @@ main (int argc, char *argv[])
 		    (kill (pid, 0) < 0 &&
 		     errno != EPERM)) {
 			GtkWidget *d;
-			d = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("GDM is not running"),
-				 _("Please ask your "
-				   "system administrator to start it."));
+			d = hig_dialog_new (NULL /* parent */,
+					    GTK_DIALOG_MODAL /* flags */,
+					    GTK_MESSAGE_ERROR,
+					    GTK_BUTTONS_OK,
+					    _("GDM is not running"),
+					    _("Please ask your "
+					      "system administrator to start it."));
 			gtk_widget_show_all (d);
 			gtk_dialog_run (GTK_DIALOG (d));
 			gtk_widget_destroy (d);
@@ -605,13 +603,13 @@ main (int argc, char *argv[])
 	display = get_free_display ();
 	if (display < 0) {
 		GtkWidget *d;
-		d = ve_hig_dialog_new (NULL /* parent */,
-				       GTK_DIALOG_MODAL /* flags */,
-				       GTK_MESSAGE_ERROR,
-				       GTK_BUTTONS_OK,
-				       _("Could not find a free "
-					 "display number"),
-				       "");
+		d = hig_dialog_new (NULL /* parent */,
+				    GTK_DIALOG_MODAL /* flags */,
+				    GTK_MESSAGE_ERROR,
+				    GTK_BUTTONS_OK,
+				    _("Could not find a free "
+				      "display number"),
+				    "");
 		gtk_widget_show_all (d);
 		gtk_dialog_run (GTK_DIALOG (d));
 		gtk_widget_destroy (d);
Index: gui/greeter/greeter_item_customlist.c
===================================================================
--- gui/greeter/greeter_item_customlist.c	(revision 4683)
+++ gui/greeter/greeter_item_customlist.c	(working copy)
@@ -25,6 +25,8 @@
 #include "gdmconfig.h"
 #include "gdmsession.h"
 
+#include "gdm-common.h"
+
 #include "greeter_item.h"
 #include "greeter_configuration.h"
 #include "greeter_item_customlist.h"
Index: gui/greeter/themes/Makefile.am
===================================================================
--- gui/greeter/themes/Makefile.am	(revision 4683)
+++ gui/greeter/themes/Makefile.am	(working copy)
@@ -1,2 +1 @@
 SUBDIRS = circles happygnome happygnome-list
-
Index: gui/greeter/greeter_canvas_item.c
===================================================================
--- gui/greeter/greeter_canvas_item.c	(revision 4683)
+++ gui/greeter/greeter_canvas_item.c	(working copy)
@@ -27,6 +27,9 @@
 #include "gdm.h"
 #include "gdmcommon.h"
 #include "gdmconfig.h"
+
+#include "gdm-common.h"
+
 #include "greeter.h"
 #include "greeter_item.h"
 #include "greeter_events.h"
Index: gui/greeter/greeter_parser.c
===================================================================
--- gui/greeter/greeter_parser.c	(revision 4683)
+++ gui/greeter/greeter_parser.c	(working copy)
@@ -24,13 +24,17 @@
 #include <stdlib.h>
 #include <librsvg/rsvg.h>
 #include <math.h>
-#include <gdk/gdkx.h>
 #include <locale.h>
+
 #include <glib/gi18n.h>
+#include <gdk/gdkx.h>
 
 #include "gdmwm.h"
 #include "gdmcommon.h"
 #include "gdmconfig.h"
+
+#include "gdm-common.h"
+
 #include "greeter_configuration.h"
 #include "greeter_parser.h"
 #include "greeter_events.h"
@@ -1238,15 +1242,17 @@ parse_state_text (xmlNodePtr node,
 static gint
 is_current_locale (const char *lang)
 {
-  const GList *l = ve_i18n_get_language_list ("LC_MESSAGES");
+  const char * const *langs;
   int score = 0;
-  
-  while (l != NULL)
+  int i;
+
+  langs = g_get_language_names ();
+
+  for (i = 0; langs[i] != NULL; i++)
     {
-      if (strcmp (l->data, lang) == 0)
+      if (strcmp (langs[i], lang) == 0)
 	return score;
 
-      l = l->next;
       score++;
     }
   return 1000;
Index: gui/greeter/greeter_item.c
===================================================================
--- gui/greeter/greeter_item.c	(revision 4683)
+++ gui/greeter/greeter_item.c	(working copy)
@@ -30,6 +30,8 @@
 #include "gdmcommon.h"
 #include "misc.h"
 
+#include "gdm-common.h"
+
 #include "greeter_item.h"
 #include "greeter_configuration.h"
 
Index: gui/greeter/greeter_item_ulist.c
===================================================================
--- gui/greeter/greeter_item_ulist.c	(revision 4683)
+++ gui/greeter/greeter_item_ulist.c	(working copy)
@@ -39,6 +39,8 @@
 #include "gdmconfig.h"
 #include "gdmuser.h"
 
+#include "gdm-common.h"
+
 #include "greeter.h"
 #include "greeter_item_ulist.h"
 #include "greeter_parser.h"
@@ -104,6 +106,17 @@ greeter_item_ulist_unset_selected_user (
 	selected_user = NULL;
 }
 
+static int
+vector_len (char * const *v)
+{
+	int i;
+	if (v == NULL)
+		return 0;
+	for (i = 0; v[i] != NULL; i++)
+		;
+	return i;
+}
+
 static void
 check_for_displays (void)
 {
@@ -137,7 +150,7 @@ check_for_displays (void)
 		char **rvec;
 
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL || ve_vector_len (rvec) != 3)
+		if (rvec == NULL || vector_len (rvec) != 3)
 			continue;
 
 		g_hash_table_insert (displays_hash,
@@ -214,7 +227,7 @@ greeter_populate_user_list (GtkTreeModel
 	}
 }
 
-void 
+void
 greeter_item_ulist_select_user (gchar *login)
 {
 	printf ("%c%c%c%s\n", STX, BEL,
Index: gui/greeter/greeter_item_timed.c
===================================================================
--- gui/greeter/greeter_item_timed.c	(revision 4683)
+++ gui/greeter/greeter_item_timed.c	(working copy)
@@ -24,6 +24,8 @@
 #include "gdm.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 #include "greeter_parser.h"
 #include "greeter_configuration.h"
 #include "greeter_item_timed.h"
Index: gui/greeter/greeter_session.c
===================================================================
--- gui/greeter/greeter_session.c	(revision 4683)
+++ gui/greeter/greeter_session.c	(working copy)
@@ -33,6 +33,8 @@
 #include "gdmconfig.h"
 #include "gdmsession.h"
 
+#include "gdm-common.h"
+
 #include "greeter.h"
 #include "greeter_session.h"
 #include "greeter_item_pam.h"
Index: gui/greeter/greeter_system.c
===================================================================
--- gui/greeter/greeter_system.c	(revision 4683)
+++ gui/greeter/greeter_system.c	(working copy)
@@ -24,17 +24,20 @@
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
 
+#include "gdm.h"
+#include "gdmcommon.h"
+#include "gdmconfig.h"
+#include "gdmwm.h"
+#include "misc.h"
+
+#include "gdm-common.h"
+
 #include "greeter.h"
 #include "greeter_configuration.h"
 #include "greeter_system.h"
 #include "greeter_item.h"
 #include "greeter_item_ulist.h"
 #include "greeter_parser.h"
-#include "gdm.h"
-#include "gdmcommon.h"
-#include "gdmconfig.h"
-#include "gdmwm.h"
-#include "misc.h"
 
 GtkWidget       *dialog;
 extern gboolean  GdmHaltFound;
Index: gui/greeter/greeter_item_pam.c
===================================================================
--- gui/greeter/greeter_item_pam.c	(revision 4683)
+++ gui/greeter/greeter_item_pam.c	(working copy)
@@ -23,7 +23,7 @@
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
 
-#include "viciousui.h"
+#include "gdm-common.h"
 
 #include "greeter.h"
 #include "greeter_item.h"
@@ -361,6 +361,32 @@ greeter_item_pam_error (const char *mess
     }
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 void
 greeter_item_pam_leftover_messages (void)
 {
@@ -385,12 +411,12 @@ greeter_item_pam_leftover_messages (void
 	  /* we should be now fine for focusing new windows */
 	  gdm_wm_focus_new_windows (TRUE);
 
-	  dlg = ve_hig_dialog_new (NULL /* parent */,
-				   GTK_DIALOG_MODAL /* flags */,
-				   GTK_MESSAGE_INFO,
-				   GTK_BUTTONS_OK,
-				   oldtext,
-				   "");
+	  dlg = hig_dialog_new (NULL /* parent */,
+                                GTK_DIALOG_MODAL /* flags */,
+                                GTK_MESSAGE_INFO,
+                                GTK_BUTTONS_OK,
+                                oldtext,
+                                "");
 	  gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
 	  gtk_window_set_modal (GTK_WINDOW (dlg), TRUE);
 	  gdm_wm_center_window (GTK_WINDOW (dlg));
Index: gui/greeter/Makefile.am
===================================================================
--- gui/greeter/Makefile.am	(revision 4683)
+++ gui/greeter/Makefile.am	(working copy)
@@ -5,7 +5,7 @@ INCLUDES = \
 	-I.						\
 	-I$(top_srcdir)/gui				\
 	-I$(top_srcdir)/daemon				\
-	-I$(top_srcdir)/vicious-extensions		\
+	-I$(top_srcdir)/common				\
 	-DAUTHDIR=\""$(authdir)"\"		 	\
 	-DDATADIR=\""$(datadir)"\"		 	\
 	-DDMCONFDIR=\""$(dmconfdir)"\"		 	\
@@ -73,13 +73,13 @@ gdmgreeter_SOURCES =  \
 	greeter_session.c \
 	greeter_session.h \
 	greeter_system.c \
-	greeter_system.h 
+	greeter_system.h
 
 gdmgreeter_LDADD = \
 	-L$(top_builddir)/gui	\
 	-lgdmwm			\
 	-lgdmcommon		\
-	$(top_builddir)/vicious-extensions/libviciousui-minimal.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(GLIB_LIBS)		\
 	$(GOBJECT_LIBS)		\
 	$(PANGO_LIBS)		\
Index: gui/greeter/greeter.c
===================================================================
--- gui/greeter/greeter.c	(revision 4683)
+++ gui/greeter/greeter.c	(working copy)
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <signal.h>
 #include <syslog.h>
+#include <errno.h>
 
 #if HAVE_PAM
 #include <security/pam_appl.h>
@@ -37,7 +38,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <libgnomecanvas/libgnomecanvas.h>
 
-#include "vicious.h"
+#include "gdm-common.h"
 
 #include "gdm.h"
 #include "gdmwm.h"
@@ -164,6 +165,32 @@ greeter_ctrl_handler (GIOChannel *source
     return TRUE;
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 static void
 process_operation (guchar       op_code,
 		   const gchar *args)
@@ -174,7 +201,6 @@ process_operation (guchar       op_code,
     GreeterItemInfo *conversation_info;
     static GnomeCanvasItem *disabled_cover = NULL;
     gchar *language;
-    gchar *selected_user = NULL;
     gint lookup_status = SESSION_LOOKUP_SUCCESS;
     gchar *firstmsg = NULL;
     gchar *secondmsg = NULL;
@@ -254,12 +280,12 @@ process_operation (guchar       op_code,
 	gdm_wm_focus_new_windows (TRUE);
 
 	tmp = ve_locale_to_utf8 (args);
-	dlg = ve_hig_dialog_new (NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 tmp,
-				 "");
+	dlg = hig_dialog_new (NULL /* parent */,
+                              GTK_DIALOG_MODAL /* flags */,
+                              GTK_MESSAGE_ERROR,
+                              GTK_BUTTONS_OK,
+                              tmp,
+                              "");
 	g_free (tmp);
 
 	gdm_wm_center_window (GTK_WINDOW (dlg));
@@ -405,15 +431,15 @@ process_operation (guchar       op_code,
 		/* we should be now fine for focusing new windows */
 		gdm_wm_focus_new_windows (TRUE);
 
-		dlg = ve_hig_dialog_new (NULL /* parent */,
-					 GTK_DIALOG_MODAL /* flags */,
-					 GTK_MESSAGE_INFO,
-					 GTK_BUTTONS_OK,
-					 /* translators:  This is a nice and evil eggie text, translate
-					  * to your favourite currency */
-					 _("Please insert 25 cents "
-					   "to log in."),
-					 "");
+		dlg = hig_dialog_new (NULL /* parent */,
+                                      GTK_DIALOG_MODAL /* flags */,
+                                      GTK_MESSAGE_INFO,
+                                      GTK_BUTTONS_OK,
+                                      /* translators:  This is a nice and evil eggie text, translate
+                                       * to your favourite currency */
+                                      _("Please insert 25 cents "
+                                        "to log in."),
+                                      "");
 		gdm_wm_center_window (GTK_WINDOW (dlg));
 
 		gdm_wm_no_login_focus_push ();
@@ -642,12 +668,12 @@ verify_gdm_version (void)
                                 "Please restart the GDM daemon or the computer."),
                               VERSION);
     
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("Cannot start the greeter"),
-				  msg);
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("Cannot start the greeter"),
+                               msg);
       g_free (msg);
     
       gtk_widget_show_all (dialog);
@@ -677,12 +703,12 @@ verify_gdm_version (void)
                                "Please restart the GDM daemon or the computer."),
                              VERSION);
     
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_WARNING,
-				  GTK_BUTTONS_NONE,
-				  _("Cannot start the greeter"),
-				  msg);
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_WARNING,
+                               GTK_BUTTONS_NONE,
+                               _("Cannot start the greeter"),
+                               msg);
       g_free (msg);
 			  
       gtk_dialog_add_buttons (GTK_DIALOG (dialog),
@@ -726,12 +752,12 @@ verify_gdm_version (void)
                                "Please restart the GDM daemon or the computer."),
                              VERSION, gdm_version);
     
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_WARNING,
-				  GTK_BUTTONS_NONE,
-				  _("Cannot start the greeter"),
-				  msg);
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_WARNING,
+                               GTK_BUTTONS_NONE,
+                               _("Cannot start the greeter"),
+                               msg);
       g_free (msg);
 
       gtk_dialog_add_buttons (GTK_DIALOG (dialog),
@@ -1341,12 +1367,12 @@ main (int argc, char *argv[])
 	s = g_strdup_printf (_("There was an error loading the "
 			       "theme %s"), tmp);
 	g_free (tmp);
-        dialog = ve_hig_dialog_new (NULL /* parent */,
-				    GTK_DIALOG_MODAL /* flags */,
-				    GTK_MESSAGE_ERROR,
-				    GTK_BUTTONS_OK,
-				    s,
-				    (error && error->message) ? error->message : "");
+        dialog = hig_dialog_new (NULL /* parent */,
+                                 GTK_DIALOG_MODAL /* flags */,
+                                 GTK_MESSAGE_ERROR,
+                                 GTK_BUTTONS_OK,
+                                 s,
+                                 (error && error->message) ? error->message : "");
 	g_free (s);
     
         gtk_widget_show_all (dialog);
@@ -1388,14 +1414,14 @@ main (int argc, char *argv[])
       gdm_wm_init (0);
       gdm_wm_focus_new_windows (TRUE);
     
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("The greeter theme is corrupt"),
-				  _("The theme does not contain "
-				    "definition for the username/password "
-				    "entry element."));
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("The greeter theme is corrupt"),
+                               _("The theme does not contain "
+                                 "definition for the username/password "
+                                 "entry element."));
 
       gtk_widget_show_all (dialog);
       gdm_wm_center_window (GTK_WINDOW (dialog));
@@ -1422,16 +1448,16 @@ main (int argc, char *argv[])
       gdm_wm_init (0);
       gdm_wm_focus_new_windows (TRUE);
     
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("There was an error loading the "
-				    "theme, and the default theme "
-				    "could not be loaded. "
-				    "Attempting to start the "
-				    "standard greeter"),
-				  "");
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("There was an error loading the "
+                                 "theme, and the default theme "
+                                 "could not be loaded. "
+                                 "Attempting to start the "
+                                 "standard greeter"),
+                               "");
     
       gtk_widget_show_all (dialog);
       gdm_wm_center_window (GTK_WINDOW (dialog));
@@ -1444,15 +1470,15 @@ main (int argc, char *argv[])
       execl (LIBEXECDIR "/gdmlogin", LIBEXECDIR "/gdmlogin", NULL);
       execlp ("gdmlogin", "gdmlogin", NULL);
 
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("The GTK+ greeter could not be started.  "
-				    "This display will abort and you may "
-				    "have to login another way and fix the "
-				    "installation of GDM"),
-				  "");
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("The GTK+ greeter could not be started.  "
+                                 "This display will abort and you may "
+                                 "have to login another way and fix the "
+                                 "installation of GDM"),
+                               "");
     
       gtk_widget_show_all (dialog);
       gdm_wm_center_window (GTK_WINDOW (dialog));
@@ -1510,14 +1536,14 @@ main (int argc, char *argv[])
 
       gdm_wm_focus_new_windows (TRUE);
 
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("Session directory is missing"),
-				  _("Your session directory is missing or empty!  "
-				    "There are two available sessions you can use, but "
-				    "you should log in and correct the gdm configuration."));
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("Session directory is missing"),
+                               _("Your session directory is missing or empty!  "
+                                 "There are two available sessions you can use, but "
+                                 "you should log in and correct the gdm configuration."));
       gtk_widget_show_all (dialog);
       gdm_wm_center_window (GTK_WINDOW (dialog));
 
@@ -1535,14 +1561,14 @@ main (int argc, char *argv[])
 
       gdm_wm_focus_new_windows (TRUE);
 
-      dialog = ve_hig_dialog_new (NULL /* parent */,
-				  GTK_DIALOG_MODAL /* flags */,
-				  GTK_MESSAGE_ERROR,
-				  GTK_BUTTONS_OK,
-				  _("Configuration is not correct"),
-				  _("The configuration file contains an invalid command "
-				    "line for the login dialog, so running the "
-				    "default command.  Please fix your configuration."));
+      dialog = hig_dialog_new (NULL /* parent */,
+                               GTK_DIALOG_MODAL /* flags */,
+                               GTK_MESSAGE_ERROR,
+                               GTK_BUTTONS_OK,
+                               _("Configuration is not correct"),
+                               _("The configuration file contains an invalid command "
+                                 "line for the login dialog, so running the "
+                                 "default command.  Please fix your configuration."));
 
       gtk_widget_show_all (dialog);
       gdm_wm_center_window (GTK_WINDOW (dialog));
Index: gui/gdmcommon.c
===================================================================
--- gui/gdmcommon.c	(revision 4683)
+++ gui/gdmcommon.c	(working copy)
@@ -42,6 +42,8 @@
 #include "gdmcomm.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 gint gdm_timed_delay = 0;
 static Atom AT_SPI_IOR;
 
@@ -553,14 +555,15 @@ pre_fetch_run (gpointer data)
 	GPid pid = -1;
 	GError *error = NULL;
 	char *command = NULL;
-	gchar **pre_fetch_prog_argv =  NULL;
+	gchar **pre_fetch_prog_argv;
 
 	command = pre_fetch_prog_get_path ();
 
 	if (! command)
 		return FALSE;
 
-	pre_fetch_prog_argv = ve_split (command);
+	pre_fetch_prog_argv = NULL;
+	g_shell_parse_argv (command, NULL, &pre_fetch_prog_argv, NULL);
 
 	g_spawn_async (".",
 		       pre_fetch_prog_argv,
@@ -570,25 +573,27 @@ pre_fetch_run (gpointer data)
 		       NULL,
 		       &pid,
 		       &error);
+	g_strfreev (pre_fetch_prog_argv);
 
 	return FALSE;
 }
 
-static gboolean 
+static gboolean
 pre_atspi_launch (void){
 	gboolean a11y = gdm_config_get_bool (GDM_KEY_ADD_GTK_MODULES);
 	GPid pid = -1;
 	GError *error = NULL;
 	char *command = NULL;
-	gchar **atspi_prog_argv =  NULL;
-	
+	gchar **atspi_prog_argv;
+
 	if (! a11y)
 		return FALSE;
 
 	command = g_strdup (LIBEXECDIR "/at-spi-registryd");
 
-	atspi_prog_argv = ve_split (command);
-	
+	atspi_prog_argv = NULL;
+	g_shell_parse_argv (command, NULL, &atspi_prog_argv, NULL);
+
 	g_spawn_async (".",
 		       atspi_prog_argv,
 		       NULL,
@@ -598,6 +603,8 @@ pre_atspi_launch (void){
 		       &pid,
 		       &error);
 
+	g_strfreev (atspi_prog_argv);
+
 	if (kill (pid, 0) < 0) {
 		fprintf (stderr, "at-spi-registryd not running: %s\n", error->message);
 		return FALSE;
Index: gui/gdmcomm.c
===================================================================
--- gui/gdmcomm.c	(revision 4683)
+++ gui/gdmcomm.c	(working copy)
@@ -35,13 +35,13 @@
 #include <sys/un.h>
 #include <errno.h>
 
-#include "vicious.h"
-
 #include "gdm.h"
 #include "gdmcommon.h"
 #include "gdmcomm.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 static gboolean bulk_acs = FALSE;
 static gboolean debug    = FALSE;
 static gboolean quiet    = FALSE;
@@ -583,6 +583,32 @@ gdmcomm_get_auth_cookie (void)
 	return cookie;
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 gboolean
 gdmcomm_check (gboolean show_dialog)
 {
@@ -611,19 +637,18 @@ gdmcomm_check (gboolean show_dialog)
 	    (kill (pid, 0) < 0 &&
 	     errno != EPERM)) {
 		if (show_dialog) {
-			dialog = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_WARNING,
-				 GTK_BUTTONS_OK,
-				 _("GDM (The GNOME Display Manager) "
-				   "is not running."),
-				 _("You might in fact be using a different "
-				   "display manager, such as KDM "
-				   "(KDE Display Manager) or xdm. "
-				   "If you still wish to use this feature, "
-				   "either start GDM yourself or ask your "
-				   "system administrator to start GDM."));
+			dialog = hig_dialog_new (NULL /* parent */,
+                                                 GTK_DIALOG_MODAL /* flags */,
+                                                 GTK_MESSAGE_WARNING,
+                                                 GTK_BUTTONS_OK,
+                                                 _("GDM (The GNOME Display Manager) "
+                                                   "is not running."),
+                                                 _("You might in fact be using a different "
+                                                   "display manager, such as KDM "
+                                                   "(KDE Display Manager) or xdm. "
+                                                   "If you still wish to use this feature, "
+                                                   "either start GDM yourself or ask your "
+                                                   "system administrator to start GDM."));
 
 			gtk_widget_show_all (dialog);
 			gtk_dialog_run (GTK_DIALOG (dialog));
@@ -637,15 +662,14 @@ gdmcomm_check (gboolean show_dialog)
 	    s.st_uid != 0 ||
 	    g_access (GDM_SUP_SOCKET, R_OK|W_OK) != 0) {
 		if (show_dialog) {
-			dialog = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_WARNING,
-				 GTK_BUTTONS_OK,
-				 _("Cannot communicate with GDM "
-				   "(The GNOME Display Manager)"),
-				 _("Perhaps you have an old version "
-				   "of GDM running."));
+			dialog = hig_dialog_new (NULL /* parent */,
+                                                 GTK_DIALOG_MODAL /* flags */,
+                                                 GTK_MESSAGE_WARNING,
+                                                 GTK_BUTTONS_OK,
+                                                 _("Cannot communicate with GDM "
+                                                   "(The GNOME Display Manager)"),
+                                                 _("Perhaps you have an old version "
+                                                   "of GDM running."));
 			gtk_widget_show_all (dialog);
 			gtk_dialog_run (GTK_DIALOG (dialog));
 			gtk_widget_destroy (dialog);
Index: gui/gdmflexiserver.c
===================================================================
--- gui/gdmflexiserver.c	(revision 4683)
+++ gui/gdmflexiserver.c	(working copy)
@@ -41,7 +41,8 @@
 #include "gdmcomm.h"
 #include "gdmcommon.h"
 #include "gdmconfig.h"
-#include "gdmconfig.h"
+
+#include "gdm-common.h"
 
 static GSList *xservers          = NULL;
 static const char *send_command  = NULL;
@@ -93,6 +94,32 @@ get_cur_vt (void)
 	return cur_vt;
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 /* change to an existing vt */
 static void
 change_vt (int vt)
@@ -107,14 +134,12 @@ change_vt (int vt)
 		GtkWidget *dialog;
 		const char *message = gdmcomm_get_error_message (ret, use_xnest);
 
-		dialog = ve_hig_dialog_new
-			(NULL /* parent */,
-			 GTK_DIALOG_MODAL /* flags */,
-			 GTK_MESSAGE_ERROR,
-			 GTK_BUTTONS_OK,
-			 _("Cannot change display"),
-			 message);
-
+		dialog = hig_dialog_new (NULL /* parent */,
+					 GTK_DIALOG_MODAL /* flags */,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Cannot change display"),
+					 message);
 		gtk_widget_show_all (dialog);
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
@@ -123,6 +148,17 @@ change_vt (int vt)
 }
 
 static int
+vector_len (char * const *v)
+{
+	int i;
+	if (v == NULL)
+		return 0;
+	for (i = 0; v[i] != NULL; i++)
+		;
+	return i;
+}
+
+static int
 get_vt_num (char **vec, char *vtpart, int depth)
 {
 	int i;
@@ -136,8 +172,7 @@ get_vt_num (char **vec, char *vtpart, in
 	for (i = 0; vec[i] != NULL; i++) {
 		char **rvec;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (rvec == NULL || vector_len (rvec) != 3)
 			continue;
 
 		if (strcmp (rvec[0], vtpart) == 0) {
@@ -177,8 +212,7 @@ create_model (char **vec)
 		char **rvec;
 		int vt;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (rvec == NULL || vector_len (rvec) != 3)
 			continue;
 
 		vt = get_vt_num (vec, rvec[2], 5);
@@ -380,7 +414,7 @@ run_logged_in_dialogue (char **vec)
 	if (startnew == TRUE) {
 		/* Just return if the user doesn't want to see the dialog */
 		return;
-	} 
+	}
 
 	dialog = gtk_dialog_new_with_buttons (_("Open Displays"),
 					      NULL /* parent */,
@@ -516,8 +550,7 @@ check_for_users (void)
 		char **rvec;
 		int vt;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (rvec == NULL || vector_len (rvec) != 3)
 			continue;
 
 		vt = get_vt_num (vec, rvec[2], 5);
@@ -779,15 +812,14 @@ main (int argc, char *argv[])
 			g_print ("%s\n", ret);
 			return 0;
 		} else {
-			dialog = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("Cannot communicate with GDM "
-				   "(The GNOME Display Manager)"),
-				 _("Perhaps you have an old version "
-				   "of GDM running."));
+			dialog = hig_dialog_new (NULL /* parent */,
+						 GTK_DIALOG_MODAL /* flags */,
+						 GTK_MESSAGE_ERROR,
+						 GTK_BUTTONS_OK,
+						 _("Cannot communicate with GDM "
+						   "(The GNOME Display Manager)"),
+						 _("Perhaps you have an old version "
+						   "of GDM running."));
 			gtk_widget_show_all (dialog);
 			gtk_dialog_run (GTK_DIALOG (dialog));
 			gtk_widget_destroy (dialog);
@@ -828,17 +860,15 @@ main (int argc, char *argv[])
 			/* At this point we are done using the socket, so close it */
 			gdmcomm_comm_bulk_stop ();
 
-			dialog = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("You do not seem to have the "
-				   "authentication needed for this "
-				   "operation"),
-				 _("Perhaps your .Xauthority "
-				   "file is not set up correctly."));
-
+			dialog = hig_dialog_new (NULL /* parent */,
+						 GTK_DIALOG_MODAL /* flags */,
+						 GTK_MESSAGE_ERROR,
+						 GTK_BUTTONS_OK,
+						 _("You do not seem to have the "
+						   "authentication needed for this "
+						   "operation"),
+						 _("Perhaps your .Xauthority "
+						   "file is not set up correctly."));
 			gtk_widget_show_all (dialog);
 			gtk_dialog_run (GTK_DIALOG (dialog));
 			gtk_widget_destroy (dialog);
@@ -858,15 +888,14 @@ main (int argc, char *argv[])
 			/* At this point we are done using the socket, so close it */
 			gdmcomm_comm_bulk_stop ();
 
-			dialog = ve_hig_dialog_new
-				(NULL /* parent */,
-				 GTK_DIALOG_MODAL /* flags */,
-				 GTK_MESSAGE_ERROR,
-				 GTK_BUTTONS_OK,
-				 _("You do not seem to be logged in on the "
-				   "console"),
-				 _("Starting a new login only "
-				   "works correctly on the console."));
+			dialog = hig_dialog_new (NULL /* parent */,
+						 GTK_DIALOG_MODAL /* flags */,
+						 GTK_MESSAGE_ERROR,
+						 GTK_BUTTONS_OK,
+						 _("You do not seem to be logged in on the "
+						   "console"),
+						 _("Starting a new login only "
+						   "works correctly on the console."));
 			gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
 						      FALSE);
 			gtk_widget_show_all (dialog);
@@ -908,13 +937,12 @@ main (int argc, char *argv[])
 
 	message = gdmcomm_get_error_message (ret, use_xnest);
 
-	dialog = ve_hig_dialog_new
-		(NULL /* parent */,
-		 GTK_DIALOG_MODAL /* flags */,
-		 GTK_MESSAGE_ERROR,
-		 GTK_BUTTONS_OK,
-		 _("Cannot start new display"),
-		 message);
+	dialog = hig_dialog_new (NULL /* parent */,
+				 GTK_DIALOG_MODAL /* flags */,
+				 GTK_MESSAGE_ERROR,
+				 GTK_BUTTONS_OK,
+				 _("Cannot start new display"),
+				 message);
 
 	gtk_widget_show_all (dialog);
 	gtk_dialog_run (GTK_DIALOG (dialog));
Index: gui/Makefile.am
===================================================================
--- gui/Makefile.am	(revision 4683)
+++ gui/Makefile.am	(working copy)
@@ -1,3 +1,5 @@
+NULL =
+
 SUBDIRS = . greeter modules faces
 
 ## Process this file with automake to produce makefile.in
@@ -17,7 +19,7 @@ INCLUDES = \
 	-I.						\
 	-I..						\
 	-I$(top_srcdir)/daemon				\
-	-I$(top_srcdir)/vicious-extensions		\
+	-I$(top_srcdir)/common				\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\" 	\
 	$(GUI_CFLAGS)
 
@@ -100,7 +102,7 @@ gdmchooser_LDADD = \
 	$(PANGO_LIBS)		\
 	$(GDK_LIBS)		\
 	$(GDKPIXBUF_LIBS)	\
-	$(top_builddir)/vicious-extensions/libviciousui.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(X_EXTRA_LIBS)		\
 	$(XINERAMA_LIBS)	\
 	$(X_LIBS)		\
@@ -118,7 +120,7 @@ gdmlogin_LDADD = \
 	$(GDK_LIBS)		\
 	$(PANGO_LIBS)		\
 	$(GDKPIXBUF_LIBS)	\
-	$(top_builddir)/vicious-extensions/libviciousui-minimal.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(X_EXTRA_LIBS)		\
 	$(XINERAMA_LIBS)	\
 	$(X_LIBS)		\
@@ -141,7 +143,7 @@ gdmsetup_LDADD = \
 	$(GDKPIXBUF_LIBS)	\
 	$(EXTRA_SETUP_LIBS)	\
 	$(LIBGNOMEUI_LIBS)	\
-	$(top_builddir)/vicious-extensions/libviciousui.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(X_LIBS)		\
 	-lXau			\
 	-lX11
@@ -156,7 +158,8 @@ gdmphotosetup_LDADD = \
 	$(GDKPIXBUF_LIBS)	\
 	$(INTLLIBS)		\
 	-lX11			\
-	$(top_builddir)/vicious-extensions/libviciousui.a
+	$(top_builddir)/common/libgdmcommon.a	\
+	$(NULL)
 
 gdmXnestchooser_LDADD = \
 	libgdmcommon.a		\
@@ -165,7 +168,7 @@ gdmXnestchooser_LDADD = \
 	$(GLIB_LIBS)		\
 	$(GOBJECT_LIBS)		\
 	$(GDK_LIBS)		\
-	$(top_builddir)/vicious-extensions/libviciousui.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(EXTRA_XNEST_LIBS)	\
 	$(X_LIBS)		\
 	-lXau			\
@@ -179,7 +182,7 @@ gdmflexiserver_LDADD = \
 	$(GLIB_LIBS)		\
 	$(GOBJECT_LIBS)		\
 	$(GDK_LIBS)		\
-	$(top_builddir)/vicious-extensions/libviciousui.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(EXTRA_FLEXI_LIBS)	\
 	$(X_LIBS)		\
 	-lX11			\
@@ -193,7 +196,7 @@ gdmdynamic_LDADD = 		\
 	$(GLIB_LIBS) 		\
 	$(GOBJECT_LIBS) 	\
 	$(GDK_LIBS) 		\
-	$(top_builddir)/vicious-extensions/libviciousui.a \
+	$(top_builddir)/common/libgdmcommon.a \
 	$(EXTRA_DYNAMIC_LIBS)	\
 	$(X_LIBS)		\
 	-lX11			\
Index: gui/gdmsetup.c
===================================================================
--- gui/gdmsetup.c	(revision 4683)
+++ gui/gdmsetup.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDMSetup
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDMSetup
  * Copyright (C) 2002, George Lebl
  *
  * This program is free software; you can redistribute it and/or modify
@@ -39,9 +41,6 @@
 #include <glade/glade.h>
 #include <glib/gi18n.h>
 
-#include "vicious.h"
-#include "viciousui.h"
-
 #include "gdm.h"
 #include "gdmcommon.h"
 #include "misc.h"
@@ -50,6 +49,8 @@
 #include "gdmsession.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 static char     *GdmSoundProgram = NULL;
 static gchar    *GdmExclude      = NULL;
 static gchar    *GdmInclude      = NULL;
@@ -197,7 +198,9 @@ simple_spawn_sync (char **argv)
 static void
 setup_cursor (GdkCursorType type)
 {
-	GdkCursor *cursor = gdk_cursor_new (type);
+	GdkCursor *cursor;
+
+	cursor = gdk_cursor_new (type);
 	gdk_window_set_cursor (gdk_get_default_root_window (), cursor);
 	gdk_cursor_unref (cursor);
 }
@@ -205,9 +208,11 @@ setup_cursor (GdkCursorType type)
 static void
 setup_window_cursor (GdkCursorType type)
 {
-	GdkCursor *cursor = gdk_cursor_new (type);
-	GtkWidget *setup_dialog = glade_helper_get
-		(xml, "setup_dialog", GTK_TYPE_WINDOW);
+	GdkCursor *cursor;
+	GtkWidget *setup_dialog;
+
+	cursor = gdk_cursor_new (type);
+	setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 	if (setup_dialog->window)
 		gdk_window_set_cursor (setup_dialog->window, cursor);
 	gdk_cursor_unref (cursor);
@@ -216,12 +221,39 @@ setup_window_cursor (GdkCursorType type)
 static void
 unsetup_window_cursor (void)
 {
-	GtkWidget *setup_dialog = glade_helper_get
-		(xml, "setup_dialog", GTK_TYPE_WINDOW);
+	GtkWidget *setup_dialog;
+
+	setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 	if (setup_dialog->window)
 		gdk_window_set_cursor (setup_dialog->window, NULL);
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 static void
 update_greeters (void)
 {
@@ -271,20 +303,20 @@ update_greeters (void)
 
 check_update_error:
 	if ( ! shown_error && have_error) {
-		GtkWidget *setup_dialog = glade_helper_get
-			(xml, "setup_dialog", GTK_TYPE_WINDOW);
-		GtkWidget *dlg =
-			ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-						GTK_DIALOG_MODAL | 
-						GTK_DIALOG_DESTROY_WITH_PARENT,
-						GTK_MESSAGE_ERROR,
-						GTK_BUTTONS_OK,
-						_("An error occurred while "
-						  "trying to contact the "
-						  "login screens.  Not all "
-						  "updates may have taken "
-						  "effect."),
-						"");
+		GtkWidget *setup_dialog;
+		GtkWidget *dlg;
+		setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
+		dlg = hig_dialog_new (GTK_WINDOW (setup_dialog),
+				      GTK_DIALOG_MODAL |
+				      GTK_DIALOG_DESTROY_WITH_PARENT,
+				      GTK_MESSAGE_ERROR,
+				      GTK_BUTTONS_OK,
+				      _("An error occurred while "
+					"trying to contact the "
+					"login screens.  Not all "
+					"updates may have taken "
+					"effect."),
+				      "");
 		gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
 		gtk_dialog_run (GTK_DIALOG (dlg));
 		gtk_widget_destroy (dlg);
@@ -350,60 +382,81 @@ update_key (const char *key)
 	}
 }
 
-static void 
+static void
 gdm_setup_config_set_bool (const char *key, gboolean val)
 {
-	VeConfig *cfg        = ve_config_get (config_file);
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
-        gboolean defaultval  = ve_config_get_bool (cfg, key);
+	GKeyFile *cfg;
+	GKeyFile *custom_cfg;
+        gboolean defaultval;
+
+        cfg = gdm_common_config_load (config_file, NULL);
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+	gdm_common_config_get_boolean (cfg, key, &defaultval, NULL);
 
         if (val == defaultval) {
-		ve_config_delete_key (custom_cfg, key);
+		gdm_common_config_remove_key (custom_cfg, key, NULL);
 	} else {
-		ve_config_set_bool (custom_cfg, key, val);
+		gdm_common_config_set_boolean (custom_cfg, key, val);
 	}
 
-	ve_config_save (custom_cfg, FALSE /* force */);
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+
+	g_key_file_free (cfg);
+	g_key_file_free (custom_cfg);
 
 	update_key (key);
 }
 
-static void 
+static void
 gdm_setup_config_set_int (const char *key, int val)
 {
-	VeConfig *cfg        = ve_config_get (config_file);
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
-        int defaultval       = ve_config_get_int (cfg, key);
+	GKeyFile *cfg;
+	GKeyFile *custom_cfg;
+        int       defaultval;
+
+        cfg = gdm_common_config_load (config_file, NULL);
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+	gdm_common_config_get_int (cfg, key, &defaultval, NULL);
 
 	if (val == defaultval) {
-		ve_config_delete_key (custom_cfg, key);
+		gdm_common_config_remove_key (custom_cfg, key, NULL);
 	} else {
-		ve_config_set_int (custom_cfg, key, val);
+		gdm_common_config_set_int (custom_cfg, key, val);
 	}
 
-	ve_config_save (custom_cfg, FALSE /* force */);
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+
+	g_key_file_free (cfg);
+	g_key_file_free (custom_cfg);
 
 	update_key (key);
 }
 
-static void 
+static void
 gdm_setup_config_set_string (const char *key, gchar *val)
 {
-	VeConfig *cfg        = ve_config_get (config_file);
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
-	gchar *defaultval    = ve_config_get_string (cfg, key);
+	GKeyFile *cfg;
+	GKeyFile *custom_cfg;
+        char     *defaultval;
+
+        cfg = gdm_common_config_load (config_file, NULL);
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+	gdm_common_config_get_string (cfg, key, &defaultval, NULL);
 
 	if (defaultval != NULL &&
 	    strcmp (ve_sure_string (val), ve_sure_string (defaultval)) == 0) {
-		ve_config_delete_key (custom_cfg, key);
+		gdm_common_config_remove_key (custom_cfg, key, NULL);
 	} else {
-		ve_config_set_string (custom_cfg, key, val);
+		gdm_common_config_set_string (custom_cfg, key, val);
 	}
 
 	if (defaultval)
 		g_free (defaultval);
 
-	ve_config_save (custom_cfg, FALSE /* force */);
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+
+	g_key_file_free (cfg);
+	g_key_file_free (custom_cfg);
 
 	update_key (key);
 }
@@ -459,14 +512,12 @@ toggle_timeout (GtkWidget *toggle)
 			gchar *filename;
 			GtkWidget *file_chooser;
 
-			file_chooser = glade_helper_get (xml, "global_face_dir_filechooser",
-							 GTK_TYPE_FILE_CHOOSER_BUTTON);
+			file_chooser = glade_xml_get_widget (xml, "global_face_dir_filechooser");
 			filename  = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser));
-			
-			if (strcmp (ve_sure_string (gdm_config_get_string ((char*)key)), 
-				    ve_sure_string (filename)) != 0)				
+			if (strcmp (ve_sure_string (gdm_config_get_string ((char*)key)),
+				    ve_sure_string (filename)) != 0)
 				gdm_setup_config_set_string (key, ve_sure_string (filename));
-			
+
 			g_free (filename);
 		}
 		else
@@ -480,8 +531,8 @@ toggle_timeout (GtkWidget *toggle)
 			gchar *filename;
 			GtkWidget *file_chooser;
 			
-			file_chooser = glade_helper_get (xml, "default_face_filechooser",
-							 GTK_TYPE_FILE_CHOOSER_BUTTON);
+			file_chooser = glade_xml_get_widget (xml, "default_face_filechooser");
+
 			filename  = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser));
 			
 			if (strcmp (ve_sure_string (gdm_config_get_string ((char*)key)), 
@@ -501,8 +552,8 @@ toggle_timeout (GtkWidget *toggle)
 			gchar *filename;
 			GtkWidget *file_chooser;
 			
-			file_chooser = glade_helper_get (xml, "gtkrc_chooserbutton",
-							 GTK_TYPE_FILE_CHOOSER_BUTTON);
+			file_chooser = glade_xml_get_widget (xml, "gtkrc_chooserbutton");
+
 			filename  = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser));
 			
 			if (strcmp (ve_sure_string (gdm_config_get_string ((char*)key)), 
@@ -525,8 +576,7 @@ toggle_timeout (GtkWidget *toggle)
 			gchar *new_val = NULL;			
 			GtkWidget *default_session_combobox;
 			
-			default_session_combobox = glade_helper_get (xml, "default_session_combobox", 
-							     GTK_TYPE_COMBO_BOX);
+			default_session_combobox = glade_xml_get_widget (xml, "default_session_combobox");
 
 			selected = gtk_combo_box_get_active (GTK_COMBO_BOX (default_session_combobox));
 			
@@ -575,10 +625,8 @@ command_toggle_timeout (GtkWidget *toggl
 		gint selected, i;
 		
 		val = GTK_TOGGLE_BUTTON (toggle)->active;
-		apply_cmd_changes = glade_helper_get (xml_commands, "command_apply_button", GTK_TYPE_BUTTON);
-		command_combobox = glade_helper_get (xml_commands, 
-						     "cmd_type_combobox",
-						     GTK_TYPE_COMBO_BOX);
+		apply_cmd_changes = glade_xml_get_widget (xml_commands, "command_apply_button");
+		command_combobox = glade_xml_get_widget (xml_commands, "cmd_type_combobox");
 		
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (command_combobox));
 		
@@ -613,8 +661,7 @@ logo_toggle_timeout (GtkWidget *toggle)
 	GtkWidget  *chooserbutton;
 	gchar      *filename;
 
-	chooserbutton = glade_helper_get (xml, "local_logo_image_chooserbutton",
-	                                  GTK_TYPE_FILE_CHOOSER_BUTTON);
+	chooserbutton = glade_xml_get_widget (xml, "local_logo_image_chooserbutton");
 						
 	filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooserbutton));
 	
@@ -638,8 +685,7 @@ logo_toggle_toggled (GtkWidget *toggle, 
 
 		GtkWidget *checkbutton;
 		
-		checkbutton = glade_helper_get (xml, "remote_logo_image_checkbutton",
-		                                GTK_TYPE_CHECK_BUTTON);
+		checkbutton = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
 
 		g_signal_handlers_disconnect_by_func (checkbutton,
 		                                      (gpointer) logo_toggle_toggled,
@@ -654,8 +700,7 @@ logo_toggle_toggled (GtkWidget *toggle, 
 	else {
 		GtkWidget *checkbutton;
 
-		checkbutton = glade_helper_get (xml, "local_logo_image_checkbutton",
-		                                GTK_TYPE_CHECK_BUTTON);
+		checkbutton = glade_xml_get_widget (xml, "local_logo_image_checkbutton");
 
 		g_signal_handlers_disconnect_by_func (checkbutton,
 		                                      (gpointer) logo_toggle_toggled,
@@ -722,22 +767,22 @@ intspin_timeout (GtkWidget *spin)
 			GtkTreeIter iter;			
 			GtkWidget *setup_dialog;
 
-			setup_dialog = glade_helper_get(xml, "setup_dialog", GTK_TYPE_WINDOW);
+			setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 
 			//Inform user about the change and its implications
-			dlg = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-						 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-						 GTK_MESSAGE_WARNING,
-						 GTK_BUTTONS_OK,
-						 _("Users include list modification"),
-						 _("Some of the users in the Include list "
-						   "(Users tab) now have uid lower than "
-						   "MinimalUID and will be removed."));
+			dlg = hig_dialog_new (GTK_WINDOW (setup_dialog),
+					      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					      GTK_MESSAGE_WARNING,
+					      GTK_BUTTONS_OK,
+					      _("Users include list modification"),
+					      _("Some of the users in the Include list "
+						"(Users tab) now have uid lower than "
+						"MinimalUID and will be removed."));
 			gtk_dialog_run (GTK_DIALOG (dlg));
 			gtk_widget_destroy (dlg);						
 
-			include_treeview  = glade_helper_get (xml, "fb_include_treeview",
-							      GTK_TYPE_TREE_VIEW);
+			include_treeview  = glade_xml_get_widget (xml, "fb_include_treeview");
+
 			include_model = gtk_tree_view_get_model (GTK_TREE_VIEW (include_treeview));
 
 			valid = gtk_tree_model_get_iter_first (include_model, &iter);
@@ -812,81 +857,86 @@ static GSList *displays_inactive = NULL;
 static GHashTable *dispval_hash  = NULL;
 
 static void
-gdm_load_displays (VeConfig *cfg, GList *list )
+gdm_load_displays (GKeyFile *cfg,
+		   char    **keys)
 {
-   GList *li;
-   GSList *li2;
+	GSList *li2;
+	int i;
 
-   for (li = list; li != NULL; li = li->next) {
-      const gchar *key = li->data;
+	for (i = 0; keys[i] != NULL; i++) {
+		const gchar *key = keys[i];
 
-      if (isdigit (*key)) {
-         gchar *fullkey;
-         gchar *dispval;
-         int keynum = atoi (key);
-         gboolean skip_entry = FALSE;
-
-         fullkey = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
-         dispval = ve_config_get_string (cfg, fullkey);
-         g_free (fullkey);
-
-         /* Do not add if already in the list */
-         for (li2 = displays; li2 != NULL; li2 = li2->next) {
-            gchar *disp = li2->data;
-            if (atoi (disp) == keynum) {
-               skip_entry = TRUE;
-               break;
-            }
-         }
-
-         /* Do not add if this display was marked as inactive already */
-         for (li2 = displays_inactive; li2 != NULL; li2 = li2->next) {
-            gchar *disp = li2->data;
-            if (atoi (disp) == keynum) {
-               skip_entry = TRUE;
-               break;
-            }
-         }
+		if (isdigit (*key)) {
+			gchar *fullkey;
+			gchar *dispval;
+			int keynum = atoi (key);
+			gboolean skip_entry = FALSE;
+
+			fullkey = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
+			gdm_common_config_get_string (cfg, fullkey, &dispval, NULL);
+			g_free (fullkey);
+
+			/* Do not add if already in the list */
+			for (li2 = displays; li2 != NULL; li2 = li2->next) {
+				gchar *disp = li2->data;
+				if (atoi (disp) == keynum) {
+					skip_entry = TRUE;
+					break;
+				}
+			}
 
-         if (skip_entry == TRUE) {
-            g_free (dispval);
-            continue;
-         }
+			/* Do not add if this display was marked as inactive already */
+			for (li2 = displays_inactive; li2 != NULL; li2 = li2->next) {
+				gchar *disp = li2->data;
+				if (atoi (disp) == keynum) {
+					skip_entry = TRUE;
+					break;
+				}
+			}
+
+			if (skip_entry == TRUE) {
+				g_free (dispval);
+				continue;
+			}
+
+			if (g_ascii_strcasecmp (ve_sure_string (dispval), "inactive") == 0) {
+				displays_inactive = g_slist_append (displays_inactive, g_strdup (key));
+			} else {
+				if (dispval_hash == NULL)
+					dispval_hash = g_hash_table_new (g_str_hash, g_str_equal);            
+
+				displays = g_slist_insert_sorted (displays, g_strdup (key), (GCompareFunc) display_sort_func);
+				g_hash_table_insert (dispval_hash, g_strdup (key), g_strdup (dispval));
+			}
 
-         if (g_ascii_strcasecmp (ve_sure_string (dispval), "inactive") == 0) {
-            displays_inactive = g_slist_append (displays_inactive, g_strdup (key));
-         } else {
-            if (dispval_hash == NULL)
-               dispval_hash = g_hash_table_new (g_str_hash, g_str_equal);            
-
-            displays = g_slist_insert_sorted (displays, g_strdup (key), (GCompareFunc) display_sort_func);
-            g_hash_table_insert (dispval_hash, g_strdup (key), g_strdup (dispval));
-         }
-
-         g_free (dispval);
-      }
-   }
+			g_free (dispval);
+		}
+	}
 }
 
-static void 
+static void
 xservers_get_displays (GtkListStore *store)
 {
 	/* Find server definitions */
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
-	VeConfig *cfg        = ve_config_get (config_file);
-	GList *list;
+	GKeyFile *custom_cfg;
+	GKeyFile *cfg;
+	char    **keys;
 	GSList *li;
 	gchar *server, *options;
 
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+        cfg = gdm_common_config_load (config_file, NULL);
+
 	/* Fill list with all the active displays */
-	if (custom_cfg) {
-		list = ve_config_get_keys (custom_cfg, GDM_KEY_SECTION_SERVERS);
-		gdm_load_displays (custom_cfg, list);
-		ve_config_free_list_of_strings (list);
-	}
-	list = ve_config_get_keys (cfg, GDM_KEY_SECTION_SERVERS);
-	gdm_load_displays (cfg, list);
-	ve_config_free_list_of_strings (list);
+	if (custom_cfg != NULL) {
+		keys = g_key_file_get_keys (custom_cfg, GDM_KEY_SECTION_SERVERS, NULL, NULL);
+		gdm_load_displays (custom_cfg, keys);
+		g_strfreev (keys);
+	}
+
+	keys = g_key_file_get_keys (cfg, GDM_KEY_SECTION_SERVERS, NULL, NULL);
+	gdm_load_displays (cfg, keys);
+	g_strfreev (keys);
 
 	for (li = displays; li != NULL; li = li->next) {
 		GtkTreeIter iter;
@@ -933,10 +983,8 @@ xserver_update_delete_sensitivity ()
 	gboolean valid;
 	gint i;
 
-	modify_combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-                                            GTK_TYPE_COMBO_BOX);
-	delete_button   = glade_helper_get (xml_xservers, "xserver_deletebutton",
-                                            GTK_TYPE_BUTTON);
+	modify_combobox = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+	delete_button   = glade_xml_get_widget (xml_xservers, "xserver_deletebutton");
 
 	/* Get list of servers that are set to start */
 	store = gtk_list_store_new (XSERVER_NUM_COLUMNS,
@@ -993,20 +1041,13 @@ void init_servers_combobox (int index)
 	GtkListStore *store;
 	GdmXserver *xserver;
 
-	mod_combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                 GTK_TYPE_COMBO_BOX);
-	name_entry = glade_helper_get (xml_xservers, "xserver_name_entry",
-	                               GTK_TYPE_ENTRY);
-	command_entry = glade_helper_get (xml_xservers, "xserver_command_entry",
-	                                  GTK_TYPE_ENTRY);
-	style_combobox = glade_helper_get (xml_xservers, "xserver_style_combobox",
-	                                   GTK_TYPE_COMBO_BOX);
-	handled_checkbutton = glade_helper_get (xml_xservers, "xserver_handled_checkbutton",
-	                                        GTK_TYPE_CHECK_BUTTON);
-	flexible_checkbutton = glade_helper_get (xml_xservers, "xserver_flexible_checkbutton",
-	                                         GTK_TYPE_CHECK_BUTTON);
-	priority_spinbutton = glade_helper_get(xml_xservers, "xserv_priority_spinbutton",
-					       GTK_TYPE_SPIN_BUTTON);
+	mod_combobox = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+	name_entry = glade_xml_get_widget (xml_xservers, "xserver_name_entry");
+	command_entry = glade_xml_get_widget (xml_xservers, "xserver_command_entry");
+	style_combobox = glade_xml_get_widget (xml_xservers, "xserver_style_combobox");
+	handled_checkbutton = glade_xml_get_widget (xml_xservers, "xserver_handled_checkbutton");
+	flexible_checkbutton = glade_xml_get_widget (xml_xservers, "xserver_flexible_checkbutton");
+	priority_spinbutton = glade_xml_get_widget(xml_xservers, "xserv_priority_spinbutton");
 
 	/* Get list of servers that are set to start */
 	store = gtk_list_store_new (XSERVER_NUM_COLUMNS,
@@ -1051,28 +1092,18 @@ update_remote_sensitivity (gboolean valu
 	GtkWidget *remote_theme_mode_hbox;
 	GtkWidget *remote_theme_select_hbox;
 	GtkWidget *sg_scale_background_remote_hbox;
-	
-	remote_background_color_hbox = glade_helper_get (xml, "remote_background_color_hbox",
-	                                                 GTK_TYPE_HBOX);
-	remote_background_image_hhox = glade_helper_get (xml, "remote_background_image_hhox",
-	                                                 GTK_TYPE_HBOX);
-	remote_background_image_checkbutton = glade_helper_get (xml, "remote_background_image_checkbutton",
-	                                                        GTK_TYPE_CHECK_BUTTON);
-	remote_background_image_chooserbutton = glade_helper_get (xml, "remote_background_image_chooserbutton",
-	                                                          GTK_TYPE_FILE_CHOOSER_BUTTON);
-	remote_logo_image_checkbutton = glade_helper_get (xml, "remote_logo_image_checkbutton",
-	                                                  GTK_TYPE_CHECK_BUTTON);
-	remote_plain_logo_hbox = glade_helper_get (xml, "remote_plain_logo_hbox",
-	                                           GTK_TYPE_HBOX);
-	remote_theme_background_hbox = glade_helper_get (xml, "remote_theme_background_hbox",
-	                                                 GTK_TYPE_TABLE);
-	remote_theme_mode_hbox = glade_helper_get (xml, "remote_theme_mode_hbox",
-	                                           GTK_TYPE_HBOX);
-	remote_theme_select_hbox = glade_helper_get (xml, "remote_theme_select_hbox",
-	                                             GTK_TYPE_HBOX);
-	sg_scale_background_remote_hbox = glade_helper_get (xml, "sg_scale_background_remote_hbox",
-	                                                    GTK_TYPE_HBOX);
-	
+
+	remote_background_color_hbox = glade_xml_get_widget (xml, "remote_background_color_hbox");
+	remote_background_image_hhox = glade_xml_get_widget (xml, "remote_background_image_hhox");
+	remote_background_image_checkbutton = glade_xml_get_widget (xml, "remote_background_image_checkbutton");
+	remote_background_image_chooserbutton = glade_xml_get_widget (xml, "remote_background_image_chooserbutton");
+	remote_logo_image_checkbutton = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
+	remote_plain_logo_hbox = glade_xml_get_widget (xml, "remote_plain_logo_hbox");
+	remote_theme_background_hbox = glade_xml_get_widget (xml, "remote_theme_background_hbox");
+	remote_theme_mode_hbox = glade_xml_get_widget (xml, "remote_theme_mode_hbox");
+	remote_theme_select_hbox = glade_xml_get_widget (xml, "remote_theme_select_hbox");
+	sg_scale_background_remote_hbox = glade_xml_get_widget (xml, "sg_scale_background_remote_hbox");
+
 	gtk_widget_set_sensitive (remote_background_color_hbox, value);
 	gtk_widget_set_sensitive (remote_background_image_hhox, value);
 	gtk_widget_set_sensitive (remote_background_image_checkbutton, value);
@@ -1099,24 +1130,16 @@ refresh_remote_tab (void)
 	gchar *remote_style;
 	gint local_style;
 
-	local_greeter = glade_helper_get (xml, "local_greeter", 
-	                                  GTK_TYPE_COMBO_BOX);
-	remote_greeter = glade_helper_get (xml, "remote_greeter", 
-	                                   GTK_TYPE_COMBO_BOX);
-	remote_plain_vbox = glade_helper_get (xml, "remote_plain_properties_vbox",
-	                                     GTK_TYPE_VBOX);
-	remote_themed_vbox = glade_helper_get (xml, "remote_themed_properties_vbox",
-	                                      GTK_TYPE_VBOX);
-	configure_xdmcp_vbox = glade_helper_get (xml, "remote_configure_xdmcp_vbox",
-	                                         GTK_TYPE_VBOX);
-	welcome_message_vbox = glade_helper_get (xml, "remote_welcome_message_vbox",
-	                                         GTK_TYPE_VBOX);
-	allowremoteroot = glade_helper_get (xml, "allowremoteroot",
-	                                 GTK_TYPE_BUTTON);
-	allowremoteauto = glade_helper_get (xml, "allowremoteauto",
-	                                 GTK_TYPE_CHECK_BUTTON);
+	local_greeter = glade_xml_get_widget (xml, "local_greeter");
+	remote_greeter = glade_xml_get_widget (xml, "remote_greeter");
+	remote_plain_vbox = glade_xml_get_widget (xml, "remote_plain_properties_vbox");
+	remote_themed_vbox = glade_xml_get_widget (xml, "remote_themed_properties_vbox");
+	configure_xdmcp_vbox = glade_xml_get_widget (xml, "remote_configure_xdmcp_vbox");
+	welcome_message_vbox = glade_xml_get_widget (xml, "remote_welcome_message_vbox");
+	allowremoteroot = glade_xml_get_widget (xml, "allowremoteroot");
+	allowremoteauto = glade_xml_get_widget (xml, "allowremoteauto");
 
-	/* Remove previously added items from the combobox */ 
+	/* Remove previously added items from the combobox */
 	gtk_combo_box_remove_text (GTK_COMBO_BOX (remote_greeter), REMOTE_PLAIN_WITH_FACE);
 	gtk_combo_box_remove_text (GTK_COMBO_BOX (remote_greeter), REMOTE_PLAIN);
 	
@@ -1199,37 +1222,41 @@ refresh_remote_tab (void)
 static void
 update_xserver (gchar *section, GdmXserver *svr)
 {
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
-	gchar *real_section  = g_strdup_printf ("%s%s",
-		GDM_KEY_SERVER_PREFIX, section);
+	GKeyFile *custom_cfg;
+	gchar *real_section;
 	gchar *key;
 
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+	real_section = g_strdup_printf ("%s%s", GDM_KEY_SERVER_PREFIX, section);
+
 	key = g_strconcat (real_section, "/" GDM_KEY_SERVER_NAME, NULL);
-	ve_config_set_string (custom_cfg, key, svr->name);
+	gdm_common_config_set_string (custom_cfg, key, svr->name);
 	g_free (key);
 
 	key = g_strconcat (real_section, "/" GDM_KEY_SERVER_COMMAND, NULL);
-	ve_config_set_string (custom_cfg, key, svr->command);
+	gdm_common_config_set_string (custom_cfg, key, svr->command);
 	g_free (key);
 
 	key = g_strconcat (real_section, "/", GDM_KEY_SERVER_CHOOSER, NULL);
-	ve_config_set_bool (custom_cfg, key, svr->chooser);
+	gdm_common_config_set_boolean (custom_cfg, key, svr->chooser);
 	g_free (key);
 
 	key = g_strconcat (real_section, "/" GDM_KEY_SERVER_HANDLED, NULL);
-	ve_config_set_bool (custom_cfg, key, svr->handled);
+	gdm_common_config_set_boolean (custom_cfg, key, svr->handled);
 	g_free (key);
 
 	key = g_strconcat (real_section, "/" GDM_KEY_SERVER_FLEXIBLE, NULL);
-	ve_config_set_bool (custom_cfg, key, svr->flexible);
+	gdm_common_config_set_boolean (custom_cfg, key, svr->flexible);
 	g_free (key);
 
 	key = g_strconcat (real_section, "/" GDM_KEY_SERVER_PRIORITY, NULL);
-	ve_config_set_int (custom_cfg, key, svr->priority);
+	gdm_common_config_set_int (custom_cfg, key, svr->priority);
 	g_free (key);
 
         g_free (real_section);
-	ve_config_save (custom_cfg, FALSE);
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+
+	g_key_file_free (custom_cfg);
 
 	update_key ("xservers/PARAMETERS");
 }
@@ -1355,14 +1382,14 @@ combobox_timeout (GtkWidget *combo_box)
 						str = g_strdup (_("Autologin or timed login to the root account is forbidden."));
 					else 
 						str = g_strdup_printf (_("The \"%s\" user UID is lower than allowed MinimalUID."), new_val);				
-					setup_dialog = glade_helper_get(xml, "setup_dialog", GTK_TYPE_WINDOW);
+					setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 										
-					dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-								    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-								    GTK_MESSAGE_ERROR,
-								    GTK_BUTTONS_OK,
-								    _("User not allowed"),
-								    str);
+					dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+								 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+								 GTK_MESSAGE_ERROR,
+								 GTK_BUTTONS_OK,
+								 _("User not allowed"),
+								 str);
 					gtk_dialog_run (GTK_DIALOG (dialog));
 					gtk_widget_destroy (dialog);
 					g_free (str);
@@ -1411,10 +1438,8 @@ combobox_timeout (GtkWidget *combo_box)
 		gchar *section;
 		gboolean val_old, val_new;
 
-		mod_combobox    = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-		                                    GTK_TYPE_COMBO_BOX);
-		style_combobox  = glade_helper_get (xml_xservers, "xserver_style_combobox",
-		                                    GTK_TYPE_COMBO_BOX);
+		mod_combobox    = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+		style_combobox  = glade_xml_get_widget (xml_xservers, "xserver_style_combobox");
 
 		/* Get xserver section to update */
 		section = gtk_combo_box_get_active_text (GTK_COMBO_BOX (mod_combobox));
@@ -1466,12 +1491,9 @@ combobox_timeout (GtkWidget *combo_box)
 		gboolean bool_val = FALSE;		
 		gboolean enabled_command = FALSE;
 		
-		hrs_cmd_entry = glade_helper_get (xml_commands, "hrs_cmd_path_entry",
-						  GTK_TYPE_ENTRY);
-		cust_cmd_entry  = glade_helper_get (xml_commands, "custom_cmd_path_entry",			
-						    GTK_TYPE_ENTRY);
-		status_label = glade_helper_get (xml_commands, "command_status_label", 
-						 GTK_TYPE_LABEL);
+		hrs_cmd_entry = glade_xml_get_widget (xml_commands, "hrs_cmd_path_entry");
+		cust_cmd_entry  = glade_xml_get_widget (xml_commands, "custom_cmd_path_entry");
+		status_label = glade_xml_get_widget (xml_commands, "command_status_label");
 
 		if (selected == HALT_CMD) {
 			val = gdm_config_get_string (GDM_KEY_HALT);		
@@ -1501,46 +1523,40 @@ combobox_timeout (GtkWidget *combo_box)
 			g_free (val);
 			
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_LABEL_TEMPLATE, i);
-			cust_cmd_label_entry  = glade_helper_get (xml_commands, "custom_cmd_label_entry", 
-								  GTK_TYPE_ENTRY);			
+			cust_cmd_label_entry  = glade_xml_get_widget (xml_commands, "custom_cmd_label_entry");
 			val = gdm_config_get_string (key_string);
 			gtk_entry_set_text (GTK_ENTRY (cust_cmd_label_entry), ve_sure_string (val));
 			g_free (key_string);
 			g_free (val);
 
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_LR_LABEL_TEMPLATE, i);
-			cust_cmd_lrlabel_entry  = glade_helper_get (xml_commands, "custom_cmd_lrlabel_entry",
-								    GTK_TYPE_ENTRY);			
+			cust_cmd_lrlabel_entry  = glade_xml_get_widget (xml_commands, "custom_cmd_lrlabel_entry");
 			val = gdm_config_get_string (key_string);
 			gtk_entry_set_text (GTK_ENTRY (cust_cmd_lrlabel_entry), ve_sure_string (val));
 			g_free (key_string);
 			g_free (val);
 
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_TEXT_TEMPLATE, i);
-			cust_cmd_text_entry  = glade_helper_get (xml_commands, "custom_cmd_text_entry",
-								 GTK_TYPE_ENTRY);			
+			cust_cmd_text_entry  = glade_xml_get_widget (xml_commands, "custom_cmd_text_entry");
 			val = gdm_config_get_string (key_string);
 			gtk_entry_set_text (GTK_ENTRY (cust_cmd_text_entry), ve_sure_string (val));
 			g_free (key_string);
 			g_free (val);
 			
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_TOOLTIP_TEMPLATE, i);
-			cust_cmd_tooltip_entry  = glade_helper_get (xml_commands, "custom_cmd_tooltip_entry",
-								    GTK_TYPE_ENTRY);			
+			cust_cmd_tooltip_entry  = glade_xml_get_widget (xml_commands, "custom_cmd_tooltip_entry");
 			val = gdm_config_get_string (key_string);
 			gtk_entry_set_text (GTK_ENTRY (cust_cmd_tooltip_entry), ve_sure_string (val));
 			g_free (key_string);
 			
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_NO_RESTART_TEMPLATE, i);
-			cust_cmd_norestart_checkbox  = glade_helper_get (xml_commands, "custom_cmd_norestart_checkbutton",
-								    GTK_TYPE_CHECK_BUTTON);
+			cust_cmd_norestart_checkbox  = glade_xml_get_widget (xml_commands, "custom_cmd_norestart_checkbutton");
 			bool_val = gdm_config_get_bool (key_string);
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cust_cmd_norestart_checkbox), bool_val);
 			g_free (key_string);
 			
 			key_string = g_strdup_printf(_("%s%d="), GDM_KEY_CUSTOM_CMD_IS_PERSISTENT_TEMPLATE, i);
-			cust_cmd_persistent_checkbox  = glade_helper_get (xml_commands, "custom_cmd_persistent_checkbutton",
-									 GTK_TYPE_CHECK_BUTTON);
+			cust_cmd_persistent_checkbox  = glade_xml_get_widget (xml_commands, "custom_cmd_persistent_checkbutton");
 			bool_val = gdm_config_get_bool (key_string);
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cust_cmd_persistent_checkbox), bool_val);
 			g_free (key_string);
@@ -1602,8 +1618,7 @@ list_selection_toggled (GtkWidget *toggl
 
 	val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
 
-	include_treeview  = glade_helper_get (xml, "fb_include_treeview",
-	                                      GTK_TYPE_TREE_VIEW);
+	include_treeview  = glade_xml_get_widget (xml, "fb_include_treeview");
 	include_model = gtk_tree_view_get_model (GTK_TREE_VIEW (include_treeview));
 	
 	selection = gtk_tree_view_get_selection (
@@ -1635,10 +1650,8 @@ combobox_changed (GtkWidget *combobox)
 		GtkWidget *local_themed_vbox;
 		gint selected;
 		
-		local_plain_vbox = glade_helper_get (xml, "local_plain_properties_vbox",
-		                                      GTK_TYPE_VBOX);
-		local_themed_vbox = glade_helper_get (xml, "local_themed_properties_vbox",
-		                                       GTK_TYPE_VBOX);
+		local_plain_vbox = glade_xml_get_widget (xml, "local_plain_properties_vbox");
+		local_themed_vbox = glade_xml_get_widget (xml, "local_themed_properties_vbox");
 
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (combobox));
 
@@ -1662,26 +1675,20 @@ combobox_changed (GtkWidget *combobox)
 		GtkWidget *configure_xdmcp_vbox;
 		GtkWidget *welcome_message_vbox;
 		gint selected;
-				
-		remote_plain_vbox = glade_helper_get (xml, "remote_plain_properties_vbox",
-				                      GTK_TYPE_VBOX);
-		remote_themed_vbox = glade_helper_get (xml, "remote_themed_properties_vbox",
-				                       GTK_TYPE_VBOX);
-		configure_xdmcp_vbox = glade_helper_get (xml, "remote_configure_xdmcp_vbox",
-		                                         GTK_TYPE_VBOX);
-		welcome_message_vbox = glade_helper_get (xml, "remote_welcome_message_vbox",
-		                                         GTK_TYPE_VBOX);
-		
+
+		remote_plain_vbox = glade_xml_get_widget (xml, "remote_plain_properties_vbox");
+		remote_themed_vbox = glade_xml_get_widget (xml, "remote_themed_properties_vbox");
+		configure_xdmcp_vbox = glade_xml_get_widget (xml, "remote_configure_xdmcp_vbox");
+		welcome_message_vbox = glade_xml_get_widget (xml, "remote_welcome_message_vbox");
+
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (combobox));
 
 		if (selected == REMOTE_DISABLED) {
 			GtkWidget *allowremoteauto;
 			GtkWidget *allowremoteroot;
-			
-			allowremoteauto = glade_helper_get (xml, "allowremoteauto",
-			                                    GTK_TYPE_CHECK_BUTTON);
-			allowremoteroot = glade_helper_get (xml, "allowremoteroot",
-			                                    GTK_TYPE_CHECK_BUTTON);
+
+			allowremoteauto = glade_xml_get_widget (xml, "allowremoteauto");
+			allowremoteroot = glade_xml_get_widget (xml, "allowremoteroot");
 
 			gtk_widget_set_sensitive (allowremoteauto, FALSE);
 			gtk_widget_set_sensitive (allowremoteroot, FALSE);
@@ -1696,12 +1703,9 @@ combobox_changed (GtkWidget *combobox)
 			GtkWidget *allowremoteauto;
 			GtkWidget *allowremoteroot;
 
-			timedlogin = glade_helper_get (xml, "timedlogin",
-			                               GTK_TYPE_CHECK_BUTTON);
-			allowremoteauto = glade_helper_get (xml, "allowremoteauto",
-			                                    GTK_TYPE_CHECK_BUTTON);
-			allowremoteroot = glade_helper_get (xml, "allowremoteroot",
-			                                    GTK_TYPE_CHECK_BUTTON);
+			timedlogin = glade_xml_get_widget (xml, "timedlogin");
+			allowremoteauto = glade_xml_get_widget (xml, "allowremoteauto");
+			allowremoteroot = glade_xml_get_widget (xml, "allowremoteroot");
 
 			gtk_widget_set_sensitive (allowremoteauto, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (timedlogin)));
 			gtk_widget_set_sensitive (allowremoteroot, TRUE);
@@ -1762,22 +1766,17 @@ combobox_changed (GtkWidget *combobox)
 		GtkTreeIter iter;
 		gint selected;
 				
-		theme_list = glade_helper_get (xml, "gg_theme_list",
-		                               GTK_TYPE_TREE_VIEW);
-		theme_list_remote = glade_helper_get (xml, "gg_theme_list_remote",
-		                                      GTK_TYPE_TREE_VIEW);
-		delete_button = glade_helper_get (xml, "gg_delete_theme",
-		                                  GTK_TYPE_BUTTON);
-		delete_button_remote = glade_helper_get (xml, "gg_delete_theme_remote",
-		                                         GTK_TYPE_BUTTON);
+		theme_list = glade_xml_get_widget (xml, "gg_theme_list");
+		theme_list_remote = glade_xml_get_widget (xml, "gg_theme_list_remote");
+		delete_button = glade_xml_get_widget (xml, "gg_delete_theme");
+		delete_button_remote = glade_xml_get_widget (xml, "gg_delete_theme_remote");
 
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (combobox));
 
 		if (gtk_notebook_get_current_page (GTK_NOTEBOOK (setup_notebook)) == LOCAL_TAB) {
 			GtkWidget *mode_combobox;
 			
-			mode_combobox = glade_helper_get (xml, "gg_mode_combobox_remote",
-			                                  GTK_TYPE_COMBO_BOX);
+			mode_combobox = glade_xml_get_widget (xml, "gg_mode_combobox_remote");
 			gtk_combo_box_set_active (GTK_COMBO_BOX (mode_combobox), selected);
 
 			if (mode_combobox != combobox) {
@@ -1788,17 +1787,16 @@ combobox_changed (GtkWidget *combobox)
 				   to be displayed only once */
 				
 				if (selected == RANDOM_THEME && ve_string_empty (selected_themes)) {
-					GtkWidget *setup_dialog = glade_helper_get(xml, 
-										   "setup_dialog", GTK_TYPE_WINDOW);
+					GtkWidget *setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 					
-					GtkWidget *warn_dlg = ve_hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
-										 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
-										 GTK_MESSAGE_WARNING,
-										 GTK_BUTTONS_OK,
-										 _("No themes selected!"),
-										 _("You need one or more themes selected for the "
-										   "\"Random from selected\" option to be valid. "
-										   "Failure to do so will force \"Selected only\" mode."));
+					GtkWidget *warn_dlg = hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
+									      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
+									      GTK_MESSAGE_WARNING,
+									      GTK_BUTTONS_OK,
+									      _("No themes selected!"),
+									      _("You need one or more themes selected for the "
+										"\"Random from selected\" option to be valid. "
+										"Failure to do so will force \"Selected only\" mode."));
 					gtk_dialog_run (GTK_DIALOG (warn_dlg));
 					gtk_widget_destroy (warn_dlg);
 					
@@ -1811,8 +1809,7 @@ combobox_changed (GtkWidget *combobox)
 		else {
 			GtkWidget *mode_combobox;
 			
-			mode_combobox = glade_helper_get (xml, "gg_mode_combobox",
-			                                  GTK_TYPE_COMBO_BOX);
+			mode_combobox = glade_xml_get_widget (xml, "gg_mode_combobox");
 			gtk_combo_box_set_active (GTK_COMBO_BOX (mode_combobox), selected);
 
 			if (mode_combobox != combobox) {
@@ -1822,18 +1819,17 @@ combobox_changed (GtkWidget *combobox)
 				   called multiple times and we want this warning 
 				   to be displayed only once */
 				if (selected == RANDOM_THEME && ve_string_empty (selected_themes)) {
-					GtkWidget *setup_dialog = glade_helper_get(xml, 
-										   "setup_dialog", GTK_TYPE_WINDOW);
+					GtkWidget *setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 					
-					GtkWidget *warn_dlg = ve_hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
-										 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
-										 GTK_MESSAGE_WARNING,
-										 GTK_BUTTONS_OK,
-										 _("No themes selected!"),
-										 _("You need one or more themes "
-										   "selected for the \"Random from selected\" "
-										   "option to be valid. Failure to do so will "
-										   "force \"Selected only\" mode."));
+					GtkWidget *warn_dlg = hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
+									      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
+									      GTK_MESSAGE_WARNING,
+									      GTK_BUTTONS_OK,
+									      _("No themes selected!"),
+									      _("You need one or more themes "
+										"selected for the \"Random from selected\" "
+										"option to be valid. Failure to do so will "
+										"force \"Selected only\" mode."));
 					gtk_dialog_run (GTK_DIALOG (warn_dlg));
 					gtk_widget_destroy (warn_dlg);
 					
@@ -1949,16 +1945,16 @@ combobox_changed (GtkWidget *combobox)
 			GtkWidget *apply_command;
 			gint response;
 			
-			setup_dialog = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
+			setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 			
-			prompt = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-						    GTK_DIALOG_MODAL |
-						    GTK_DIALOG_DESTROY_WITH_PARENT,
-						    GTK_MESSAGE_WARNING,
-						    GTK_BUTTONS_NONE,
-						    _("Apply changes to the modified command?"),
-						    _("If you don't apply, the changes "
-						      "will be discarded."));
+			prompt = hig_dialog_new (GTK_WINDOW (setup_dialog),
+						 GTK_DIALOG_MODAL |
+						 GTK_DIALOG_DESTROY_WITH_PARENT,
+						 GTK_MESSAGE_WARNING,
+						 GTK_BUTTONS_NONE,
+						 _("Apply changes to the modified command?"),
+						 _("If you don't apply, the changes "
+						   "will be discarded."));
 			
 			gtk_dialog_add_button (GTK_DIALOG (prompt), "gtk-cancel", GTK_RESPONSE_CANCEL); 
 			gtk_dialog_add_button (GTK_DIALOG (prompt), "gtk-apply", GTK_RESPONSE_APPLY);
@@ -1966,8 +1962,7 @@ combobox_changed (GtkWidget *combobox)
 			response = gtk_dialog_run (GTK_DIALOG (prompt));
 			gtk_widget_destroy (prompt);	       
 			
-			apply_command = glade_helper_get (xml_commands, "command_apply_button",
-							  GTK_TYPE_BUTTON);
+			apply_command = glade_xml_get_widget (xml_commands, "command_apply_button");
 			if (response == GTK_RESPONSE_APPLY)				
 				g_signal_emit_by_name (G_OBJECT (apply_command), "clicked");
 			
@@ -1979,10 +1974,8 @@ combobox_changed (GtkWidget *combobox)
 		
 		last_selected_command = selected;
 
-		hrs_cmd_vbox = glade_helper_get (xml_commands, "hrs_command_vbox",
-						 GTK_TYPE_VBOX);
-		custom_cmd_vbox = glade_helper_get (xml_commands, "custom_command_vbox",
-						      GTK_TYPE_VBOX);		
+		hrs_cmd_vbox = glade_xml_get_widget (xml_commands, "hrs_command_vbox");
+		custom_cmd_vbox = glade_xml_get_widget (xml_commands, "custom_command_vbox");
 		if (selected > SUSPEND_CMD) {
 			/* We are dealing with custom commands */							
 			gtk_widget_show (custom_cmd_vbox);
@@ -2065,7 +2058,7 @@ setup_notify_toggle (const char *name,
 	GtkWidget *toggle;
 	gboolean val;
 
-	toggle = glade_helper_get (xml, name, GTK_TYPE_TOGGLE_BUTTON);
+	toggle = glade_xml_get_widget (xml, name);
 	val    = gdm_config_get_bool ((gchar *)key);
 
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), val);
@@ -2079,10 +2072,8 @@ setup_notify_toggle (const char *name,
 		GtkWidget *config_available;
 		GtkWidget *chooser_button;
 		
-		config_available = glade_helper_get (xml, "config_available", 
-		                                     GTK_TYPE_CHECK_BUTTON);
-		chooser_button = glade_helper_get (xml, "chooser_button",
-		                                   GTK_TYPE_CHECK_BUTTON);
+		config_available = glade_xml_get_widget (xml, "config_available");
+		chooser_button = glade_xml_get_widget (xml, "chooser_button");
 
 		gtk_widget_set_sensitive (config_available, val);
 		gtk_widget_set_sensitive (chooser_button, val);
@@ -2099,11 +2090,9 @@ setup_notify_toggle (const char *name,
 		GtkWidget *autologin_label;
 		GtkWidget *autologin_combo;
 
-		autologin_label = glade_helper_get (xml, "autologin_label", 
-		                                    GTK_TYPE_LABEL);
-		autologin_combo = glade_helper_get (xml, "autologin_combo", 
-		                                    GTK_TYPE_COMBO_BOX);
-			
+		autologin_label = glade_xml_get_widget (xml, "autologin_label");
+		autologin_combo = glade_xml_get_widget (xml, "autologin_combo");
+
 		gtk_widget_set_sensitive (autologin_label, val);
 		gtk_widget_set_sensitive (autologin_combo, val);
 
@@ -2125,18 +2114,12 @@ setup_notify_toggle (const char *name,
 		GtkWidget *timedlogin_seconds_units;
 		GtkWidget *timedlogin_allow_remote;
 		
-		timedlogin_label = glade_helper_get (xml, "timed_login_label",
-		                                     GTK_TYPE_LABEL);
-		timedlogin_combo = glade_helper_get (xml, "timedlogin_combo",
-		                                     GTK_TYPE_COMBO_BOX);
-		timedlogin_seconds_label = glade_helper_get (xml, "timedlogin_seconds_label",
-		                                             GTK_TYPE_LABEL);
-		timedlogin_seconds_spin_button = glade_helper_get (xml,"timedlogin_seconds",
-		                                                   GTK_TYPE_SPIN_BUTTON);
-		timedlogin_seconds_units = glade_helper_get (xml,"timedlogin_seconds_units",
-		                                             GTK_TYPE_LABEL);
-		timedlogin_allow_remote = glade_helper_get (xml, "allowremoteauto",
-		                                            GTK_TYPE_CHECK_BUTTON);			
+		timedlogin_label = glade_xml_get_widget (xml, "timed_login_label");
+		timedlogin_combo = glade_xml_get_widget (xml, "timedlogin_combo");
+		timedlogin_seconds_label = glade_xml_get_widget (xml, "timedlogin_seconds_label");
+		timedlogin_seconds_spin_button = glade_xml_get_widget (xml,"timedlogin_seconds");
+		timedlogin_seconds_units = glade_xml_get_widget (xml,"timedlogin_seconds_units");
+		timedlogin_allow_remote = glade_xml_get_widget (xml, "allowremoteauto");
 
 		gtk_widget_set_sensitive (timedlogin_label, val);
 		gtk_widget_set_sensitive (timedlogin_combo, val);
@@ -2170,9 +2153,8 @@ setup_notify_toggle (const char *name,
 		/* This one is a lil bit back to front
 		   true is false and false is true */
 		GtkWidget *use_circles_in_passwd;
-		use_circles_in_passwd = glade_helper_get (xml, "use_circles_passwd_checkbox", 
-							  GTK_TYPE_CHECK_BUTTON);
-		
+		use_circles_in_passwd = glade_xml_get_widget (xml, "use_circles_passwd_checkbox");
+
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), !val);
 		gtk_widget_set_sensitive (use_circles_in_passwd, !val);
 		
@@ -2187,15 +2169,13 @@ setup_notify_toggle (const char *name,
 		GtkWidget *posx;
 		GtkWidget *posy;
 
-		posx =  glade_helper_get (xml, "local_posx_spinbutton", 
-					  GTK_TYPE_SPIN_BUTTON);
-		
-		posy =  glade_helper_get (xml, "local_posy_spinbutton", 
-					  GTK_TYPE_SPIN_BUTTON);
+		posx =  glade_xml_get_widget (xml, "local_posx_spinbutton");
+
+		posy =  glade_xml_get_widget (xml, "local_posy_spinbutton");
 
 		gtk_widget_set_sensitive (posx, val);
 		gtk_widget_set_sensitive (posy, val);
-		
+
 		g_signal_connect (G_OBJECT (toggle), "toggled",
 		                  G_CALLBACK (toggle_toggled), toggle);	
 		g_signal_connect (G_OBJECT (toggle), "toggled",
@@ -2208,11 +2188,8 @@ setup_notify_toggle (const char *name,
 		GtkWidget *posx;
 		GtkWidget *posy;
 
-		posx =  glade_helper_get (xml, "remote_posx_spinbutton", 
-					  GTK_TYPE_SPIN_BUTTON);
-		
-		posy =  glade_helper_get (xml, "remote_posy_spinbutton", 
-					  GTK_TYPE_SPIN_BUTTON);
+		posx =  glade_xml_get_widget (xml, "remote_posx_spinbutton");
+		posy =  glade_xml_get_widget (xml, "remote_posy_spinbutton");
 
 		gtk_widget_set_sensitive (posx, val);
 		gtk_widget_set_sensitive (posy, val);
@@ -2227,9 +2204,8 @@ setup_notify_toggle (const char *name,
 	else if (strcmp ("local_title_bar_checkbutton", ve_sure_string (name)) == 0) {
 		GtkWidget *lockpos;
 		
-		lockpos = glade_helper_get (xml, "local_lock_pos_checkbox", 
-					    GTK_TYPE_CHECK_BUTTON);
-		
+		lockpos = glade_xml_get_widget (xml, "local_lock_pos_checkbox");
+
 		gtk_widget_set_sensitive (lockpos, val);
 		
 		g_signal_connect (G_OBJECT (toggle), "toggled",
@@ -2240,9 +2216,8 @@ setup_notify_toggle (const char *name,
 	else if (strcmp ("remote_title_bar_checkbutton", ve_sure_string (name)) == 0) {
 		GtkWidget *lockpos;
 		
-		lockpos = glade_helper_get (xml, "remote_lock_pos_checkbox", 
-					    GTK_TYPE_CHECK_BUTTON);
-		
+		lockpos = glade_xml_get_widget (xml, "remote_lock_pos_checkbox");
+
 		gtk_widget_set_sensitive (lockpos, val);
 		
 		g_signal_connect (G_OBJECT (toggle), "toggled",
@@ -2253,9 +2228,8 @@ setup_notify_toggle (const char *name,
 	else if (strcmp ("disallow_tcp", ve_sure_string (name)) == 0) {
 		GtkWidget *nfs_cookies;
 		
-		nfs_cookies = glade_helper_get (xml, "never_cookies_NFS_checkbutton",
-					    GTK_TYPE_CHECK_BUTTON);
-		
+		nfs_cookies = glade_xml_get_widget (xml, "never_cookies_NFS_checkbutton");
+
 		gtk_widget_set_sensitive (nfs_cookies, !val);
 
 		g_signal_connect (G_OBJECT (toggle), "toggled",
@@ -2280,8 +2254,8 @@ commands_entry_timeout (GtkWidget *entry
 	const char  *key  = g_object_get_data (G_OBJECT (entry), "key");
 	const gchar *val  = gtk_entry_get_text (GTK_ENTRY (entry));
 	
-	apply_cmd_changes = glade_helper_get (xml_commands, "command_apply_button", GTK_TYPE_BUTTON);
-	command_combobox = glade_helper_get (xml_commands, "cmd_type_combobox", GTK_TYPE_COMBO_BOX);
+	apply_cmd_changes = glade_xml_get_widget (xml_commands, "command_apply_button");
+	command_combobox = glade_xml_get_widget (xml_commands, "cmd_type_combobox");
 	
 	selected = gtk_combo_box_get_active (GTK_COMBO_BOX (command_combobox));	
 
@@ -2349,7 +2323,7 @@ setup_commands_text_entry (const char *n
 {
 	GtkWidget *entry;
 
-	entry = glade_helper_get (xml_commands, name, GTK_TYPE_ENTRY);
+	entry = glade_xml_get_widget (xml_commands, name);
 	
 	g_object_set_data_full (G_OBJECT (entry),
 	                        "key", g_strdup (key),
@@ -2365,7 +2339,7 @@ setup_commands_notify_toggle (const char
 {
 	GtkWidget *toggle;
 	
-	toggle = glade_helper_get (xml_commands, name, GTK_TYPE_TOGGLE_BUTTON);
+	toggle = glade_xml_get_widget (xml_commands, name);
 	
 	g_object_set_data_full (G_OBJECT (toggle),
 	                        "key", g_strdup (key),
@@ -2383,7 +2357,7 @@ setup_xdmcp_notify_toggle (const char *n
 	GtkWidget *toggle;
 	gboolean val;
 
-	toggle = glade_helper_get (xml_xdmcp, name, GTK_TYPE_TOGGLE_BUTTON);
+	toggle = glade_xml_get_widget (xml_xdmcp, name);
 
 	val = gdm_config_get_bool ((gchar *)key);
 
@@ -2417,13 +2391,12 @@ root_not_allowed (GtkWidget *combo_box)
 
 	if ( ! ve_string_empty (text) &&
 	    strcmp (text, get_root_user ()) == 0) {
-		GtkWidget *dlg = 
-			ve_hig_dialog_new (NULL /* parent */,
-					   GTK_DIALOG_MODAL /* flags */,
-					   GTK_MESSAGE_ERROR,
-					   GTK_BUTTONS_OK,
-					   _("Autologin or timed login to the root account is not allowed."),
-					   "");
+		GtkWidget *dlg = hig_dialog_new (NULL /* parent */,
+						 GTK_DIALOG_MODAL /* flags */,
+						 GTK_MESSAGE_ERROR,
+						 GTK_BUTTONS_OK,
+						 _("Autologin or timed login to the root account is not allowed."),
+						 "");
 		if (RUNNING_UNDER_GDM)
 			setup_cursor (GDK_LEFT_PTR);
 		gtk_dialog_run (GTK_DIALOG (dlg));
@@ -2444,8 +2417,7 @@ static void
 setup_user_combobox_list (const char *name, const char *key)
 {
 	GtkListStore *combobox_store = NULL;
-	GtkWidget    *combobox_entry = glade_helper_get (xml, name,
-		GTK_TYPE_COMBO_BOX_ENTRY);
+	GtkWidget    *combobox_entry = glade_xml_get_widget (xml, name);
 	GtkTreeIter iter;
 	GList *users = NULL;
 	GList *users_string = NULL;
@@ -2499,7 +2471,7 @@ setup_user_combobox_list (const char *na
 static void
 setup_user_combobox (const char *name, const char *key)
 {
-	GtkWidget *combobox_entry = glade_helper_get (xml, name, GTK_TYPE_COMBO_BOX_ENTRY);
+	GtkWidget *combobox_entry = glade_xml_get_widget (xml, name);
 	setup_user_combobox_list (name, key);
 	g_object_set_data_full (G_OBJECT (combobox_entry), "key",
 	                        g_strdup (key), (GDestroyNotify) g_free);
@@ -2513,8 +2485,7 @@ static void
 setup_intspin (const char *name,
 	       const char *key)
 {
-	GtkWidget *spin = glade_helper_get (xml, name,
-					    GTK_TYPE_SPIN_BUTTON);
+	GtkWidget *spin = glade_xml_get_widget (xml, name);
 	int val = gdm_config_get_int ((gchar *)key);
 
 	g_object_set_data_full (G_OBJECT (spin),
@@ -2535,10 +2506,7 @@ setup_xdmcp_intspin (const char *name,
 	GtkWidget *spin;
 	int val = gdm_config_get_int ((gchar *)key);
 
-	spin = glade_helper_get (xml_xdmcp, 
-	                         name,
-	                         GTK_TYPE_SPIN_BUTTON);
-
+	spin = glade_xml_get_widget (xml_xdmcp, name);
 
 	g_object_set_data_full (G_OBJECT (spin),
 				"key", g_strdup (key),
@@ -2633,8 +2601,7 @@ face_add (FaceData *fd)
 	GtkTreeIter iter;
 	gboolean valid;
 
-	user_entry = glade_helper_get (xml_add_users, "fb_addentry",
-	                               GTK_TYPE_ENTRY);
+	user_entry = glade_xml_get_widget (xml_add_users, "fb_addentry");
 	text = gtk_entry_get_text (GTK_ENTRY (user_entry));
 
 	if (gdm_is_user_valid (text)) {
@@ -2649,16 +2616,14 @@ face_add (FaceData *fd)
 				
 				str = g_strdup_printf (_("The \"%s\" user already exists in the include list."), text); 
 				
-				setup_dialog = glade_helper_get (xml_add_users, "add_user_dialog",
-				                                 GTK_TYPE_WINDOW);
-				
-				dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-				                            GTK_DIALOG_MODAL | 
-				                            GTK_DIALOG_DESTROY_WITH_PARENT,
-				                            GTK_MESSAGE_ERROR,
-				                            GTK_BUTTONS_OK,
-				                            _("Cannot add user"),
-				                            str);
+				setup_dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
+				dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+							 GTK_DIALOG_MODAL | 
+							 GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_ERROR,
+							 GTK_BUTTONS_OK,
+							 _("Cannot add user"),
+							 str);
 				gtk_dialog_run (GTK_DIALOG (dialog));
 				gtk_widget_destroy (dialog);
 				g_free (str);				
@@ -2679,16 +2644,14 @@ face_add (FaceData *fd)
 				
 				str = g_strdup_printf (_("The \"%s\" user already exists in the exclude list."), text); 
 				
-				setup_dialog = glade_helper_get (xml_add_users, "add_user_dialog",
-				                                 GTK_TYPE_WINDOW);
-				
-				dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-				                            GTK_DIALOG_MODAL | 
-				                            GTK_DIALOG_DESTROY_WITH_PARENT,
-				                            GTK_MESSAGE_ERROR,
-				                            GTK_BUTTONS_OK,
-				                            _("Cannot add user"),
-				                            str);
+				setup_dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
+				dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+							 GTK_DIALOG_MODAL | 
+							 GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_ERROR,
+							 GTK_BUTTONS_OK,
+							 _("Cannot add user"),
+							 str);
 				gtk_dialog_run (GTK_DIALOG (dialog));
 				gtk_widget_destroy (dialog);
 				g_free (str);	
@@ -2708,16 +2671,14 @@ face_add (FaceData *fd)
 				
 				str = g_strdup_printf (_("The \"%s\" user UID is lower than allowed MinimalUID."), text); 
 				
-				setup_dialog = glade_helper_get (xml_add_users, "add_user_dialog",
-								 GTK_TYPE_WINDOW);
-				
-				dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-							    GTK_DIALOG_MODAL | 
-							    GTK_DIALOG_DESTROY_WITH_PARENT,
-							    GTK_MESSAGE_ERROR,
-							    GTK_BUTTONS_OK,
-							    _("Cannot add user"),
-							    str);
+				setup_dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
+				dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+							 GTK_DIALOG_MODAL | 
+							 GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_ERROR,
+							 GTK_BUTTONS_OK,
+							 _("Cannot add user"),
+							 str);
 				gtk_dialog_run (GTK_DIALOG (dialog));
 				gtk_widget_destroy (dialog);
 				g_free (str);
@@ -2740,16 +2701,14 @@ face_add (FaceData *fd)
 		
 		str = g_strdup_printf (_("The \"%s\" user does not exist."), text); 
 			
-		setup_dialog = glade_helper_get (xml_add_users, "add_user_dialog",
-		                                 GTK_TYPE_WINDOW);
-				
-		dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-		                            GTK_DIALOG_MODAL | 
-		                            GTK_DIALOG_DESTROY_WITH_PARENT,
-		                            GTK_MESSAGE_ERROR,
-		                            GTK_BUTTONS_OK,
-		                            _("Cannot add user"),
-		                            str);
+		setup_dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
+		dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Cannot add user"),
+					 str);
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 		g_free (str);
@@ -2816,16 +2775,14 @@ browser_move (GtkWidget *button, gpointe
 				
 				str = g_strdup_printf (_("The \"%s\" user UID is lower than allowed MinimalUID."), text); 
 				
-				setup_dialog = glade_helper_get (xml_add_users, "add_user_dialog",
-								 GTK_TYPE_WINDOW);
-				
-				dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-							    GTK_DIALOG_MODAL | 
-							    GTK_DIALOG_DESTROY_WITH_PARENT,
-							    GTK_MESSAGE_ERROR,
-							    GTK_BUTTONS_OK,
-							    _("Cannot add user"),
-							    str);
+				setup_dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
+				dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+							 GTK_DIALOG_MODAL | 
+							 GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_ERROR,
+							 GTK_BUTTONS_OK,
+							 _("Cannot add user"),
+							 str);
 				gtk_dialog_run (GTK_DIALOG (dialog));
 				gtk_widget_destroy (dialog);
 				g_free (str);
@@ -2887,14 +2844,10 @@ command_apply (GtkWidget *button, gpoint
 	selected = gtk_combo_box_get_active (GTK_COMBO_BOX (command_combobox));
 	
 	if (last_selected_command < CUSTOM_CMD)
-		cmd_path_entry = glade_helper_get (xml_commands,
-						   "hrs_cmd_path_entry",
-						   GTK_TYPE_ENTRY);	
+		cmd_path_entry = glade_xml_get_widget (xml_commands, "hrs_cmd_path_entry");
 	else
-		cmd_path_entry = glade_helper_get (xml_commands,
-						   "custom_cmd_path_entry",
-						   GTK_TYPE_ENTRY);	
-	
+		cmd_path_entry = glade_xml_get_widget (xml_commands, "custom_cmd_path_entry");
+
 	command = gtk_entry_get_text (GTK_ENTRY (cmd_path_entry));
 	
 	command_exists = ve_string_empty (command) || gdm_working_command_exists (command);
@@ -2904,16 +2857,16 @@ command_apply (GtkWidget *button, gpoint
 					     (GHRFunc) unsaved_data_from_hash_table_func, NULL);
 	
 	else {
-		GtkWidget *parent = glade_helper_get (xml_commands, "commands_dialog", GTK_TYPE_WINDOW);
+		GtkWidget *parent = glade_xml_get_widget (xml_commands, "commands_dialog");
 
-		GtkWidget *dialog = ve_hig_dialog_new (GTK_WINDOW (parent),
-						       GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-						       GTK_MESSAGE_ERROR,
-						       GTK_BUTTONS_OK,
-						       _("Invalid command path"),
-						       _("The path you provided for this "
-							 "command is not valid. The changes "
-							 "will not be saved."));
+		GtkWidget *dialog = hig_dialog_new (GTK_WINDOW (parent),
+						    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+						    GTK_MESSAGE_ERROR,
+						    GTK_BUTTONS_OK,
+						    _("Invalid command path"),
+						    _("The path you provided for this "
+						      "command is not valid. The changes "
+						      "will not be saved."));
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 	}
@@ -2972,17 +2925,17 @@ browser_apply (GtkWidget *button, gpoint
 		GtkWidget *setup_dialog;
 		GtkWidget *dlg;
 		
-		setup_dialog = glade_helper_get(xml, "setup_dialog", GTK_TYPE_WINDOW);
+		setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 		
 		//Inform user about the change
-		dlg = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-					 GTK_MESSAGE_WARNING,
-					 GTK_BUTTONS_OK,
-					 _("Users include list modification"),
-					 _("Some of the users had uid lower than "
-					   "MinimalUID (Security tab) and "
-					   "could not be added."));
+		dlg = hig_dialog_new (GTK_WINDOW (setup_dialog),
+				      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+				      GTK_MESSAGE_WARNING,
+				      GTK_BUTTONS_OK,
+				      _("Users include list modification"),
+				      _("Some of the users had uid lower than "
+					"MinimalUID (Security tab) and "
+					"could not be added."));
 		gtk_dialog_run (GTK_DIALOG (dlg));
 		gtk_widget_destroy (dlg);						
 		
@@ -3099,15 +3052,14 @@ users_add_button_clicked (GtkWidget *but
 	GtkWidget *parent;
 	
 	if (dialog == NULL) {
-		parent = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-		dialog = glade_helper_get (xml_add_users, "add_user_dialog", GTK_TYPE_DIALOG);
+		parent = glade_xml_get_widget (xml, "setup_dialog");
+		dialog = glade_xml_get_widget (xml_add_users, "add_user_dialog");
 
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
 		gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
 	}
 
-	user_entry = glade_helper_get (xml_add_users, "fb_addentry",
-	                               GTK_TYPE_ENTRY); 
+	user_entry = glade_xml_get_widget (xml_add_users, "fb_addentry");
 
 	gtk_widget_grab_focus (user_entry);
 	
@@ -3127,26 +3079,16 @@ setup_face (void)
 
 	GtkTreeSelection *selection;
 
-	fc.include_add       = glade_helper_get (xml, "fb_includeadd",
-	                                         GTK_TYPE_WIDGET);
-	fc.include_del       = glade_helper_get (xml, "fb_includedelete",
-	                                         GTK_TYPE_WIDGET);
-	fc.exclude_add       = glade_helper_get (xml, "fb_excludeadd",
-	                                         GTK_TYPE_WIDGET);
-	fc.exclude_del       = glade_helper_get (xml, "fb_excludedelete",
-	                                         GTK_TYPE_WIDGET);
-	fc.to_include_button = glade_helper_get (xml, "fb_toinclude",
-	                                         GTK_TYPE_WIDGET);
-	fc.to_exclude_button = glade_helper_get (xml, "fb_toexclude",
-	                                         GTK_TYPE_WIDGET);
-	fc.apply             = glade_helper_get (xml, "fb_faceapply",
-	                                         GTK_TYPE_WIDGET);
-	fc.include_treeview  = glade_helper_get (xml, "fb_include_treeview",
-	                                         GTK_TYPE_TREE_VIEW);
-	fc.exclude_treeview  = glade_helper_get (xml, "fb_exclude_treeview",
-	                                         GTK_TYPE_TREE_VIEW);
-	fc.allusers          = glade_helper_get (xml, "fb_allusers",
-	                                         GTK_TYPE_TOGGLE_BUTTON);
+	fc.include_add       = glade_xml_get_widget (xml, "fb_includeadd");
+	fc.include_del       = glade_xml_get_widget (xml, "fb_includedelete");
+	fc.exclude_add       = glade_xml_get_widget (xml, "fb_excludeadd");
+	fc.exclude_del       = glade_xml_get_widget (xml, "fb_excludedelete");
+	fc.to_include_button = glade_xml_get_widget (xml, "fb_toinclude");
+	fc.to_exclude_button = glade_xml_get_widget (xml, "fb_toexclude");
+	fc.apply             = glade_xml_get_widget (xml, "fb_faceapply");
+	fc.include_treeview  = glade_xml_get_widget (xml, "fb_include_treeview");
+	fc.exclude_treeview  = glade_xml_get_widget (xml, "fb_exclude_treeview");
+	fc.allusers          = glade_xml_get_widget (xml, "fb_allusers");
 
 	fc.include_store = setup_include_exclude (fc.include_treeview,
 	                                          GDM_KEY_INCLUDE);
@@ -3173,10 +3115,7 @@ setup_face (void)
 	face_apply.include = &fd_include;
 	face_apply.exclude = &fd_exclude;
 
-	xml_add_users = glade_helper_load ("gdmsetup.glade",
-	                                   "add_user_dialog",
-	                                   GTK_TYPE_DIALOG,
-	                                   TRUE);
+	xml_add_users = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "add_user_dialog", NULL);
 
 	g_signal_connect (G_OBJECT (fc.include_add), "clicked",
 	                  G_CALLBACK (users_add_button_clicked), &fd_include);
@@ -3240,8 +3179,7 @@ greeter_toggle_timeout (GtkWidget *toggl
 
 				GtkWidget *checkbutton;
 		
-				checkbutton = glade_helper_get (xml, "sg_scale_background_remote",
-				                                GTK_TYPE_CHECK_BUTTON);	
+				checkbutton = glade_xml_get_widget (xml, "sg_scale_background_remote");
 
 				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton),
 				                              GTK_TOGGLE_BUTTON (toggle)->active);
@@ -3249,8 +3187,7 @@ greeter_toggle_timeout (GtkWidget *toggl
 			else {
 				GtkWidget *checkbutton;
 			
-				checkbutton = glade_helper_get (xml, "sg_scale_background", 
-				                               GTK_TYPE_CHECK_BUTTON);
+				checkbutton = glade_xml_get_widget (xml, "sg_scale_background");
 
 				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton),
 				                              GTK_TOGGLE_BUTTON (toggle)->active);	
@@ -3300,19 +3237,11 @@ local_background_type_toggle_timeout (Gt
 	gboolean image_value;
 	gboolean color_value;
 
-	image_radiobutton = glade_helper_get (xml, 
-	                                      "local_background_image_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-	color_radiobutton = glade_helper_get (xml, 
-	                                      "local_background_color_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-	image_remote_radiobutton = glade_helper_get (xml, 
-	                                             "remote_background_image_checkbutton",
-	                                             GTK_TYPE_CHECK_BUTTON);
-	color_remote_radiobutton = glade_helper_get (xml, 
-	                                             "remote_background_color_checkbutton",
-	                                             GTK_TYPE_CHECK_BUTTON);
-	
+	image_radiobutton = glade_xml_get_widget (xml, "local_background_image_checkbutton");
+	color_radiobutton = glade_xml_get_widget (xml, "local_background_color_checkbutton");
+	image_remote_radiobutton = glade_xml_get_widget (xml, "remote_background_image_checkbutton");
+	color_remote_radiobutton = glade_xml_get_widget (xml, "remote_background_color_checkbutton");
+
 	if (gtk_notebook_get_current_page (GTK_NOTEBOOK (setup_notebook)) == LOCAL_TAB) {
 		image_value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (image_radiobutton));
 		color_value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (color_radiobutton));
@@ -3357,8 +3286,7 @@ static void
 setup_greeter_toggle (const char *name,
 		      const char *key)
 {
-	GtkWidget *toggle = glade_helper_get (xml, name,
-	      GTK_TYPE_TOGGLE_BUTTON);
+	GtkWidget *toggle = glade_xml_get_widget (xml, name);
 	gboolean val = gdm_config_get_bool ((gchar *)key);
 
 	g_object_set_data_full (G_OBJECT (toggle), "key", g_strdup (key),
@@ -3367,10 +3295,8 @@ setup_greeter_toggle (const char *name,
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), val);
 
 	if (strcmp ("sg_defaultwelcome", ve_sure_string (name)) == 0) {
-		GtkWidget *welcome = glade_helper_get (xml,
-			"welcome", GTK_TYPE_ENTRY);
-		GtkWidget *custom = glade_helper_get (xml, "sg_customwelcome",
-		                                      GTK_TYPE_RADIO_BUTTON);
+		GtkWidget *welcome = glade_xml_get_widget (xml, "welcome");
+		GtkWidget *custom = glade_xml_get_widget (xml, "sg_customwelcome");
 
 		gtk_widget_set_sensitive (welcome, !val);
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (custom), !val);
@@ -3379,10 +3305,8 @@ setup_greeter_toggle (const char *name,
 			G_CALLBACK (sensitive_entry_toggled), welcome);
 
 	} else if (strcmp ("sg_defaultwelcomeremote", ve_sure_string (name)) == 0) {
-		GtkWidget *welcomeremote = glade_helper_get (xml,
-			"welcomeremote", GTK_TYPE_ENTRY);
-		GtkWidget *customremote = glade_helper_get (xml, "sg_customwelcomeremote",
-		                                            GTK_TYPE_RADIO_BUTTON);
+		GtkWidget *welcomeremote = glade_xml_get_widget (xml, "welcomeremote");
+		GtkWidget *customremote = glade_xml_get_widget (xml, "sg_customwelcomeremote");
 
 		gtk_widget_set_sensitive (welcomeremote, !val);
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (customremote), !val);
@@ -3392,17 +3316,12 @@ setup_greeter_toggle (const char *name,
 	
 	} else if (strcmp ("fb_allusers", ve_sure_string (name)) == 0) {
 
-		GtkWidget *fb_includetree = glade_helper_get (xml, "fb_include_treeview", 
-		                                              GTK_TYPE_TREE_VIEW);
-		GtkWidget *fb_buttonbox = glade_helper_get (xml, "UsersButtonBox", 
-		                                            GTK_TYPE_VBOX);
-		GtkWidget *fb_includeadd = glade_helper_get (xml, "fb_includeadd",
-		                                             GTK_TYPE_BUTTON);
-		GtkWidget *fb_includeremove = glade_helper_get (xml, "fb_includedelete", 
-		                                                GTK_TYPE_BUTTON);
-		GtkWidget *fb_includelabel = glade_helper_get (xml, "fb_includelabel",
-		                                               GTK_TYPE_LABEL);
-			
+		GtkWidget *fb_includetree = glade_xml_get_widget (xml, "fb_include_treeview");
+		GtkWidget *fb_buttonbox = glade_xml_get_widget (xml, "UsersButtonBox");
+		GtkWidget *fb_includeadd = glade_xml_get_widget (xml, "fb_includeadd");
+		GtkWidget *fb_includeremove = glade_xml_get_widget (xml, "fb_includedelete");
+		GtkWidget *fb_includelabel = glade_xml_get_widget (xml, "fb_includelabel");
+
 		gtk_widget_set_sensitive (fb_buttonbox, !val);
 		gtk_widget_set_sensitive (fb_includetree, !val);
 		gtk_widget_set_sensitive (fb_includelabel, !val);
@@ -3423,13 +3342,9 @@ setup_greeter_toggle (const char *name,
 		GtkWidget *file_chooser;
 		GtkWidget *play_button;
 		
-		file_chooser = glade_helper_get (xml, 
-		                                 "acc_sound_ready_button", 
-				                 GTK_TYPE_FILE_CHOOSER_BUTTON);
-		play_button = glade_helper_get (xml, 
-		                                 "acc_soundtest_ready_button", 
-				                 GTK_TYPE_BUTTON);
-						 
+		file_chooser = glade_xml_get_widget (xml, "acc_sound_ready_button");
+		play_button = glade_xml_get_widget (xml, "acc_soundtest_ready_button");
+
 		gtk_widget_set_sensitive (file_chooser, val);
 		gtk_widget_set_sensitive (play_button, val);
 		
@@ -3441,11 +3356,9 @@ setup_greeter_toggle (const char *name,
 		GtkWidget *file_chooser;
 		GtkWidget *play_button;
 		
-		file_chooser = glade_helper_get (xml, "acc_sound_success_button", 
-				                 GTK_TYPE_FILE_CHOOSER_BUTTON);
-		play_button = glade_helper_get (xml, "acc_soundtest_success_button", 
-				                GTK_TYPE_BUTTON);
-						 
+		file_chooser = glade_xml_get_widget (xml, "acc_sound_success_button");
+		play_button = glade_xml_get_widget (xml, "acc_soundtest_success_button");
+
 		gtk_widget_set_sensitive (file_chooser, val);
 		gtk_widget_set_sensitive (play_button, val);
 		
@@ -3457,11 +3370,9 @@ setup_greeter_toggle (const char *name,
 		GtkWidget *file_chooser;
 		GtkWidget *play_button;
 		
-		file_chooser = glade_helper_get (xml, "acc_sound_failure_button", 
-				                 GTK_TYPE_FILE_CHOOSER_BUTTON);
-		play_button = glade_helper_get (xml, "acc_soundtest_failure_button", 
-				                GTK_TYPE_BUTTON);
-						 
+		file_chooser = glade_xml_get_widget (xml, "acc_sound_failure_button");
+		play_button = glade_xml_get_widget (xml, "acc_soundtest_failure_button");
+
 		gtk_widget_set_sensitive (file_chooser, val);
 		gtk_widget_set_sensitive (play_button, val);
 		
@@ -3474,15 +3385,12 @@ setup_greeter_toggle (const char *name,
 		GtkWidget *file_chooser_remote;
 		GtkWidget *checkbutton;
 		
-		checkbutton = glade_helper_get (xml, "remote_logo_image_checkbutton",
-						GTK_TYPE_CHECK_BUTTON);
-						
-		file_chooser = glade_helper_get (xml, "local_logo_image_chooserbutton", 
-				                 GTK_TYPE_FILE_CHOOSER_BUTTON);
+		checkbutton = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
+
+		file_chooser = glade_xml_get_widget (xml, "local_logo_image_chooserbutton");
+
+		file_chooser_remote = glade_xml_get_widget (xml, "remote_logo_image_chooserbutton");
 
-		file_chooser_remote = glade_helper_get (xml, "remote_logo_image_chooserbutton", 
-				                        GTK_TYPE_FILE_CHOOSER_BUTTON);
-						 
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), val);
 		gtk_widget_set_sensitive (file_chooser, val);
 
@@ -3508,12 +3416,9 @@ greeter_color_timeout (GtkWidget *picker
 		GtkWidget *colorbutton;
 		
 		if (strcmp (GDM_KEY_GRAPHICAL_THEMED_COLOR, ve_sure_string (key)) == 0) {
-			colorbutton = glade_helper_get (xml, "remote_background_theme_colorbutton",
-	       		                                GTK_TYPE_COLOR_BUTTON);
-		}
-		else {
-			colorbutton = glade_helper_get (xml, "remote_background_colorbutton",
-	       		                                GTK_TYPE_COLOR_BUTTON);
+			colorbutton = glade_xml_get_widget (xml, "remote_background_theme_colorbutton");
+		} else {
+			colorbutton = glade_xml_get_widget (xml, "remote_background_colorbutton");
 		}
 		gtk_color_button_set_color (GTK_COLOR_BUTTON (colorbutton), &color_val);
 	}
@@ -3521,12 +3426,9 @@ greeter_color_timeout (GtkWidget *picker
 		GtkWidget *colorbutton;
 
 		if (strcmp (GDM_KEY_GRAPHICAL_THEMED_COLOR, ve_sure_string (key)) == 0) {
-			colorbutton = glade_helper_get (xml, "local_background_theme_colorbutton",
-	       		                                GTK_TYPE_COLOR_BUTTON);
-		}
-		else {
-			colorbutton = glade_helper_get (xml, "local_background_colorbutton",
-	       		                                GTK_TYPE_COLOR_BUTTON);
+			colorbutton = glade_xml_get_widget (xml, "local_background_theme_colorbutton");
+		} else {
+			colorbutton = glade_xml_get_widget (xml, "local_background_colorbutton");
 		}
 		gtk_color_button_set_color (GTK_COLOR_BUTTON (colorbutton), &color_val);
 	}
@@ -3559,8 +3461,7 @@ static void
 setup_greeter_color (const char *name,
 		     const char *key)
 {
-	GtkWidget *picker = glade_helper_get (xml, name,
-					      GTK_TYPE_COLOR_BUTTON);
+	GtkWidget *picker = glade_xml_get_widget (xml, name);
 	char *val = gdm_config_get_string ((gchar *)key);
 
 	g_object_set_data_full (G_OBJECT (picker),
@@ -3569,7 +3470,7 @@ setup_greeter_color (const char *name,
 
         if (val != NULL) {
 		GdkColor color;
-		
+
 		if (gdk_color_parse (val, &color)) {
 			gtk_color_button_set_color (GTK_COLOR_BUTTON (picker), &color);
 		}
@@ -3597,16 +3498,42 @@ typedef struct _ImageData {
 static gboolean
 greeter_entry_untranslate_timeout (GtkWidget *entry)
 {
-	VeConfig   *custom_cfg = ve_config_get (custom_config_file);
-	const char *key        = g_object_get_data (G_OBJECT (entry), "key");
+	GKeyFile   *custom_cfg;
+	const char *key;
 	const char *text;
+	char       *config_group;
+	char       *config_key;
+	int         i;
+	char       *prefix;
+	char      **keys;
+
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+        key = g_object_get_data (G_OBJECT (entry), "key");
 
 	text = gtk_entry_get_text (GTK_ENTRY (entry));
 
-	ve_config_delete_translations (custom_cfg, key);
+	config_group = config_key = NULL;
+	if (! gdm_common_config_parse_key_string (key, &config_group, &config_key, NULL)) {
+		goto out;
+	}
+
+	prefix = g_strdup_printf ("%s[", config_key);
+	keys = g_key_file_get_keys (custom_cfg, config_group, NULL, NULL);
+	for (i = 0; keys[i] != NULL; i++) {
+		if (g_str_has_prefix (keys[i], prefix)) {
+			g_key_file_remove_key (custom_cfg, config_group, keys[i], NULL);
+		}
+	}
+	g_strfreev (keys);
+
 	gdm_setup_config_set_string (key, (char *)ve_sure_string (text));
 	update_greeters ();
 
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+
+ out:
+	g_key_file_free (custom_cfg);
+
 	return FALSE;
 }
 
@@ -3632,7 +3559,7 @@ command_response (GtkWidget *button, gpo
 	GtkWidget *command_entry = NULL;
 	gint selected;
 	
-	setup_dialog = glade_helper_get (xml_commands, "commands_dialog", GTK_TYPE_WINDOW);
+	setup_dialog = glade_xml_get_widget (xml_commands, "commands_dialog");
 	
 	/* first get the file */
 	chooser = gtk_file_chooser_dialog_new (_("Select Command"),
@@ -3656,13 +3583,13 @@ command_response (GtkWidget *button, gpo
 		
 		GtkWidget *dialog;
 		
-		dialog = ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-					    GTK_DIALOG_MODAL | 
-					    GTK_DIALOG_DESTROY_WITH_PARENT,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("No file selected"),
-					    "");
+		dialog = hig_dialog_new (GTK_WINDOW (setup_dialog),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("No file selected"),
+					 "");
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 		return;
@@ -3674,10 +3601,8 @@ command_response (GtkWidget *button, gpo
 	   append the chosen filepath onto the existing
 	   string */
 	
-	command_combobox = glade_helper_get (xml_commands, 
-					     "cmd_type_combobox",
-					     GTK_TYPE_COMBO_BOX);
-	
+	command_combobox = glade_xml_get_widget (xml_commands, "cmd_type_combobox");
+
 	selected = gtk_combo_box_get_active (GTK_COMBO_BOX (command_combobox));
 	
 	if (selected == HALT_CMD)
@@ -3699,12 +3624,10 @@ command_response (GtkWidget *button, gpo
 	
 	value = strings_list_add (value, filename, ";");
 	
-	if (strcmp (ve_sure_string (key), "add_hrs_cmd_button") == 0)				
-		command_entry = glade_helper_get (xml_commands, "hrs_cmd_path_entry", GTK_TYPE_ENTRY);		
-	
-	else if (strcmp (ve_sure_string (key), "add_custom_cmd_button") == 0)				
-		command_entry = glade_helper_get (xml_commands, "custom_cmd_path_entry", GTK_TYPE_ENTRY);		
-			       
+	if (strcmp (ve_sure_string (key), "add_hrs_cmd_button") == 0)
+		command_entry = glade_xml_get_widget (xml_commands, "hrs_cmd_path_entry");
+	else if (strcmp (ve_sure_string (key), "add_custom_cmd_button") == 0)
+		command_entry = glade_xml_get_widget (xml_commands, "custom_cmd_path_entry");
 
 	gtk_entry_set_text (GTK_ENTRY (command_entry), ve_sure_string (value));
 
@@ -3750,7 +3673,7 @@ static void
 setup_general_command_buttons (const char *name,
 			       const char *key)
 {
-	GtkWidget *button = glade_helper_get (xml_commands, name, GTK_TYPE_BUTTON);
+	GtkWidget *button = glade_xml_get_widget (xml_commands, name);
 	
 	g_object_set_data_full (G_OBJECT (button),
 				"key", g_strdup (key),
@@ -3764,7 +3687,7 @@ static void
 setup_greeter_untranslate_entry (const char *name,
 				 const char *key)
 {
-	GtkWidget *entry = glade_helper_get (xml, name, GTK_TYPE_ENTRY);
+	GtkWidget *entry = glade_xml_get_widget (xml, name);
 	char *val;
 
 	val = gdm_config_get_translated_string ((gchar *)key);
@@ -3792,13 +3715,10 @@ xdmcp_button_clicked (void)
 
 		GtkWidget *parent;
 
-		xml_xdmcp = glade_helper_load ("gdmsetup.glade",
-		                               "xdmcp_dialog",
-		                               GTK_TYPE_DIALOG,
-		                               TRUE);
-	
-		parent = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-		dialog = glade_helper_get (xml_xdmcp, "xdmcp_dialog", GTK_TYPE_DIALOG);
+		xml_xdmcp = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "xdmcp_dialog", NULL);
+
+		parent = glade_xml_get_widget (xml, "setup_dialog");
+		dialog = glade_xml_get_widget (xml_xdmcp, "xdmcp_dialog");
 
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
 		gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
@@ -3829,13 +3749,13 @@ apply_command_changes (GObject *object, 
 		GtkWidget *prompt;
 		gint response;
 
-		prompt = ve_hig_dialog_new (GTK_WINDOW (dialog),
-		                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-		                            GTK_MESSAGE_WARNING,
-		                            GTK_BUTTONS_NONE,
-		                            _("Apply the changes to commands before closing?"),
-		                            _("If you don't apply, the changes made "
-		                              "will be disregarded."));
+		prompt = hig_dialog_new (GTK_WINDOW (dialog),
+					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_WARNING,
+					 GTK_BUTTONS_NONE,
+					 _("Apply the changes to commands before closing?"),
+					 _("If you don't apply, the changes made "
+					   "will be disregarded."));
 		
 		gtk_dialog_add_button (GTK_DIALOG (prompt), _("Close _without Applying"), GTK_RESPONSE_CLOSE);
 		gtk_dialog_add_button (GTK_DIALOG (prompt), "gtk-apply", GTK_RESPONSE_APPLY);
@@ -3846,8 +3766,7 @@ apply_command_changes (GObject *object, 
 		if (response == GTK_RESPONSE_APPLY) {
 			GtkWidget *apply_button;
 
-			apply_button = glade_helper_get (xml_commands, "command_apply_button",
-							 GTK_TYPE_WIDGET);
+			apply_button = glade_xml_get_widget (xml_commands, "command_apply_button");
 			g_signal_emit_by_name (G_OBJECT (apply_button), "clicked");
 		}
 		else {
@@ -3858,6 +3777,28 @@ apply_command_changes (GObject *object, 
 	}
 }
 
+/* Make label surrounded by tag (if tag = "tag" add <tag>text</tag>) */
+static void
+glade_helper_tagify_label (GladeXML *xml,
+			   const char *name,
+			   const char *tag)
+{
+	const char *lbl;
+	char *s;
+	GtkWidget *label;
+
+	label = glade_xml_get_widget (xml, name);
+	if (GTK_IS_BUTTON (label)) {
+		label = GTK_BIN(label)->child;
+	}
+
+	lbl = gtk_label_get_label (GTK_LABEL (label));
+	s = g_strdup_printf ("<%s>%s</%s>", tag, lbl, tag);
+	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+	gtk_label_set_label (GTK_LABEL (label), s);
+	g_free (s);
+}
+
 static void
 command_button_clicked (void)
 {
@@ -3866,20 +3807,15 @@ command_button_clicked (void)
 	gint selected = -1;
 	gint response;
 
-	if (dialog == NULL) {		
+	if (dialog == NULL) {
 
 		GtkWidget *parent;
-		GtkWidget *apply_command_changes_button;		
+		GtkWidget *apply_command_changes_button;
 		gint i;
 
-		xml_commands = glade_helper_load ("gdmsetup.glade",
-						  "commands_dialog",
-						  GTK_TYPE_DIALOG,
-						  TRUE);
-		
-		command_chooser = glade_helper_get (xml_commands, 
-						    "cmd_type_combobox",
-						    GTK_TYPE_COMBO_BOX);
+		xml_commands = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "commands_dialog", NULL);
+
+		command_chooser = glade_xml_get_widget (xml_commands, "cmd_type_combobox");
 
 		glade_helper_tagify_label (xml_commands, "custom_cmd_note_label", "i");
 		glade_helper_tagify_label (xml_commands, "custom_cmd_note_label", "small");
@@ -3901,8 +3837,8 @@ command_button_clicked (void)
 		glade_helper_tagify_label (xml_commands, "norestart_label", "i");
 		glade_helper_tagify_label (xml_commands, "norestart_label", "small");
 	
-		parent = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-		dialog = glade_helper_get (xml_commands, "commands_dialog", GTK_TYPE_DIALOG);
+		parent = glade_xml_get_widget (xml, "setup_dialog");
+		dialog = glade_xml_get_widget (xml_commands, "commands_dialog");
 		
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
 		gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
@@ -3947,9 +3883,7 @@ command_button_clicked (void)
 		setup_general_command_buttons("custom_command_add", "add_custom_cmd_button");
 		
 		/* set up apply command changes button */
-		apply_command_changes_button = glade_helper_get (xml_commands, 
-								 "command_apply_button",
-								 GTK_TYPE_BUTTON);
+		apply_command_changes_button = glade_xml_get_widget (xml_commands, "command_apply_button");
 		g_object_set_data_full (G_OBJECT (apply_command_changes_button), "key",
 					g_strdup ("apply_command_changes"), (GDestroyNotify) g_free);
 		g_signal_connect (G_OBJECT (apply_command_changes_button), "clicked",
@@ -3962,9 +3896,7 @@ command_button_clicked (void)
 				  G_CALLBACK (apply_command_changes), dialog);
 	}
 	else {
-		command_chooser = glade_helper_get (xml_commands, 
-						    "cmd_type_combobox",
-						    GTK_TYPE_COMBO_BOX);
+		command_chooser = glade_xml_get_widget (xml_commands, "cmd_type_combobox");
 
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (command_chooser));
 		
@@ -3999,7 +3931,7 @@ static void
 setup_greeter_combobox (const char *name,
                         const char *key)
 {
-	GtkWidget *combobox = glade_helper_get (xml, name, GTK_TYPE_COMBO_BOX);
+	GtkWidget *combobox = glade_xml_get_widget (xml, name);
 	char *greetval      = g_strdup (gdm_config_get_string ((gchar *)key));
 
 	if (greetval != NULL &&
@@ -4020,10 +3952,8 @@ setup_greeter_combobox (const char *name
 			
 			val = gdm_config_get_bool (GDM_KEY_BROWSER);
 
-			local_plain_vbox = glade_helper_get (xml, "local_plain_properties_vbox",
-			                                     GTK_TYPE_VBOX);
-			local_themed_vbox = glade_helper_get (xml, "local_themed_properties_vbox",
-			                                      GTK_TYPE_VBOX);				
+			local_plain_vbox = glade_xml_get_widget (xml, "local_plain_properties_vbox");
+			local_themed_vbox = glade_xml_get_widget (xml, "local_themed_properties_vbox");
 			if (val == FALSE) {
 				gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), LOCAL_PLAIN);
 			}
@@ -4035,15 +3965,12 @@ setup_greeter_combobox (const char *name
 			gtk_widget_hide (local_themed_vbox);
 		}
 		else if (strstr (greetval, "/gdmgreeter") != NULL) {
-		
 			GtkWidget *local_plain_vbox;
 			GtkWidget *local_themed_vbox;
-			
-			local_plain_vbox = glade_helper_get (xml, "local_plain_properties_vbox",
-		                                             GTK_TYPE_VBOX);
-			local_themed_vbox = glade_helper_get (xml, "local_themed_properties_vbox",
-			                                      GTK_TYPE_VBOX);	
-			
+
+			local_plain_vbox = glade_xml_get_widget (xml, "local_plain_properties_vbox");
+			local_themed_vbox = glade_xml_get_widget (xml, "local_themed_properties_vbox");
+
 			gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), LOCAL_THEMED);
 			gtk_widget_hide (local_plain_vbox);
 			gtk_widget_show (local_themed_vbox);
@@ -4067,8 +3994,7 @@ setup_xdmcp_support (void)
 {
 	GtkWidget *xdmcp_button;
 
-	xdmcp_button = glade_helper_get (xml, "xdmcp_configbutton",
-	                                 GTK_TYPE_BUTTON);
+	xdmcp_button = glade_xml_get_widget (xml, "xdmcp_configbutton");
 #ifndef HAVE_LIBXDMCP
 	/* HAVE_LIBXDMCP */
 	gtk_widget_set_sensitive (xdmcp_button, FALSE);
@@ -4336,9 +4262,7 @@ setup_users_tab (void)
 	setup_face ();
 
 	/* Setup default face */
-	default_face_filechooser = glade_helper_get (xml, 
-						     "default_face_filechooser",
-						     GTK_TYPE_FILE_CHOOSER_BUTTON);
+	default_face_filechooser = glade_xml_get_widget (xml, "default_face_filechooser");
 
 	filter = gtk_file_filter_new ();
         gtk_file_filter_set_name (filter, _("Images"));
@@ -4347,10 +4271,7 @@ setup_users_tab (void)
 
 	filename = gdm_config_get_string (GDM_KEY_DEFAULT_FACE);
 
-	default_face_checkbox = glade_helper_get (xml,
-						  "default_face_checkbutton", 
-						  GTK_TYPE_CHECK_BUTTON);
-	
+	default_face_checkbox = glade_xml_get_widget (xml, "default_face_checkbutton");
 
 	if (!ve_string_empty (filename) && access (filename, R_OK|X_OK)) {
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (default_face_filechooser),
@@ -4383,16 +4304,12 @@ setup_users_tab (void)
 	/* Setup global face dir */
 	g_free (filename);		
 	
-	global_face_dir_filechooser = glade_helper_get (xml, 
-							"global_face_dir_filechooser",
-							GTK_TYPE_FILE_CHOOSER_BUTTON);	
+	global_face_dir_filechooser = glade_xml_get_widget (xml, "global_face_dir_filechooser");
 
 	filename = gdm_config_get_string (GDM_KEY_GLOBAL_FACE_DIR);
 
-	global_face_dir_checkbox = glade_helper_get (xml,
-						     "global_face_dir_checkbutton", 
-						     GTK_TYPE_CHECK_BUTTON);
-	
+	global_face_dir_checkbox = glade_xml_get_widget (xml, "global_face_dir_checkbutton");
+
 	if (!ve_string_empty (filename) && access (filename, R_OK|X_OK) == 0) {
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (global_face_dir_filechooser),
 					       filename);
@@ -4440,40 +4357,19 @@ setup_accessibility_tab (void)
 	gchar *modules_list;
 	gchar *value;
 	
-	enable_accessible_login = 
-		glade_helper_get (xml, 
-	                          "acc_modules",
-	                          GTK_TYPE_CHECK_BUTTON);
-
-	access_sound_ready_file_chooser = 
-		glade_helper_get (xml,
-	                          "acc_sound_ready_button",
-	                          GTK_TYPE_FILE_CHOOSER_BUTTON);
-
-	access_sound_ready_play_button = 
-		glade_helper_get (xml,
-	                          "acc_soundtest_ready_button",
-	                          GTK_TYPE_BUTTON);
-
-	access_sound_success_file_chooser = 
-		glade_helper_get (xml,
-	                          "acc_sound_success_button",
-	                          GTK_TYPE_FILE_CHOOSER_BUTTON);
-
-	access_sound_success_play_button = 
-		glade_helper_get (xml,
-	                          "acc_soundtest_success_button",
-	                          GTK_TYPE_BUTTON);
-
-	access_sound_failure_file_chooser = 
-		glade_helper_get (xml,
-	                          "acc_sound_failure_button",
-	                          GTK_TYPE_FILE_CHOOSER_BUTTON);
-
-	access_sound_failure_play_button = 
-		glade_helper_get (xml,
-	                          "acc_soundtest_failure_button",
-	                          GTK_TYPE_BUTTON);
+	enable_accessible_login = glade_xml_get_widget (xml, "acc_modules");
+
+	access_sound_ready_file_chooser = glade_xml_get_widget (xml, "acc_sound_ready_button");
+
+	access_sound_ready_play_button = glade_xml_get_widget (xml, "acc_soundtest_ready_button");
+
+	access_sound_success_file_chooser = glade_xml_get_widget (xml, "acc_sound_success_button");
+
+	access_sound_success_play_button = glade_xml_get_widget (xml, "acc_soundtest_success_button");
+
+	access_sound_failure_file_chooser = glade_xml_get_widget (xml, "acc_sound_failure_button");
+
+	access_sound_failure_play_button = glade_xml_get_widget (xml, "acc_soundtest_failure_button");
 
 	setup_greeter_toggle ("acc_theme",
 	                      GDM_KEY_ALLOW_GTK_THEME_CHANGE);
@@ -4628,10 +4524,8 @@ gg_selection_changed (GtkTreeSelection *
 	gchar *str;
 	gint selected = -1;
 
-	delete_button = glade_helper_get (xml, "gg_delete_theme",
-	                                  GTK_TYPE_BUTTON);
-	delete_button_remote = glade_helper_get (xml, "gg_delete_theme_remote",
-	                                         GTK_TYPE_BUTTON);
+	delete_button = glade_xml_get_widget (xml, "gg_delete_theme");
+	delete_button_remote = glade_xml_get_widget (xml, "gg_delete_theme_remote");
 
 	if ( !gtk_tree_selection_get_selected (selection, &model, &iter)) {
 		gtk_widget_set_sensitive (delete_button, FALSE);
@@ -4648,13 +4542,11 @@ gg_selection_changed (GtkTreeSelection *
 		GtkTreeModel *model;
 		GtkTreePath *path;
 		
-		theme_list = glade_helper_get (xml, "gg_theme_list_remote",
-		                               GTK_TYPE_TREE_VIEW);
+		theme_list = glade_xml_get_widget (xml, "gg_theme_list_remote");
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (theme_list));
 		model = gtk_tree_view_get_model (GTK_TREE_VIEW (theme_list));
 
-		local_combobox = glade_helper_get (xml, "gg_mode_combobox",
-						   GTK_TYPE_COMBO_BOX);		
+		local_combobox = glade_xml_get_widget (xml, "gg_mode_combobox");
 		selected = gtk_combo_box_get_active (GTK_COMBO_BOX (local_combobox));
 
 		if (model != NULL) {
@@ -4676,8 +4568,7 @@ gg_selection_changed (GtkTreeSelection *
 		GtkTreeModel *model;
 		GtkTreePath *path;
 		
-		theme_list = glade_helper_get (xml, "gg_theme_list",
-		                               GTK_TYPE_TREE_VIEW);		
+		theme_list = glade_xml_get_widget (xml, "gg_theme_list");
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (theme_list));
 		model = gtk_tree_view_get_model (GTK_TREE_VIEW (theme_list));
 		
@@ -4728,12 +4619,10 @@ gg_selection_changed (GtkTreeSelection *
 	else {
 		str = g_strconcat (_("None"), NULL);
 	}
-	
-	label = glade_helper_get (xml, "gg_author_text_view",
-				  GTK_TYPE_TEXT_VIEW);	
-	label_remote = glade_helper_get (xml, "gg_author_text_view_remote",
-				         GTK_TYPE_TEXT_VIEW);
-	
+
+	label = glade_xml_get_widget (xml, "gg_author_text_view");
+	label_remote = glade_xml_get_widget (xml, "gg_author_text_view_remote");
+
 	textview_set_buffer (GTK_TEXT_VIEW (label), "");
 	textview_set_buffer (GTK_TEXT_VIEW (label_remote), "");
 	
@@ -4760,10 +4649,8 @@ gg_selection_changed (GtkTreeSelection *
 				  THEME_COLUMN_COPYRIGHT,
 				  &value);
 				  
-	label = glade_helper_get (xml, "gg_copyright_text_view",
-	                          GTK_TYPE_TEXT_VIEW);
-	label_remote = glade_helper_get (xml, "gg_copyright_text_view_remote",
-	                                 GTK_TYPE_TEXT_VIEW);
+	label = glade_xml_get_widget (xml, "gg_copyright_text_view");
+	label_remote = glade_xml_get_widget (xml, "gg_copyright_text_view_remote");
 
 	textview_set_buffer (GTK_TEXT_VIEW (label), "");
 	textview_set_buffer (GTK_TEXT_VIEW (label_remote), "");
@@ -4812,7 +4699,8 @@ read_themes (GtkListStore *store, const 
 		GtkTreeIter iter;
 		gboolean sel_theme;
 		gboolean sel_themes;
-		VeConfig *theme_file;
+		GKeyFile *theme_file;
+
 		if (dent->d_name[0] == '.')
 			continue;
 		n = g_strconcat (theme_dir, "/", dent->d_name,
@@ -4827,8 +4715,6 @@ read_themes (GtkListStore *store, const 
 			continue;
 		}
 
-		theme_file = ve_config_new (n);
-
 		file = gdm_get_theme_greeter (n, dent->d_name);
 		full = g_strconcat (theme_dir, "/", dent->d_name,
 				    "/", file, NULL);
@@ -4857,23 +4743,21 @@ read_themes (GtkListStore *store, const 
 		else
 			sel_themes = FALSE;
 
-		name = ve_config_get_translated_string
-			(theme_file, "GdmGreeterTheme/Name");
+		theme_file = gdm_common_config_load (n, NULL);
+		name = NULL;
+		gdm_common_config_get_translated_string (theme_file, "GdmGreeterTheme/Name", &name, NULL);
 		if (ve_string_empty (name)) {
 			g_free (name);
 			name = g_strdup (dent->d_name);
 		}
 
-		desc      = ve_config_get_translated_string
-			    (theme_file, "GdmGreeterTheme/Description");
-		author    = ve_config_get_translated_string
-			    (theme_file, "GdmGreeterTheme/Author");
-		copyright = ve_config_get_translated_string
-			    (theme_file, "GdmGreeterTheme/Copyright");
-		ss        = ve_config_get_translated_string
-			    (theme_file, "GdmGreeterTheme/Screenshot");
+		desc = author = copyright = ss = NULL;
+		gdm_common_config_get_translated_string (theme_file, "GdmGreeterTheme/Description", &desc, NULL);
+		gdm_common_config_get_translated_string (theme_file, "GdmGreeterTheme/Author", &author, NULL);
+		gdm_common_config_get_translated_string (theme_file, "GdmGreeterTheme/Copyright", &copyright, NULL);
+		gdm_common_config_get_translated_string (theme_file, "GdmGreeterTheme/Screenshot", &ss, NULL);
 
-		ve_config_destroy (theme_file);
+		g_key_file_free (theme_file);
 
 		if (ss != NULL)
 			full = g_strconcat (theme_dir, "/", dent->d_name,
@@ -4999,12 +4883,9 @@ selected_toggled (GtkCellRendererToggle 
 	GtkTreeIter iter;
 	GtkTreePath *path;
 	GtkTreePath *sel_path = gtk_tree_path_new_from_string (path_str);
-	GtkWidget *theme_list = glade_helper_get (xml, "gg_theme_list",
-						  GTK_TYPE_TREE_VIEW);
-	GtkWidget *del_button = glade_helper_get (xml, "gg_delete_theme",
-						  GTK_TYPE_BUTTON);
-	GtkWidget *del_button_remote = glade_helper_get (xml, "gg_delete_theme_remote",
-	                                                 GTK_TYPE_BUTTON);
+	GtkWidget *theme_list = glade_xml_get_widget (xml, "gg_theme_list");
+	GtkWidget *del_button = glade_xml_get_widget (xml, "gg_delete_theme");
+	GtkWidget *del_button_remote = glade_xml_get_widget (xml, "gg_delete_theme_remote");
 	gboolean is_radio;
 
 	gtk_tree_model_get_iter (model, &selected_iter, sel_path);
@@ -5085,19 +4966,17 @@ selected_toggled (GtkCellRendererToggle 
 		/* There are no themes selected atm in the Random form selected mode.
 		   We need to inform users that is the case */
 		if (ve_string_empty (selected_themes)) {
-			GtkWidget *setup_dialog = glade_helper_get(xml, 
-								   "setup_dialog", GTK_TYPE_WINDOW);
+			GtkWidget *setup_dialog = glade_xml_get_widget(xml, "setup_dialog");
 		
-			GtkWidget *dlg = 
-				ve_hig_dialog_new (GTK_WINDOW (setup_dialog),
-						   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-						   GTK_MESSAGE_WARNING,
-						   GTK_BUTTONS_OK,
-						   _("No themes selected!"),
-						   _("You need one or more themes selected for "
-						     "the \"Random from selected\" option to be "
-						     "valid. Failure to do so will force "
-						     "\"Selected only\" mode."));
+			GtkWidget *dlg = hig_dialog_new (GTK_WINDOW (setup_dialog),
+							 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_WARNING,
+							 GTK_BUTTONS_OK,
+							 _("No themes selected!"),
+							 _("You need one or more themes selected for "
+							   "the \"Random from selected\" option to be "
+							   "valid. Failure to do so will force "
+							   "\"Selected only\" mode."));
 			gtk_dialog_run (GTK_DIALOG (dlg));
 			gtk_widget_destroy (dlg);
 		}
@@ -5419,7 +5298,7 @@ install_theme_file (gchar *filename, Gtk
 	gchar *untar_cmd;
 	gboolean success = FALSE;
 
-	theme_list = glade_helper_get (xml, "gg_theme_list", GTK_TYPE_TREE_VIEW);
+	theme_list = glade_xml_get_widget (xml, "gg_theme_list");
 
 	cwd = g_get_current_dir ();
 	theme_dir = get_theme_dir ();
@@ -5445,13 +5324,13 @@ install_theme_file (gchar *filename, Gtk
 
 		msg = g_strdup_printf (_("%s"), error);
 
-		dialog = ve_hig_dialog_new (GTK_WINDOW (parent),
-					    GTK_DIALOG_MODAL | 
-					    GTK_DIALOG_DESTROY_WITH_PARENT,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("Not a theme archive"),
-					    msg);
+		dialog = hig_dialog_new (GTK_WINDOW (parent),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Not a theme archive"),
+					 msg);
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 		g_free (theme_dir);
@@ -5476,13 +5355,13 @@ install_theme_file (gchar *filename, Gtk
 				       "installed. Install again anyway?"),
 				     fname);
 		
-		dialog = ve_hig_dialog_new (GTK_WINDOW (parent),
-		                            GTK_DIALOG_MODAL | 
-		                            GTK_DIALOG_DESTROY_WITH_PARENT,
-		                            GTK_MESSAGE_QUESTION,
-		                            GTK_BUTTONS_NONE,
-		                            s,
-		                            "");
+		dialog = hig_dialog_new (GTK_WINDOW (parent),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_QUESTION,
+					 GTK_BUTTONS_NONE,
+					 s,
+					 "");
 		g_free (fname);
 		g_free (s);
 
@@ -5559,14 +5438,14 @@ install_theme_file (gchar *filename, Gtk
 	
 		GtkWidget *dialog;
 		
-		dialog = ve_hig_dialog_new (GTK_WINDOW (parent),
-					    GTK_DIALOG_MODAL | 
-					    GTK_DIALOG_DESTROY_WITH_PARENT,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("Some error occurred when "
-					      "installing the theme"),
-					    "");
+		dialog = hig_dialog_new (GTK_WINDOW (parent),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Some error occurred when "
+					   "installing the theme"),
+					 "");
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 	}
@@ -5615,13 +5494,13 @@ theme_install_response (GtkWidget *choos
 	
 		GtkWidget *dialog;
 
-		dialog = ve_hig_dialog_new (GTK_WINDOW (chooser),
-					    GTK_DIALOG_MODAL | 
-					    GTK_DIALOG_DESTROY_WITH_PARENT,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("No file selected"),
-					    "");
+		dialog = hig_dialog_new (GTK_WINDOW (chooser),
+					 GTK_DIALOG_MODAL | 
+					 GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("No file selected"),
+					 "");
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 		return;
@@ -5639,7 +5518,7 @@ install_new_theme (GtkWidget *button, gp
 	static GtkWidget *chooser = NULL;
 	GtkWidget *setup_dialog;
 	
-	setup_dialog = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
+	setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 	
 	chooser = gtk_file_chooser_dialog_new (_("Select Theme Archive"),
 					       GTK_WINDOW (setup_dialog),
@@ -5683,18 +5562,13 @@ delete_theme (GtkWidget *button, gpointe
 	gboolean selected_warning = FALSE;
 	gint selected = -1;
 
-	setup_dialog = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-	theme_list = glade_helper_get (xml, "gg_theme_list",
-				       GTK_TYPE_TREE_VIEW);
-	theme_list_remote = glade_helper_get (xml, "gg_theme_list_remote",
-	                                      GTK_TYPE_TREE_VIEW);
-	del_button = glade_helper_get (xml, "gg_delete_theme",
-				       GTK_TYPE_BUTTON);
-	del_button_remote = glade_helper_get (xml, "gg_delete_theme_remote",
-	                                      GTK_TYPE_BUTTON);
-	local_combobox = glade_helper_get (xml, "gg_mode_combobox",
-					   GTK_TYPE_COMBO_BOX);
-	
+	setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
+	theme_list = glade_xml_get_widget (xml, "gg_theme_list");
+	theme_list_remote = glade_xml_get_widget (xml, "gg_theme_list_remote");
+	del_button = glade_xml_get_widget (xml, "gg_delete_theme");
+	del_button_remote = glade_xml_get_widget (xml, "gg_delete_theme_remote");
+	local_combobox = glade_xml_get_widget (xml, "gg_mode_combobox");
+
 	if (gtk_notebook_get_current_page (GTK_NOTEBOOK (setup_notebook)) == LOCAL_TAB) {
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (theme_list));
 	}
@@ -5744,15 +5618,15 @@ delete_theme (GtkWidget *button, gpointe
 	   mode is currently in use in the "Selected only" mode 
 	   so lets warn the user about it */
 	if (selected_warning == TRUE) {
-		dlg = ve_hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
-					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
-					 GTK_MESSAGE_WARNING,
-					 GTK_BUTTONS_OK,
-					 _("Theme active in \"Selected only\" mode"),
-					 _("This theme cannot be deleted at this point. "
-					   "If you wish to delete this theme switch to "
-					   "\"Selected only\" mode, and deselect it by "
-					   "choosing a different theme."));
+		dlg = hig_dialog_new (GTK_WINDOW (setup_dialog) /* parent */,
+				      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* flags */,
+				      GTK_MESSAGE_WARNING,
+				      GTK_BUTTONS_OK,
+				      _("Theme active in \"Selected only\" mode"),
+				      _("This theme cannot be deleted at this point. "
+					"If you wish to delete this theme switch to "
+					"\"Selected only\" mode, and deselect it by "
+					"choosing a different theme."));
 		gtk_dialog_run (GTK_DIALOG (dlg));
 		gtk_widget_destroy (dlg);			    
 	}
@@ -5780,13 +5654,12 @@ delete_theme (GtkWidget *button, gpointe
 
 	s = g_strdup_printf (_("Remove the \"%s\" theme?"),
 			     name);
-	dlg = ve_hig_dialog_new
-		(GTK_WINDOW (setup_dialog),
-		 GTK_DIALOG_MODAL | 
-		 GTK_DIALOG_DESTROY_WITH_PARENT,
-		 GTK_MESSAGE_WARNING,
-		 GTK_BUTTONS_NONE,
-		 s,
+	dlg = hig_dialog_new (GTK_WINDOW (setup_dialog),
+			      GTK_DIALOG_MODAL | 
+			      GTK_DIALOG_DESTROY_WITH_PARENT,
+			      GTK_MESSAGE_WARNING,
+			      GTK_BUTTONS_NONE,
+			      s,
 		 _("If you choose to remove the theme, it will be permanently lost."));
 	g_free (s);
 
@@ -5857,8 +5730,7 @@ xserver_entry_timeout (GtkWidget *entry)
 	gchar *string_old = NULL;
 	gchar *section;
 
-	mod_combobox    = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
+	mod_combobox    = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
 
 	/* Get xserver section to update */
 	section = gtk_combo_box_get_active_text (GTK_COMBO_BOX (mod_combobox));
@@ -5906,10 +5778,9 @@ xserver_priority_timeout (GtkWidget *ent
 	const char *key  = g_object_get_data (G_OBJECT (entry), "key");
 	gint value = 0;
 	gchar *section;
-	
-	mod_combobox    = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	
+
+	mod_combobox    = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+
 	/* Get xserver section to update */
 	section = gtk_combo_box_get_active_text (GTK_COMBO_BOX (mod_combobox));
 	
@@ -5945,8 +5816,7 @@ xserver_toggle_timeout (GtkWidget *toggl
 	gboolean   val = FALSE;
 	gchar      *section;
 
-	mod_combobox    = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
+	mod_combobox    = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
 
 	/* Get xserver section to update */
 	section = gtk_combo_box_get_active_text (GTK_COMBO_BOX (mod_combobox));
@@ -6031,10 +5901,8 @@ static void
 xserver_init_server_list ()
 {
 	/* Get Widgets from glade */
-	GtkWidget *treeview = glade_helper_get (xml_xservers, "xserver_tree_view",
-	                                        GTK_TYPE_TREE_VIEW);
-	GtkWidget *remove_button = glade_helper_get (xml_xservers, "xserver_remove_button",
-	                                        GTK_TYPE_BUTTON);
+	GtkWidget *treeview = glade_xml_get_widget (xml_xservers, "xserver_tree_view");
+	GtkWidget *remove_button = glade_xml_get_widget (xml_xservers, "xserver_remove_button");
 
 	/* create list store */
 	GtkListStore *store = gtk_list_store_new (XSERVER_NUM_COLUMNS,
@@ -6058,8 +5926,7 @@ xserver_init_servers ()
     /* Init widget states */
     xserver_init_server_list();
 
-    remove_button = glade_helper_get (xml_xservers, "xserver_remove_button",
-                                      GTK_TYPE_BUTTON);
+    remove_button = glade_xml_get_widget (xml_xservers, "xserver_remove_button");
     gtk_widget_set_sensitive (remove_button, FALSE);
 }
 
@@ -6068,8 +5935,7 @@ xserver_row_selected(GtkTreeSelection *s
 {
     GtkWidget *remove_button;
     
-    remove_button = glade_helper_get (xml_xservers, "xserver_remove_button",
-                                      GTK_TYPE_BUTTON);
+    remove_button = glade_xml_get_widget (xml_xservers, "xserver_remove_button");
     gtk_widget_set_sensitive (remove_button, TRUE);
 }
 
@@ -6087,20 +5953,20 @@ xserver_remove_display (gpointer data)
 	gint vt;
         char vt_value[3];
 
-        treeview = glade_helper_get (xml_xservers, "xserver_tree_view",
-                                     GTK_TYPE_TREE_VIEW);
+        treeview = glade_xml_get_widget (xml_xservers, "xserver_tree_view");
 
         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
 
-	if (gtk_tree_selection_get_selected (selection, &model, &iter))
-	{
-	        VeConfig *cfg        = ve_config_get (config_file);
-		VeConfig *custom_cfg = ve_config_get (custom_config_file);
+	if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+	        GKeyFile *cfg;
+		GKeyFile *custom_cfg;
 		gchar *defaultval;
 		gchar *key;
 
-		combo = glade_helper_get (xml_add_xservers, "xserver_server_combobox",
-	                                  GTK_TYPE_COMBO_BOX);
+		cfg = gdm_common_config_load (config_file, NULL);
+		custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+
+		combo = glade_xml_get_widget (xml_add_xservers, "xserver_server_combobox");
 
 		/* Update config */
 		gtk_tree_model_get (model, &iter, XSERVER_COLUMN_VT, &vt, -1);
@@ -6108,50 +5974,52 @@ xserver_remove_display (gpointer data)
 		g_snprintf (vt_value,  sizeof (vt_value), "%d", vt);
 		key = g_strconcat (GDM_KEY_SECTION_SERVERS, "/", vt_value, "=", NULL);
 
-		defaultval = ve_config_get_string (cfg, key);
+		defaultval = NULL;
+		gdm_common_config_get_string (cfg, key, &defaultval, NULL);
 
 		/*
 		 * If the value is in the default config file, set it to inactive in
 		 * the custom config file, else delete it
 		 */
 		if (! ve_string_empty (defaultval)) {
-			ve_config_set_string (custom_cfg, key, "inactive");
+			gdm_common_config_set_string (custom_cfg, key, "inactive");
 		} else {
-			ve_config_delete_key (custom_cfg, key);
+			gdm_common_config_remove_key (custom_cfg, key, NULL);
 		}
 		g_free (defaultval);
 
-		ve_config_save (custom_cfg, FALSE /* force */);
+		gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+		g_key_file_free (custom_cfg);
+		g_key_file_free (cfg);
 
 		/* Update gdmsetup */
 		xserver_init_server_list ();
 		xserver_update_delete_sensitivity ();
 	}
 }
-	
+
 /* Add a display to the list of displays to start */
 static void
 xserver_add_display (gpointer data)
 {
-        VeConfig *cfg        = ve_config_get (config_file);
-        VeConfig *custom_cfg = ve_config_get (custom_config_file);
+        GKeyFile *cfg;
+        GKeyFile *custom_cfg;
 	GtkWidget *spinner, *combo, *entry, *button;
 	gchar *string;
 	gchar *defaultval;
 	char spinner_value[3], *key;
 
+        cfg = gdm_common_config_load (config_file, NULL);
+	custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+
 	/* Get Widgets from glade */
-	spinner  = glade_helper_get (xml_add_xservers, "xserver_spin_button",
-	                             GTK_TYPE_SPIN_BUTTON);
-	entry    = glade_helper_get (xml_add_xservers, "xserver_options_entry",
-	                             GTK_TYPE_ENTRY);
-	combo    = glade_helper_get (xml_add_xservers, "xserver_server_combobox",
-		                     GTK_TYPE_COMBO_BOX);
-	button   = glade_helper_get (xml_xservers, "xserver_add_button",
-		                     GTK_TYPE_BUTTON);
+	spinner  = glade_xml_get_widget (xml_add_xservers, "xserver_spin_button");
+	entry    = glade_xml_get_widget (xml_add_xservers, "xserver_options_entry");
+	combo    = glade_xml_get_widget (xml_add_xservers, "xserver_server_combobox");
+	button   = glade_xml_get_widget (xml_xservers, "xserver_add_button");
 
 	/* String to add to config */
-	g_snprintf (spinner_value,  sizeof (spinner_value), "%d", 
+	g_snprintf (spinner_value,  sizeof (spinner_value), "%d",
 	            gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)));
 
 	key = g_strconcat (GDM_KEY_SECTION_SERVERS, "/", spinner_value, "=", NULL);
@@ -6163,15 +6031,20 @@ xserver_add_display (gpointer data)
 		string = g_strdup (gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo)));
 	}
 
-	defaultval = ve_config_get_string (cfg, key);
+	defaultval = NULL;
+	gdm_common_config_get_string (cfg, key, &defaultval, NULL);
 
 	/* Add to config */
-	if (strcmp (ve_sure_string (defaultval), ve_sure_string (string)) == 0)
-		ve_config_delete_key (custom_cfg, key);
-	else
-		ve_config_set_string (custom_cfg, key, ve_sure_string(string));
+	if (strcmp (ve_sure_string (defaultval), ve_sure_string (string)) == 0) {
+		gdm_common_config_remove_key (custom_cfg, key, NULL);
+	} else {
+		gdm_common_config_set_string (custom_cfg, key, ve_sure_string(string));
+	}
+
+	gdm_common_config_save (custom_cfg, custom_config_file, NULL);
+	g_key_file_free (custom_cfg);
+	g_key_file_free (cfg);
 
-	ve_config_save (custom_cfg, FALSE /* force */);
 	/* Reinitialize gdmsetup */
 	xserver_init_servers ();
 	xserver_update_delete_sensitivity ();
@@ -6198,20 +6071,17 @@ xserver_add_button_clicked (void)
 	gboolean res;
 		
 	if (dialog == NULL) {
-		parent = glade_helper_get (xml_xservers, "xserver_dialog", GTK_TYPE_WINDOW);
-		dialog = glade_helper_get (xml_add_xservers, "add_xserver_dialog", GTK_TYPE_DIALOG);
+		parent = glade_xml_get_widget (xml_xservers, "xserver_dialog");
+		dialog = glade_xml_get_widget (xml_add_xservers, "add_xserver_dialog");
 
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
 		gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
 	}
 
-	vt_spinbutton = glade_helper_get (xml_add_xservers, "xserver_spin_button",
-	                                  GTK_TYPE_SPIN_BUTTON);	
-	server_combobox = glade_helper_get (xml_add_xservers, "xserver_server_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	options_entry = glade_helper_get (xml_add_xservers, "xserver_options_entry",
-	                                  GTK_TYPE_ENTRY);
-	
+	vt_spinbutton = glade_xml_get_widget (xml_add_xservers, "xserver_spin_button");
+	server_combobox = glade_xml_get_widget (xml_add_xservers, "xserver_server_combobox");
+	options_entry = glade_xml_get_widget (xml_add_xservers, "xserver_options_entry");
+
 	activate_signal_id = g_signal_connect (G_OBJECT (vt_spinbutton), "activate",
 	                                       G_CALLBACK (vt_spinbutton_activate),
 	                                       (gpointer) dialog);
@@ -6220,8 +6090,7 @@ xserver_add_button_clicked (void)
 	
 	gtk_widget_grab_focus (vt_spinbutton);
 		
-	treeview = glade_helper_get (xml_xservers, "xserver_tree_view",
-	                             GTK_TYPE_TREE_VIEW);
+	treeview = glade_xml_get_widget (xml_xservers, "xserver_tree_view");
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
 
 	/* set default values */
@@ -6297,35 +6166,24 @@ xserver_create (gpointer data)
 	GtkWidget *priority_spinbutton;
 
 	/* Get Widgets from glade */
-	frame           = glade_helper_get (xml, "xserver_modify_frame",
-	                                    GTK_TYPE_FRAME);
-	name_entry      = glade_helper_get (xml, "xserver_name_entry",
-                                        GTK_TYPE_ENTRY);
-	command_entry   = glade_helper_get (xml, "xserver_command_entry",
-	                                    GTK_TYPE_ENTRY);
-	priority_spinbutton = glade_helper_get(xml, "xserv_priority_spinbutton",
-					       GTK_TYPE_SPIN_BUTTON);
-	handled_check   = glade_helper_get (xml, "xserver_handled_checkbutton",
-	                                    GTK_TYPE_CHECK_BUTTON);
-	flexible_check  = glade_helper_get (xml, "xserver_flexible_checkbutton",
-	                                    GTK_TYPE_CHECK_BUTTON);
-	greeter_radio   = glade_helper_get (xml, "xserver_greeter_radiobutton",
-	                                    GTK_TYPE_RADIO_BUTTON);
-	chooser_radio   = glade_helper_get (xml, "xserver_chooser_radiobutton",
-	                                    GTK_TYPE_RADIO_BUTTON);
-	modify_combobox = glade_helper_get (xml, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	create_button   = glade_helper_get (xml, "xserver_create_button",
-	                                    GTK_TYPE_BUTTON);
-	delete_button   = glade_helper_get (xml, "xserver_delete_button",
-	                                    GTK_TYPE_BUTTON);
+	frame           = glade_xml_get_widget (xml, "xserver_modify_frame");
+	name_entry      = glade_xml_get_widget (xml, "xserver_name_entry");
+	command_entry   = glade_xml_get_widget (xml, "xserver_command_entry");
+	priority_spinbutton = glade_xml_get_widget(xml, "xserv_priority_spinbutton");
+	handled_check   = glade_xml_get_widget (xml, "xserver_handled_checkbutton");
+	flexible_check  = glade_xml_get_widget (xml, "xserver_flexible_checkbutton");
+	greeter_radio   = glade_xml_get_widget (xml, "xserver_greeter_radiobutton");
+	chooser_radio   = glade_xml_get_widget (xml, "xserver_chooser_radiobutton");
+	modify_combobox = glade_xml_get_widget (xml, "xserver_mod_combobox");
+	create_button   = glade_xml_get_widget (xml, "xserver_create_button");
+	delete_button   = glade_xml_get_widget (xml, "xserver_delete_button");
 
 	gtk_combo_box_append_text (GTK_COMBO_BOX (modify_combobox),
 	                           "New Server");
 
 	/* TODO: Create a new section for this server */
 	/* TODO: Write this value to the config and update xservers list */
-	/* cfg = ve_config_get (custom_config_file); */
+	/* cfg = gdm_common_config_load (custom_config_file, NULL); */
 	success = FALSE;
 	/* success = ve_config_add_section (cfg, SECTION_NAME); */
 
@@ -6363,10 +6221,8 @@ xserver_init_definitions ()
 	GtkWidget *style_combobox;
 	GtkWidget *modify_combobox;
 
-	style_combobox  = glade_helper_get (xml_xservers, "xserver_style_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	modify_combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
+	style_combobox  = glade_xml_get_widget (xml_xservers, "xserver_style_combobox");
+	modify_combobox = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
 
 	xserver_populate_combobox (GTK_COMBO_BOX (modify_combobox));
 
@@ -6397,14 +6253,16 @@ static void
 xserver_delete (gpointer data)
 {
 	gchar temp_string;
-
 	/* Get xserver section to delete */
-	GtkWidget *combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                        GTK_TYPE_COMBO_BOX);
-	gchar *section = gtk_combo_box_get_active_text ( GTK_COMBO_BOX (combobox));
-
+	GtkWidget *combobox;
+	gchar *section;
 	/* Delete xserver section */
-	VeConfig *custom_cfg = ve_config_get (custom_config_file);
+	VeConfig *custom_cfg;
+
+	combobox = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+	section = gtk_combo_box_get_active_text ( GTK_COMBO_BOX (combobox));
+	custom_cfg = ve_config_get (custom_config_file);
+
 	temp_string = g_strconcat (GDM_KEY_SERVER_PREFIX, section, NULL);
 	ve_config_delete_section (custom_cfg, temp_string);
 	g_free (temp_string);
@@ -6440,28 +6298,17 @@ setup_xserver_support (GladeXML *xml_xse
 	/* setup_xrandr_support (); */
 
 	/* Get Widgets from glade */
-	treeview        = glade_helper_get (xml_xservers, "xserver_tree_view",
-	                                    GTK_TYPE_TREE_VIEW);
-	name_entry      = glade_helper_get (xml_xservers, "xserver_name_entry",
-                                            GTK_TYPE_ENTRY);
-	command_entry   = glade_helper_get (xml_xservers, "xserver_command_entry",
-	                                    GTK_TYPE_ENTRY);
-	priority_spinbutton = glade_helper_get(xml_xservers, "xserv_priority_spinbutton",
-					       GTK_TYPE_SPIN_BUTTON);
-	handled_check   = glade_helper_get (xml_xservers, "xserver_handled_checkbutton",
-	                                    GTK_TYPE_CHECK_BUTTON);
-	flexible_check  = glade_helper_get (xml_xservers, "xserver_flexible_checkbutton",
-	                                    GTK_TYPE_CHECK_BUTTON);
-	style_combobox  = glade_helper_get (xml_xservers, "xserver_style_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	servers_combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
-	                                    GTK_TYPE_COMBO_BOX);
-	create_button   = glade_helper_get (xml_xservers, "xserver_createbutton",
-	                                    GTK_TYPE_BUTTON);
-	delete_button   = glade_helper_get (xml_xservers, "xserver_deletebutton",
-	                                    GTK_TYPE_BUTTON);
-	remove_button   = glade_helper_get (xml_xservers, "xserver_remove_button",
-	                                    GTK_TYPE_BUTTON);
+	treeview        = glade_xml_get_widget (xml_xservers, "xserver_tree_view");
+	name_entry      = glade_xml_get_widget (xml_xservers, "xserver_name_entry");
+	command_entry   = glade_xml_get_widget (xml_xservers, "xserver_command_entry");
+	priority_spinbutton = glade_xml_get_widget(xml_xservers, "xserv_priority_spinbutton");
+	handled_check   = glade_xml_get_widget (xml_xservers, "xserver_handled_checkbutton");
+	flexible_check  = glade_xml_get_widget (xml_xservers, "xserver_flexible_checkbutton");
+	style_combobox  = glade_xml_get_widget (xml_xservers, "xserver_style_combobox");
+	servers_combobox = glade_xml_get_widget (xml_xservers, "xserver_mod_combobox");
+	create_button   = glade_xml_get_widget (xml_xservers, "xserver_createbutton");
+	delete_button   = glade_xml_get_widget (xml_xservers, "xserver_deletebutton");
+	remove_button   = glade_xml_get_widget (xml_xservers, "xserver_remove_button");
 
 	glade_helper_tagify_label (xml_xservers, "xserver_informationlabel", "i");
 	glade_helper_tagify_label (xml_xservers, "xserver_informationlabel", "small");
@@ -6563,19 +6410,13 @@ xserver_button_clicked (void)
 		GtkWidget *parent;
 		GtkWidget *button;
 	
-		xml_xservers = glade_helper_load ("gdmsetup.glade",
-		                                 "xserver_dialog",
-		                                 GTK_TYPE_DIALOG,
-		                                 TRUE);	
-
-		xml_add_xservers = glade_helper_load ("gdmsetup.glade",
-		                                     "add_xserver_dialog",
-		                                     GTK_TYPE_DIALOG,
-		                                     TRUE);	
-
-		parent = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-		dialog = glade_helper_get (xml_xservers, "xserver_dialog", GTK_TYPE_DIALOG);
-		button = glade_helper_get (xml_xservers, "xserver_add_button", GTK_TYPE_BUTTON);
+		xml_xservers = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "xserver_dialog", NULL);
+
+		xml_add_xservers = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "add_xserver_dialog", NULL);
+
+		parent = glade_xml_get_widget (xml, "setup_dialog");
+		dialog = glade_xml_get_widget (xml_xservers, "xserver_dialog");
+		button = glade_xml_get_widget (xml_xservers, "xserver_add_button");
 
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
 		gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
@@ -6605,7 +6446,7 @@ setup_radio_group (const gchar *name,
 	GtkWidget *radio;
 	gint val;
 	
-	radio = glade_helper_get (xml, name, GTK_TYPE_RADIO_BUTTON);
+	radio = glade_xml_get_widget (xml, name);
 	val   = gdm_config_get_int ((gchar *)key);
 	
 	if (val == position)
@@ -6646,14 +6487,12 @@ setup_security_tab (void)
 	setup_intspin ("retry_delay", GDM_KEY_RETRY_DELAY);
 
 	/* Bold the Enable automatic login label */
-	checkbox = glade_helper_get (xml, "autologin",
-	                             GTK_TYPE_CHECK_BUTTON);
-	label = gtk_bin_get_child (GTK_BIN (checkbox));	
+	checkbox = glade_xml_get_widget (xml, "autologin");
+	label = gtk_bin_get_child (GTK_BIN (checkbox));
 	g_object_set (G_OBJECT (label), "use_markup", TRUE, NULL);
 
 	/* Bold the Enable timed login label */
-	checkbox = glade_helper_get (xml, "timedlogin",
-	                             GTK_TYPE_CHECK_BUTTON);
+	checkbox = glade_xml_get_widget (xml, "timedlogin");
 	label = gtk_bin_get_child (GTK_BIN (checkbox));
 	g_object_set (G_OBJECT (label), "use_markup", TRUE, NULL);
 
@@ -6683,8 +6522,7 @@ setup_security_tab (void)
 	setup_intspin ("minimal_uid_spinbutton", GDM_KEY_MINIMAL_UID);
 
 	/* Setup Configure XDMCP button */
-	XDMCPbutton = glade_helper_get (xml, "config_xserverbutton",
-	                                GTK_TYPE_BUTTON);
+	XDMCPbutton = glade_xml_get_widget (xml, "config_xserverbutton");
 	setup_xdmcp_support ();
 	g_signal_connect (G_OBJECT (XDMCPbutton), "clicked",
 	                  G_CALLBACK (xserver_button_clicked), NULL);
@@ -6746,8 +6584,8 @@ theme_list_drag_data_received  (GtkWidge
 	GtkListStore *store;
 	GList *list;
 	
-	parent = glade_helper_get (xml, "setup_dialog", GTK_TYPE_WINDOW);
-	theme_list = glade_helper_get (xml, "gg_theme_list", GTK_TYPE_TREE_VIEW);
+	parent = glade_xml_get_widget (xml, "setup_dialog");
+	theme_list = glade_xml_get_widget (xml, "gg_theme_list");
 	store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (theme_list)));
 
 	gtk_drag_finish (context, TRUE, FALSE, time);
@@ -6764,12 +6602,12 @@ theme_list_drag_data_received  (GtkWidge
 		mesg = g_strdup_printf (_("Install the theme from '%s'?"), base);
 		detail = g_strdup_printf (_("Select install to add the theme from the file '%s'."), (gchar *)list->data); 
 		
-		prompt = ve_hig_dialog_new (GTK_WINDOW (parent),
-		                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-		                            GTK_MESSAGE_QUESTION,
-		                            GTK_BUTTONS_NONE,
-		                            mesg,
-		                            detail);
+		prompt = hig_dialog_new (GTK_WINDOW (parent),
+					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_QUESTION,
+					 GTK_BUTTONS_NONE,
+					 mesg,
+					 detail);
 
 		gtk_dialog_add_button (GTK_DIALOG (prompt), "gtk-cancel", GTK_RESPONSE_CANCEL); 
 		gtk_dialog_add_button (GTK_DIALOG (prompt), _("_Install"), GTK_RESPONSE_OK);
@@ -6832,24 +6670,18 @@ setup_local_themed_settings (void)
 	GtkSizeGroup *size_group;
 	char *theme_dir;
 	
-	GtkWidget *theme_list = glade_helper_get (xml, "gg_theme_list",
-						  GTK_TYPE_TREE_VIEW);
-	GtkWidget *button = glade_helper_get (xml, "gg_install_new_theme",
-					      GTK_TYPE_BUTTON);
-	GtkWidget *del_button = glade_helper_get (xml, "gg_delete_theme",
-						  GTK_TYPE_BUTTON);
-	GtkWidget *mode_combobox = glade_helper_get (xml, "gg_mode_combobox",
-						     GTK_TYPE_COMBO_BOX);
+	GtkWidget *theme_list = glade_xml_get_widget (xml, "gg_theme_list");
+	GtkWidget *button = glade_xml_get_widget (xml, "gg_install_new_theme");
+	GtkWidget *del_button = glade_xml_get_widget (xml, "gg_delete_theme");
+	GtkWidget *mode_combobox = glade_xml_get_widget (xml, "gg_mode_combobox");
 
-	style_label = glade_helper_get (xml, "local_stylelabel", GTK_TYPE_LABEL);
-	theme_label = glade_helper_get (xml, "local_theme_label", GTK_TYPE_LABEL);
+	style_label = glade_xml_get_widget (xml, "local_stylelabel");
+	theme_label = glade_xml_get_widget (xml, "local_theme_label");
 	size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 	gtk_size_group_add_widget (size_group, style_label);
 	gtk_size_group_add_widget (size_group, theme_label);
 	
-	color_colorbutton = glade_helper_get (xml, 
-	                                      "local_background_theme_colorbutton",
-	                                      GTK_TYPE_COLOR_BUTTON);
+	color_colorbutton = glade_xml_get_widget (xml, "local_background_theme_colorbutton");
 
 	g_object_set_data (G_OBJECT (color_colorbutton), "key",
 	                   GDM_KEY_GRAPHICAL_THEMED_COLOR);
@@ -6999,8 +6831,7 @@ dialog_response (GtkWidget *dlg, int res
 		timeout_remove_all ();
 		gtk_main_quit ();
 	} else if (response == GTK_RESPONSE_HELP) {
-		GtkWidget *setup_dialog = glade_helper_get
-			(xml, "setup_dialog", GTK_TYPE_WINDOW);
+		GtkWidget *setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 		static GtkWidget *dlg = NULL;
 
 		if (dlg != NULL) {
@@ -7111,14 +6942,9 @@ logo_filechooser_response (GtkWidget *fi
 	}
 
 	if (gtk_notebook_get_current_page (GTK_NOTEBOOK (setup_notebook)) == LOCAL_TAB) {
-		image_toggle = glade_helper_get (xml, 
-		                                 "remote_logo_image_checkbutton",
-		                                 GTK_TYPE_CHECK_BUTTON);
-	      
+		image_toggle = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
 	} else {
-		image_toggle = glade_helper_get (xml, 
-		                                 "remote_logo_image_checkbutton",
-		                                 GTK_TYPE_CHECK_BUTTON);
+		image_toggle = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
 	}
 
 	if (filename != NULL &&
@@ -7219,26 +7045,12 @@ hookup_plain_background (void)
 	GtkWidget *image_preview;
 	gchar *background_filename;
 
-	color_radiobutton = glade_helper_get (xml, 
-	                                      "local_background_color_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-
-	color_colorbutton = glade_helper_get (xml, 
-	                                      "local_background_colorbutton",
-	                                      GTK_TYPE_COLOR_BUTTON);
-
-	image_radiobutton = glade_helper_get (xml, 
-	                                      "local_background_image_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-	
-	image_filechooser = glade_helper_get (xml, 
-	                                      "local_background_image_chooserbutton",
-	                                      GTK_TYPE_FILE_CHOOSER_BUTTON);
-	
-	image_scale_to_fit = glade_helper_get (xml, 
-	                                       "sg_scale_background", 
-					       GTK_TYPE_CHECK_BUTTON);
-	
+	color_radiobutton = glade_xml_get_widget (xml, "local_background_color_checkbutton");
+	color_colorbutton = glade_xml_get_widget (xml, "local_background_colorbutton");
+	image_radiobutton = glade_xml_get_widget (xml, "local_background_image_checkbutton");
+	image_filechooser = glade_xml_get_widget (xml, "local_background_image_chooserbutton");
+	image_scale_to_fit = glade_xml_get_widget (xml, "sg_scale_background");
+
 	setup_greeter_color ("local_background_colorbutton", 
 	                     GDM_KEY_BACKGROUND_COLOR);
 
@@ -7382,13 +7194,8 @@ hookup_plain_logo (void)	
 	GtkWidget *image_preview;
 	gchar *logo_filename;
 
-	logo_checkbutton = glade_helper_get (xml, 
-	                                     "local_logo_image_checkbutton",
-	                                     GTK_TYPE_CHECK_BUTTON);
-	logo_button = glade_helper_get (xml, 
-	                                "local_logo_image_chooserbutton",
-	                                GTK_TYPE_FILE_CHOOSER_BUTTON);
-		
+	logo_checkbutton = glade_xml_get_widget (xml, "local_logo_image_checkbutton");
+	logo_button = glade_xml_get_widget (xml, "local_logo_image_chooserbutton");
 
 	gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (logo_button),
 					        FALSE);
@@ -7511,7 +7318,7 @@ setup_default_session (void)
 
 	_gdm_session_list_init (&sessnames, &org_sessions, NULL, NULL);
 	
-	default_session_combobox = glade_helper_get (xml, "default_session_combobox", GTK_TYPE_COMBO_BOX);
+	default_session_combobox = glade_xml_get_widget (xml, "default_session_combobox");
 
 	org_val = gdm_config_get_string (GDM_KEY_DEFAULT_SESSION);
 	
@@ -7561,10 +7368,8 @@ setup_default_session (void)
 	g_signal_connect (default_session_combobox, "changed",
 		          G_CALLBACK (combobox_changed), NULL);
 	
-	default_session_checkbox = glade_helper_get (xml,
-						     "default_session_checkbutton", 
-						     GTK_TYPE_CHECK_BUTTON);
-	
+	default_session_checkbox = glade_xml_get_widget (xml, "default_session_checkbutton");
+
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (default_session_checkbox), !ve_string_empty (org_val));
 	
 	g_object_set_data_full (G_OBJECT (default_session_checkbox),
@@ -7607,16 +7412,12 @@ setup_general_tab (void)
 	setup_default_session ();
 	
 	/* Setup GtkRC file path */
-	gtkrc_filechooser = glade_helper_get (xml, 
-					      "gtkrc_chooserbutton",
-					      GTK_TYPE_FILE_CHOOSER_BUTTON);
+	gtkrc_filechooser = glade_xml_get_widget (xml, "gtkrc_chooserbutton");
 
 	gtkrc_filename = gdm_config_get_string (GDM_KEY_GTKRC);
 
-	gtkrc_checkbox = glade_helper_get (xml,
-					   "gtkrc_checkbutton", 
-					   GTK_TYPE_CHECK_BUTTON);		
-	
+	gtkrc_checkbox = glade_xml_get_widget (xml, "gtkrc_checkbutton");
+
 	if (!ve_string_empty (gtkrc_filename) && access (gtkrc_filename, R_OK) == 0) {
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (gtkrc_filechooser),
 					       gtkrc_filename);
@@ -7651,10 +7452,8 @@ setup_general_tab (void)
 	g_free (gtkrc_filename);
 
 	/* Setup user 24Hr Clock */
-	clock_type_chooser = glade_helper_get (xml, 
-					      "use_24hr_clock_combobox",
-					      GTK_TYPE_COMBO_BOX);	
-	
+	clock_type_chooser = glade_xml_get_widget (xml, "use_24hr_clock_combobox");
+
 	user_24hr_clock = gdm_config_get_string (GDM_KEY_USE_24_CLOCK);
 	if (!ve_string_empty (user_24hr_clock)) {
 		if (strcasecmp (ve_sure_string (user_24hr_clock), _("auto")) == 0) {
@@ -7673,8 +7472,7 @@ setup_general_tab (void)
 	g_signal_connect (G_OBJECT (clock_type_chooser), "changed",
 	                  G_CALLBACK (combobox_changed), NULL);			
 	
-	commands_button = glade_helper_get (xml, "configure_commands_button",
-					    GTK_TYPE_BUTTON);
+	commands_button = glade_xml_get_widget (xml, "configure_commands_button");
 	g_signal_connect (G_OBJECT (commands_button), "clicked",
 	                  G_CALLBACK (command_button_clicked), NULL);
       	
@@ -7700,27 +7498,13 @@ hookup_remote_plain_background (void)
 	GtkWidget *image_preview;
 	gchar *background_filename;
 
-	color_radiobutton = glade_helper_get (xml, 
-	                                      "remote_background_color_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-
-	color_colorbutton = glade_helper_get (xml, 
-	                                      "remote_background_colorbutton",
-	                                      GTK_TYPE_COLOR_BUTTON);
-
-	image_radiobutton = glade_helper_get (xml, 
-	                                      "remote_background_image_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-	
-	image_filechooser = glade_helper_get (xml, 
-	                                      "remote_background_image_chooserbutton",
-	                                      GTK_TYPE_FILE_CHOOSER_BUTTON);
-	
-	image_scale_to_fit = glade_helper_get (xml, 
-	                                       "sg_scale_background_remote", 
-					       GTK_TYPE_CHECK_BUTTON);
-	
-	setup_greeter_color ("remote_background_colorbutton", 
+	color_radiobutton = glade_xml_get_widget (xml, "remote_background_color_checkbutton");
+	color_colorbutton = glade_xml_get_widget (xml, "remote_background_colorbutton");
+	image_radiobutton = glade_xml_get_widget (xml, "remote_background_image_checkbutton");
+	image_filechooser = glade_xml_get_widget (xml, "remote_background_image_chooserbutton");
+	image_scale_to_fit = glade_xml_get_widget (xml, "sg_scale_background_remote");
+
+	setup_greeter_color ("remote_background_colorbutton",
 	                     GDM_KEY_BACKGROUND_COLOR);
 
 	setup_greeter_toggle ("sg_scale_background_remote",
@@ -7865,13 +7649,8 @@ hookup_remote_plain_logo (void)	
 	GtkWidget *image_preview;
 	gchar *logo_filename;
 
-	logo_checkbutton = glade_helper_get (xml, 
-	                                     "remote_logo_image_checkbutton",
-	                                     GTK_TYPE_CHECK_BUTTON);
-	logo_button = glade_helper_get (xml, 
-	                                "remote_logo_image_chooserbutton",
-	                                GTK_TYPE_FILE_CHOOSER_BUTTON);
-		
+	logo_checkbutton = glade_xml_get_widget (xml, "remote_logo_image_checkbutton");
+	logo_button = glade_xml_get_widget (xml, "remote_logo_image_chooserbutton");
 
 	gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (logo_button),
 					        FALSE);
@@ -7938,11 +7717,9 @@ setup_remote_plain_settings (void)
 	GtkSizeGroup *size_group;
 	GtkWidget *image_checkbutton;
 	GtkWidget *color_checkbutton;
-	
-	image_checkbutton = glade_helper_get (xml, "remote_background_image_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
-	color_checkbutton = glade_helper_get (xml, "remote_background_color_checkbutton",
-	                                      GTK_TYPE_CHECK_BUTTON);
+
+	image_checkbutton = glade_xml_get_widget (xml, "remote_background_image_checkbutton");
+	color_checkbutton = glade_xml_get_widget (xml, "remote_background_color_checkbutton");
 
 	size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 	gtk_size_group_add_widget (size_group, image_checkbutton);
@@ -7978,27 +7755,20 @@ setup_remote_themed_settings (void)
 	GtkWidget *style_label;
 	GtkWidget *theme_label;
 	GtkSizeGroup *size_group;
-	
-	GtkWidget *theme_list = glade_helper_get (xml, "gg_theme_list_remote",
-						  GTK_TYPE_TREE_VIEW);
-	GtkWidget *theme_list_local = glade_helper_get (xml, "gg_theme_list",
-						  GTK_TYPE_TREE_VIEW);					  
-	GtkWidget *button = glade_helper_get (xml, "gg_install_new_theme_remote",
-					      GTK_TYPE_BUTTON);
-	GtkWidget *del_button = glade_helper_get (xml, "gg_delete_theme_remote",
-						  GTK_TYPE_BUTTON);
-	GtkWidget *mode_combobox = glade_helper_get (xml, "gg_mode_combobox_remote",
-						     GTK_TYPE_COMBO_BOX);
 
-	style_label = glade_helper_get (xml, "remote_stylelabel", GTK_TYPE_LABEL);
-	theme_label = glade_helper_get (xml, "remote_theme_label", GTK_TYPE_LABEL);
+	GtkWidget *theme_list = glade_xml_get_widget (xml, "gg_theme_list_remote");
+	GtkWidget *theme_list_local = glade_xml_get_widget (xml, "gg_theme_list");
+	GtkWidget *button = glade_xml_get_widget (xml, "gg_install_new_theme_remote");
+	GtkWidget *del_button = glade_xml_get_widget (xml, "gg_delete_theme_remote");
+	GtkWidget *mode_combobox = glade_xml_get_widget (xml, "gg_mode_combobox_remote");
+
+	style_label = glade_xml_get_widget (xml, "remote_stylelabel");
+	theme_label = glade_xml_get_widget (xml, "remote_theme_label");
 	size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 	gtk_size_group_add_widget (size_group, style_label);
 	gtk_size_group_add_widget (size_group, theme_label);
 
-	color_colorbutton = glade_helper_get (xml, 
-	                                      "remote_background_theme_colorbutton",
-	                                      GTK_TYPE_COLOR_BUTTON);
+	color_colorbutton = glade_xml_get_widget (xml, "remote_background_theme_colorbutton");
 
 	g_object_set_data (G_OBJECT (color_colorbutton), "key",
 	                   GDM_KEY_GRAPHICAL_THEMED_COLOR);
@@ -8103,9 +7873,8 @@ static void
 setup_remote_tab (void)
 {
 	GtkWidget *xdmcp_button;
-	
-	xdmcp_button = glade_helper_get (xml, "xdmcp_configbutton",
-	                                 GTK_TYPE_BUTTON);						
+
+	xdmcp_button = glade_xml_get_widget (xml, "xdmcp_configbutton");
 
 #ifndef HAVE_LIBXDMCP
 	gtk_widget_set_sensitive (xdmcp_button, FALSE);
@@ -8124,20 +7893,16 @@ setup_gui (void)
 {
 	GtkWidget *dialog;
 
-	xml = glade_helper_load ("gdmsetup.glade",
-				 "setup_dialog",
-				 GTK_TYPE_DIALOG,
-				 TRUE /* dump_on_destroy */);
+	xml = glade_xml_new (GDM_GLADE_DIR "/gdmsetup.glade", "setup_dialog", NULL);
 
-	dialog = glade_helper_get (xml, "setup_dialog", GTK_TYPE_DIALOG);
+	dialog = glade_xml_get_widget (xml, "setup_dialog");
 
 	g_signal_connect (G_OBJECT (dialog), "delete_event",
 			  G_CALLBACK (delete_event), NULL);
 	g_signal_connect (G_OBJECT (dialog), "response",
 			  G_CALLBACK (dialog_response), NULL);
 
-	setup_notebook = glade_helper_get (xml, "setup_notebook",
-	                                   GTK_TYPE_NOTEBOOK);
+	setup_notebook = glade_xml_get_widget (xml, "setup_notebook");
 
 	/* Markup glade labels */
 	glade_helper_tagify_label (xml, "themes_label", "b");
@@ -8220,8 +7985,7 @@ static void
 update_sensitivity (void)
 {
 	gboolean sensitive = get_sensitivity ();
-	GtkWidget *setup_dialog = glade_helper_get (xml, "setup_dialog",
-						    GTK_TYPE_WINDOW);
+	GtkWidget *setup_dialog = glade_xml_get_widget (xml, "setup_dialog");
 	gtk_widget_set_sensitive (setup_dialog, sensitive);
 	if (sensitive)
 		unsetup_window_cursor ();
@@ -8303,13 +8067,13 @@ apply_user_changes (GObject *object, gin
 		
 		GtkWidget *prompt;
 		
-		prompt = ve_hig_dialog_new (GTK_WINDOW (dialog),
-					    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-					    GTK_MESSAGE_WARNING,
-					    GTK_BUTTONS_OK,
-					    _("Random theme mode change"),
-					    _("Since no themes were selected in random theme mode"
-					      " switching back to single theme mode."));
+		prompt = hig_dialog_new (GTK_WINDOW (dialog),
+					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_WARNING,
+					 GTK_BUTTONS_OK,
+					 _("Random theme mode change"),
+					 _("Since no themes were selected in random theme mode"
+					   " switching back to single theme mode."));
 		
 		gtk_dialog_run (GTK_DIALOG (prompt));
 		gtk_widget_destroy (prompt);	
@@ -8321,13 +8085,13 @@ apply_user_changes (GObject *object, gin
 		GtkWidget *prompt;
 		gint response;
 
-		prompt = ve_hig_dialog_new (GTK_WINDOW (dialog),
-		                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-		                            GTK_MESSAGE_WARNING,
-		                            GTK_BUTTONS_NONE,
-		                            _("Apply the changes to users before closing?"),
-		                            _("If you don't apply, the changes made on "
-		                              "the Users tab will be disregarded."));
+		prompt = hig_dialog_new (GTK_WINDOW (dialog),
+					 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+					 GTK_MESSAGE_WARNING,
+					 GTK_BUTTONS_NONE,
+					 _("Apply the changes to users before closing?"),
+					 _("If you don't apply, the changes made on "
+					   "the Users tab will be disregarded."));
 
 		gtk_dialog_add_button (GTK_DIALOG (prompt), _("Close _without Applying"), GTK_RESPONSE_CLOSE);
 		gtk_dialog_add_button (GTK_DIALOG (prompt), "gtk-cancel", GTK_RESPONSE_CANCEL); 
@@ -8339,8 +8103,7 @@ apply_user_changes (GObject *object, gin
 		if (response == GTK_RESPONSE_APPLY) {
 			GtkWidget *apply_button;
 
-			apply_button = glade_helper_get (xml, "fb_faceapply",
-                                                        GTK_TYPE_WIDGET);
+			apply_button = glade_xml_get_widget (xml, "fb_faceapply");
 			g_signal_emit_by_name (G_OBJECT (apply_button), "clicked");
 		}
 		
@@ -8392,12 +8155,12 @@ main (int argc, char *argv[])
 
 		/* Done using socket */
 		gdmcomm_comm_bulk_stop ();
-		dialog = ve_hig_dialog_new (NULL /* parent */,
-					    GTK_DIALOG_MODAL /* flags */,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("Could not access configuration file (defaults.conf)"),
-					    _("Make sure that the file exists before launching login manager config utility."));
+		dialog = hig_dialog_new (NULL /* parent */,
+					 GTK_DIALOG_MODAL /* flags */,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Could not access configuration file (defaults.conf)"),
+					 _("Make sure that the file exists before launching login manager config utility."));
 		
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
@@ -8409,12 +8172,12 @@ main (int argc, char *argv[])
 
 		/* Done using socket */
 		gdmcomm_comm_bulk_stop ();
-		dialog = ve_hig_dialog_new (NULL /* parent */,
-					    GTK_DIALOG_MODAL /* flags */,
-					    GTK_MESSAGE_ERROR,
-					    GTK_BUTTONS_OK,
-					    _("Could not access configuration file (custom.conf)"),
-					    _("Make sure that the file exists before launching login manager config utility."));
+		dialog = hig_dialog_new (NULL /* parent */,
+					 GTK_DIALOG_MODAL /* flags */,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Could not access configuration file (custom.conf)"),
+					 _("Make sure that the file exists before launching login manager config utility."));
 
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
@@ -8446,8 +8209,6 @@ main (int argc, char *argv[])
 		g_type_class_ref (GTK_TYPE_WIDGET);	
 	}
 
-	glade_helper_add_glade_directory (GDM_GLADE_DIR);
-
 	/* Make sure the user is root. If not, they shouldn't be messing with 
 	 * GDM's configuration.
 	 */
@@ -8459,13 +8220,12 @@ main (int argc, char *argv[])
 		/* Done using socket */
 		gdmcomm_comm_bulk_stop ();
 
-		fatal_error = 
-			ve_hig_dialog_new (NULL /* parent */,
-					   GTK_DIALOG_MODAL /* flags */,
-					   GTK_MESSAGE_ERROR,
-					   GTK_BUTTONS_OK,
-					   _("You must be the root user to configure GDM."),
-					   "");
+		fatal_error = hig_dialog_new (NULL /* parent */,
+					      GTK_DIALOG_MODAL /* flags */,
+					      GTK_MESSAGE_ERROR,
+					      GTK_BUTTONS_OK,
+					      _("You must be the root user to configure GDM."),
+					      "");
 		if (RUNNING_UNDER_GDM)
 			setup_cursor (GDK_LEFT_PTR);
 		gtk_dialog_run (GTK_DIALOG (fatal_error));
Index: gui/gdmchooser.c
===================================================================
--- gui/gdmchooser.c	(revision 4683)
+++ gui/gdmchooser.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1998, 1999, 2000 Martin K, Petersen <mkp@mkp.net>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -57,7 +59,7 @@
 #include "gdmcommon.h"
 #include "gdmconfig.h"
 
-#include "viciousui.h"
+#include "gdm-common.h"
 
 static gboolean RUNNING_UNDER_GDM = FALSE;
 
@@ -222,7 +224,7 @@ gdm_chooser_host_alloc (const char *host
 
     host->addrtype = family;
     chooser_hosts = g_list_prepend (chooser_hosts, host);
-    
+
     if ( ! willing)
 	    return host;
 
@@ -239,7 +241,7 @@ gdm_chooser_host_alloc (const char *host
 
 	w = gdk_pixbuf_get_width (img);
 	h = gdk_pixbuf_get_height (img);
-	
+
 	maxw = gdm_config_get_int (GDM_KEY_MAX_ICON_WIDTH);
 	maxh = gdm_config_get_int (GDM_KEY_MAX_ICON_HEIGHT);
 
@@ -426,6 +428,32 @@ gdm_addr_known (char *ia, gint family)
 	return FALSE;
 }
 
+static GtkWidget *
+hig_dialog_new (GtkWindow      *parent,
+		GtkDialogFlags flags,
+		GtkMessageType type,
+		GtkButtonsType buttons,
+		const gchar    *primary_message,
+		const gchar    *secondary_message)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+		                         GTK_DIALOG_DESTROY_WITH_PARENT,
+		                         type,
+		                         buttons,
+		                         "%s", primary_message);
+
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+		                                  "%s", secondary_message);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), "");
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
+
+  	return dialog;
+}
+
 static gboolean
 gdm_chooser_decode_packet (GIOChannel   *source,
 			   GIOCondition  condition,
@@ -618,13 +646,12 @@ gdm_chooser_decode_packet (GIOChannel   
 	                             "Please try again later."),
 	                           added_host);
 
-	    dialog = ve_hig_dialog_new
-		    (GTK_WINDOW (chooser) /* parent */,
-		     GTK_DIALOG_MODAL /* flags */,
-		     GTK_MESSAGE_ERROR,
-		     GTK_BUTTONS_OK,
-		     _("Cannot connect to remote server"),
-		     msg);
+	    dialog = hig_dialog_new (GTK_WINDOW (chooser) /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_ERROR,
+				     GTK_BUTTONS_OK,
+				     _("Cannot connect to remote server"),
+				     msg);
 
 	    g_free (msg);
 
@@ -1282,13 +1309,12 @@ add_check (gpointer data)
 		                       added_host,
 		                       ADD_TIMEOUT / 1000);
 
-		dialog = ve_hig_dialog_new
-			(GTK_WINDOW (chooser) /* parent */,
-			 GTK_DIALOG_MODAL /* flags */,
-			 GTK_MESSAGE_ERROR,
-			 GTK_BUTTONS_OK,
-			 _("Did not receive response from server"),
-			 msg);
+		dialog = hig_dialog_new (GTK_WINDOW (chooser) /* parent */,
+					 GTK_DIALOG_MODAL /* flags */,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Did not receive response from server"),
+					 msg);
 
 		g_free (msg);
 
@@ -1393,14 +1419,12 @@ gdm_chooser_add_host (void)
 		                         "Perhaps you have mistyped it."),
 		                         name);
 
-		dialog = ve_hig_dialog_new
-		(GTK_WINDOW (chooser) /* parent */,
-		 GTK_DIALOG_MODAL /* flags */,
-		 GTK_MESSAGE_ERROR,
-		 GTK_BUTTONS_OK,
-		 _("Cannot find host"),
-		 msg);
-		 
+		dialog = hig_dialog_new (GTK_WINDOW (chooser) /* parent */,
+					 GTK_DIALOG_MODAL /* flags */,
+					 GTK_MESSAGE_ERROR,
+					 GTK_BUTTONS_OK,
+					 _("Cannot find host"),
+					 msg);
 		g_free (msg);
 
 		if (RUNNING_UNDER_GDM)
@@ -1621,7 +1645,7 @@ display_chooser_information (void)
 	gdm_wm_no_login_focus_pop ();
 }
 
-static void 
+static void
 gdm_chooser_gui_init (void)
 {
 	GtkTreeSelection *selection;
@@ -1630,138 +1654,121 @@ gdm_chooser_gui_init (void)
 	int width;
 	int height;
 
-	glade_helper_add_glade_directory (GDM_GLADE_DIR);
-	glade_helper_search_gnome_dirs (FALSE);
-
-    /* Enable theme */
-    if (RUNNING_UNDER_GDM) {
-	const char *theme_name;
+	/* Enable theme */
+	if (RUNNING_UNDER_GDM) {
+		const char *theme_name;
 
-	if ( ! ve_string_empty (gdm_config_get_string (GDM_KEY_GTKRC)))
-		gtk_rc_parse (gdm_config_get_string (GDM_KEY_GTKRC));
+		if ( ! ve_string_empty (gdm_config_get_string (GDM_KEY_GTKRC)))
+			gtk_rc_parse (gdm_config_get_string (GDM_KEY_GTKRC));
 
-	theme_name = g_getenv ("GDM_GTK_THEME");
-	if (ve_string_empty (theme_name))
-		theme_name = gdm_config_get_string (GDM_KEY_GTK_THEME);
+		theme_name = g_getenv ("GDM_GTK_THEME");
+		if (ve_string_empty (theme_name))
+			theme_name = gdm_config_get_string (GDM_KEY_GTK_THEME);
 
-	if ( ! ve_string_empty (theme_name)) {
-		gdm_set_theme (theme_name);
+		if ( ! ve_string_empty (theme_name)) {
+			gdm_set_theme (theme_name);
+		}
 	}
-    }
 
-    defaulthosticon = gdm_config_get_string (GDM_KEY_DEFAULT_HOST_IMG);
+	defaulthosticon = gdm_config_get_string (GDM_KEY_DEFAULT_HOST_IMG);
 
-    /* Load default host image */
-    if (g_access (defaulthosticon, R_OK) != 0) {
-	gdm_common_error ("Could not open default host icon: %s", defaulthosticon);
-	/* bogus image */
-	defhostimg = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
-				     FALSE /* has_alpha */,
-				     8 /* bits_per_sample */,
-				     48 /* width */,
-				     48 /* height */);
-    } else {
-	defhostimg = gdk_pixbuf_new_from_file (defaulthosticon, NULL);
-    }
+	/* Load default host image */
+	if (g_access (defaulthosticon, R_OK) != 0) {
+		gdm_common_error ("Could not open default host icon: %s", defaulthosticon);
+		/* bogus image */
+		defhostimg = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+					     FALSE /* has_alpha */,
+					     8 /* bits_per_sample */,
+					     48 /* width */,
+					     48 /* height */);
+	} else {
+		defhostimg = gdk_pixbuf_new_from_file (defaulthosticon, NULL);
+	}
 
-    /* Main window */
-    chooser_app = glade_helper_load ("gdmchooser.glade",
+	/* Main window */
+	chooser_app = glade_xml_new (GDM_GLADE_DIR "gdmchooser.glade",
 				     "gdmchooser_main",
-				     GTK_TYPE_DIALOG,
-				     FALSE /* dump_on_destroy */);
-    glade_xml_signal_autoconnect (chooser_app);
-   
-    chooser = glade_helper_get (chooser_app, "gdmchooser_main",
-				GTK_TYPE_DIALOG);
-    manage = glade_helper_get (chooser_app, "connect_button",
-			       GTK_TYPE_BUTTON);
-    rescan = glade_helper_get (chooser_app, "rescan_button",
-			       GTK_TYPE_BUTTON);
-    cancel = glade_helper_get (chooser_app, "quit_button",
-			       GTK_TYPE_BUTTON);
-    status_label = glade_helper_get (chooser_app, "status_label",
-				     GTK_TYPE_LABEL);
-    add_entry = glade_helper_get (chooser_app, "add_entry",
-				  GTK_TYPE_ENTRY);
-    add_button = glade_helper_get (chooser_app, "add_button",
-				   GTK_TYPE_BUTTON);
-
-    browser = glade_helper_get (chooser_app, "chooser_iconlist",
-				GTK_TYPE_TREE_VIEW);
-
-    gtk_dialog_set_has_separator (GTK_DIALOG (chooser), FALSE);
-
-    gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (browser), TRUE);
-
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
-    gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
-    g_signal_connect (selection, "changed",
-		      G_CALLBACK (host_selected),
-		      NULL);
-    g_signal_connect (browser, "row_activated",
-		      G_CALLBACK (row_activated),
-		      NULL);
-
-    browser_model = (GtkTreeModel *)gtk_list_store_new (3,
-							GDK_TYPE_PIXBUF,
-							G_TYPE_STRING,
-							G_TYPE_POINTER);
-    gtk_tree_view_set_model (GTK_TREE_VIEW (browser), browser_model);
-    column = gtk_tree_view_column_new_with_attributes
-	    ("Icon",
-	     gtk_cell_renderer_pixbuf_new (),
-	     "pixbuf", CHOOSER_LIST_ICON_COLUMN,
-	     NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW (browser), column);
-
-    column = gtk_tree_view_column_new_with_attributes
-	    ("Hostname",
-	     gtk_cell_renderer_text_new (),
-	     "markup", CHOOSER_LIST_LABEL_COLUMN,
-	     NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW (browser), column);
-
-    gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (browser_model),
-					  CHOOSER_LIST_LABEL_COLUMN,
-					  GTK_SORT_ASCENDING);
-
-
-    if ( ! gdm_config_get_bool (GDM_KEY_ALLOW_ADD)) {
-	    GtkWidget *w = glade_helper_get (chooser_app, "add_hbox",
-					     GTK_TYPE_HBOX);
-	    gtk_widget_hide (w);
-    }
-
-    gtk_window_get_size (GTK_WINDOW (chooser),
-			 &width, &height);
-    if (RUNNING_UNDER_GDM) {
-	    if (width > gdm_wm_screen.width)
-		    width = gdm_wm_screen.width;
-	    if (height > gdm_wm_screen.height)
-		    height = gdm_wm_screen.height;
-    } else {
-	    if (width > gdk_screen_width ())
-		    width = gdk_screen_width ();
-	    if (height > gdk_screen_height ())
-		    height = gdk_screen_height ();
-    }
-    gtk_widget_set_size_request (GTK_WIDGET (chooser), 
-				 width, height);
-    gtk_window_set_default_size (GTK_WINDOW (chooser), 
-				 width, height);
-    gtk_window_resize (GTK_WINDOW (chooser), 
-		       width, height);
-
-
-    /* cursor blinking is evil on remote displays, don't do it forever */
-    gdm_common_setup_blinking ();
-    gdm_common_setup_blinking_entry (add_entry);
-
-    if (RUNNING_UNDER_GDM) {
-	    gtk_widget_show_now (chooser);
-	    gdm_wm_center_window (GTK_WINDOW (chooser));
-    }
+				     NULL);
+	glade_xml_signal_autoconnect (chooser_app);
+	chooser = glade_xml_get_widget (chooser_app, "gdmchooser_main");
+	manage = glade_xml_get_widget (chooser_app, "connect_button");
+	rescan = glade_xml_get_widget (chooser_app, "rescan_button");
+	cancel = glade_xml_get_widget (chooser_app, "quit_button");
+	status_label = glade_xml_get_widget (chooser_app, "status_label");
+	add_entry = glade_xml_get_widget (chooser_app, "add_entry");
+	add_button = glade_xml_get_widget (chooser_app, "add_button");
+	browser = glade_xml_get_widget (chooser_app, "chooser_iconlist");
+
+	gtk_dialog_set_has_separator (GTK_DIALOG (chooser), FALSE);
+
+	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (browser), TRUE);
+
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
+	gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+	g_signal_connect (selection, "changed",
+			  G_CALLBACK (host_selected),
+			  NULL);
+	g_signal_connect (browser, "row_activated",
+			  G_CALLBACK (row_activated),
+			  NULL);
+
+	browser_model = (GtkTreeModel *)gtk_list_store_new (3,
+							    GDK_TYPE_PIXBUF,
+							    G_TYPE_STRING,
+							    G_TYPE_POINTER);
+	gtk_tree_view_set_model (GTK_TREE_VIEW (browser), browser_model);
+	column = gtk_tree_view_column_new_with_attributes ("Icon",
+							   gtk_cell_renderer_pixbuf_new (),
+							   "pixbuf", CHOOSER_LIST_ICON_COLUMN,
+							   NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (browser), column);
+
+	column = gtk_tree_view_column_new_with_attributes ("Hostname",
+							   gtk_cell_renderer_text_new (),
+							   "markup", CHOOSER_LIST_LABEL_COLUMN,
+							   NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (browser), column);
+
+	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (browser_model),
+					      CHOOSER_LIST_LABEL_COLUMN,
+					      GTK_SORT_ASCENDING);
+
+
+	if ( ! gdm_config_get_bool (GDM_KEY_ALLOW_ADD)) {
+		GtkWidget *w = glade_xml_get_widget (chooser_app, "add_hbox");
+		gtk_widget_hide (w);
+	}
+
+	gtk_window_get_size (GTK_WINDOW (chooser),
+			     &width, &height);
+	if (RUNNING_UNDER_GDM) {
+		if (width > gdm_wm_screen.width)
+			width = gdm_wm_screen.width;
+		if (height > gdm_wm_screen.height)
+			height = gdm_wm_screen.height;
+	} else {
+		if (width > gdk_screen_width ())
+			width = gdk_screen_width ();
+		if (height > gdk_screen_height ())
+			height = gdk_screen_height ();
+	}
+	gtk_widget_set_size_request (GTK_WIDGET (chooser),
+				     width, height);
+	gtk_window_set_default_size (GTK_WINDOW (chooser),
+				     width, height);
+	gtk_window_resize (GTK_WINDOW (chooser),
+			   width, height);
+
+
+	/* cursor blinking is evil on remote displays, don't do it forever */
+	gdm_common_setup_blinking ();
+	gdm_common_setup_blinking_entry (add_entry);
+
+	if (RUNNING_UNDER_GDM) {
+		gtk_widget_show_now (chooser);
+		gdm_wm_center_window (GTK_WINDOW (chooser));
+	}
 }
 
 /* 
@@ -2033,14 +2040,14 @@ main (int argc, char *argv[])
 	                             "Please restart the GDM daemon or the computer."),
 	                           VERSION, gdm_version);
 
-	    dialog = ve_hig_dialog_new (NULL /* parent */,
-					GTK_DIALOG_MODAL /* flags */,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_OK,
-					_("Cannot run chooser"),
-					msg);
+	    dialog = hig_dialog_new (NULL /* parent */,
+				     GTK_DIALOG_MODAL /* flags */,
+				     GTK_MESSAGE_ERROR,
+				     GTK_BUTTONS_OK,
+				     _("Cannot run chooser"),
+				     msg);
 	    g_free (msg);
-	    
+
 	    gtk_widget_show_all (dialog);
 	    gdm_wm_center_window (GTK_WINDOW (dialog));
 
Index: gui/misc.c
===================================================================
--- gui/misc.c	(revision 4683)
+++ gui/misc.c	(working copy)
@@ -26,6 +26,8 @@
 #include "misc.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 #define INDEX_FILE1 "index.theme"
 #define INDEX_FILE2 "index.theme.disabled"
 
Index: gui/gdmconfig.c
===================================================================
--- gui/gdmconfig.c	(revision 4683)
+++ gui/gdmconfig.c	(working copy)
@@ -31,7 +31,7 @@
 #include "gdmcomm.h"
 #include "gdmconfig.h"
 
-#include "vicious.h"
+#include "gdm-common.h"
 
 static GHashTable *int_hash       = NULL;
 static GHashTable *bool_hash      = NULL;
@@ -75,8 +75,9 @@ gdm_config_set_comm_retries (int tries)
  * Accesses hash with key, stripping it so it doesn't contain
  * a default value.
  */
-static gpointer 
-gdm_config_hash_lookup (GHashTable *hash, gchar *key)
+static gpointer
+gdm_config_hash_lookup (GHashTable *hash,
+			const gchar *key)
 {
 	gchar *p;
 	gpointer *ret;
@@ -99,7 +100,9 @@ gdm_config_hash_lookup (GHashTable *hash
  * a default value.
  */
 static void
-gdm_config_add_hash (GHashTable *hash, gchar *key, gpointer value)
+gdm_config_add_hash (GHashTable *hash,
+		     const gchar *key,
+		     gpointer value)
 {
 	gchar *p;
 	gchar *newkey = g_strdup (key);
@@ -120,7 +123,7 @@ gdm_config_add_hash (GHashTable *hash, g
  * doesn't contain a default value.
  */
 static gchar *
-gdm_config_get_result (gchar *key)
+gdm_config_get_result (const gchar *key)
 {
 	gchar *p;
 	gchar *newkey  = g_strdup (key);
@@ -154,7 +157,8 @@ gdm_config_get_result (gchar *key)
  * Calls daemon to get details for an xserver config.
  */
 static gchar *
-gdm_config_get_xserver_details (gchar *xserver, gchar *key)
+gdm_config_get_xserver_details (const gchar *xserver,
+				const gchar *key)
 {
 	gchar *command = NULL;
 	gchar *result  = NULL;
@@ -312,7 +316,10 @@ gdm_config_get_xservers (gboolean flexib
  * access is faster.
  */
 static gchar *
-_gdm_config_get_string (gchar *key, gboolean reload, gboolean *changed, gboolean doing_translated)
+_gdm_config_get_string (const gchar *key,
+			gboolean reload,
+			gboolean *changed,
+			gboolean doing_translated)
 {
 	gchar *hashretval = NULL;
 	gchar *result = NULL;
@@ -381,7 +388,7 @@ _gdm_config_get_string (gchar *key, gboo
 }
 
 gchar *
-gdm_config_get_string (gchar *key)
+gdm_config_get_string (const gchar *key)
 {
    if (gdm_never_cache == TRUE)
       return _gdm_config_get_string (key, TRUE, NULL, FALSE);
@@ -400,11 +407,14 @@ gdm_config_get_string (gchar *key)
  * found.
  */ 
 static gchar *
-_gdm_config_get_translated_string (gchar *key, gboolean reload, gboolean *changed)
+_gdm_config_get_translated_string (const gchar *key,
+				   gboolean reload,
+				   gboolean *changed)
 {
-        const GList *li;
+	const char * const *langs;
         char *newkey;
         char *def;
+	int   i;
 
 	/* Strip key */
 	newkey = g_strdup (key);
@@ -412,16 +422,18 @@ _gdm_config_get_translated_string (gchar
 	if (def != NULL)
 		*def = '\0';
 
-	for (li = ve_i18n_get_language_list ("LC_MESSAGES");
-	     li != NULL;
-	     li = li->next) {
-                gchar *full = g_strdup_printf ("%s[%s]", newkey, (char *)li->data);
+	langs = g_get_language_names ();
+
+	for (i = 0; langs[i] != NULL; i++) {
+                gchar *full;
+		gchar *val;
 
 		/*
 		 * Pass TRUE for last argument so it doesn't print errors for
 		 * failing to find the key, since this is expected
 		 */
-		gchar *val = _gdm_config_get_string (full, reload, changed, TRUE);
+		full = g_strdup_printf ("%s[%s]", newkey, langs[i]);
+		val = _gdm_config_get_string (full, reload, changed, TRUE);
 
 		g_free (full);
 
@@ -438,7 +450,7 @@ _gdm_config_get_translated_string (gchar
 }
 
 gchar *
-gdm_config_get_translated_string (gchar *key)
+gdm_config_get_translated_string (const gchar *key)
 {
    if (gdm_never_cache == TRUE)
       return _gdm_config_get_translated_string (key, TRUE, NULL);
@@ -454,7 +466,9 @@ gdm_config_get_translated_string (gchar 
  * access is faster.
  */
 static gint
-_gdm_config_get_int (gchar *key, gboolean reload, gboolean *changed)
+_gdm_config_get_int (const gchar *key,
+		     gboolean reload,
+		     gboolean *changed)
 {
 	gint  *hashretval = NULL;
 	gchar *result = NULL;
@@ -517,7 +531,7 @@ _gdm_config_get_int (gchar *key, gboolea
 }
 
 gint
-gdm_config_get_int (gchar *key)
+gdm_config_get_int (const gchar *key)
 {
    if (gdm_never_cache == TRUE)
       return _gdm_config_get_int (key, TRUE, NULL);
@@ -533,7 +547,9 @@ gdm_config_get_int (gchar *key)
  * access is faster.
  */
 static gboolean
-_gdm_config_get_bool (gchar *key, gboolean reload, gboolean *changed)
+_gdm_config_get_bool (const gchar *key,
+		      gboolean reload,
+		      gboolean *changed)
 {
 	gboolean *hashretval = NULL;
 	gchar    *result;
@@ -608,7 +624,7 @@ _gdm_config_get_bool (gchar *key, gboole
 }
 
 gboolean
-gdm_config_get_bool (gchar *key)
+gdm_config_get_bool (const gchar *key)
 {
    if (gdm_never_cache == TRUE)
       return _gdm_config_get_bool (key, TRUE, NULL);
@@ -625,7 +641,7 @@ gdm_config_get_bool (gchar *key)
  * otherwise.
  */
 gboolean
-gdm_config_reload_string (gchar *key)
+gdm_config_reload_string (const gchar *key)
 {
 	gboolean changed;
 	_gdm_config_get_string (key, TRUE, &changed, FALSE);
@@ -633,7 +649,7 @@ gdm_config_reload_string (gchar *key)
 }
 
 gboolean
-gdm_config_reload_int (gchar *key)
+gdm_config_reload_int (const gchar *key)
 {
 	gboolean changed;
 	_gdm_config_get_int (key, TRUE, &changed);
@@ -641,7 +657,7 @@ gdm_config_reload_int (gchar *key)
 }
 
 gboolean
-gdm_config_reload_bool (gchar *key)
+gdm_config_reload_bool (const gchar *key)
 {
 	gboolean changed;
 	_gdm_config_get_bool (key, TRUE, &changed);
@@ -649,28 +665,37 @@ gdm_config_reload_bool (gchar *key)
 }
 
 void
-gdm_save_customlist_data (gchar *file, gchar *key, gchar *id)
+gdm_save_customlist_data (const gchar *file,
+			  const gchar *key,
+			  const gchar *id)
 {
-	VeConfig *cfg;
-	cfg = ve_config_get (file);
-	g_free (file);
-	ve_config_set_string (cfg, key, ve_sure_string (id));
-	ve_config_save (cfg, FALSE);
+	GKeyFile *cfg;
+
+	cfg = gdm_common_config_load (file, NULL);
+	gdm_common_config_set_string (cfg, key, ve_sure_string (id));
+	gdm_common_config_save (cfg, file, NULL);
+
+	g_key_file_free (cfg);
 }
 
 gchar *
-gdm_get_theme_greeter (gchar *file, const char *fallback)
+gdm_get_theme_greeter (const gchar *file,
+		       const char *fallback)
 {
-	VeConfig *config = ve_config_new (file);
+	GKeyFile *config;
 	gchar *s;
 
-	s = ve_config_get_translated_string (config, "GdmGreeterTheme/Greeter");
+	config = gdm_common_config_load (file, NULL);
+	s = NULL;
+	gdm_common_config_get_translated_string (config, "GdmGreeterTheme/Greeter", &s, NULL);
 
 	if (s == NULL || s[0] == '\0') {
 		g_free (s);
 		s = g_strdup_printf ("%s.xml", fallback);
 	}
 
+	g_key_file_free (config);
+
 	return s;
 }
 
Index: common/gdm-common-config.c
===================================================================
--- common/gdm-common-config.c	(revision 0)
+++ common/gdm-common-config.c	(revision 0)
@@ -0,0 +1,398 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <syslog.h>
+
+#include <glib.h>
+
+#include "gdm-common-config.h"
+
+gboolean
+gdm_common_config_parse_key_string (const char *keystring,
+				    char      **group,
+				    char      **key,
+				    char      **value)
+{
+	char   **split1;
+	char   **split2;
+	char    *g;
+	char    *k;
+	char    *v;
+	gboolean ret;
+
+	ret = FALSE;
+	g = k = v = NULL;
+	split1 = split2 = NULL;
+
+	split1 = g_strsplit (keystring, "/", 2);
+	if (split1 == NULL) {
+		goto out;
+	}
+
+	g = split1 [0];
+
+	split2 = g_strsplit (split1 [1], "=", 2);
+	if (split2 == NULL) {
+		k = split1 [1];
+	} else {
+		k = split2 [0];
+		v = split2 [1];
+	}
+
+	ret = TRUE;
+ out:
+	if (group != NULL) {
+		*group = g_strdup (g);
+	}
+	if (key != NULL) {
+		*key = g_strdup (k);
+	}
+	if (value != NULL) {
+		*value = g_strdup (v);
+	}
+
+	g_strfreev (split1);
+	g_strfreev (split2);
+
+	return ret;
+}
+
+GKeyFile *
+gdm_common_config_load (const char *filename,
+			GError    **error)
+{
+	GKeyFile *config;
+	GError   *local_error;
+	gboolean  res;
+
+	config = g_key_file_new ();
+
+	local_error = NULL;
+	res = g_key_file_load_from_file (config,
+					 filename,
+					 G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
+					 &local_error);
+	if (! res) {
+		g_propagate_error (error, local_error);
+		g_key_file_free (config);
+		return NULL;
+	}
+
+	return config;
+}
+
+gboolean
+gdm_common_config_save (GKeyFile   *config,
+			const char *filename,
+			GError    **error)
+{
+	GError   *local_error;
+	gboolean  res;
+	char     *contents;
+	gsize     length;
+
+	local_error = NULL;
+	contents = g_key_file_to_data (config, &length, &local_error);
+	if (local_error != NULL) {
+		g_propagate_error (error, local_error);
+		return FALSE;
+	}
+
+	local_error = NULL;
+	res = g_file_set_contents (filename,
+				   contents,
+				   length,
+				   &local_error);
+	if (local_error != NULL) {
+		g_propagate_error (error, local_error);
+		g_free (contents);
+		return FALSE;
+	}
+
+	g_free (contents);
+	return TRUE;
+}
+
+gboolean
+gdm_common_config_get_int (GKeyFile   *config,
+			   const char *keystring,
+			   int        *value,
+			   GError    **error)
+{
+	char   *group;
+	char   *key;
+	char   *default_value;
+	int     val;
+	GError *local_error;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value))
+		return FALSE;
+
+	local_error = NULL;
+	val = g_key_file_get_integer (config,
+				      group,
+				      key,
+				      &local_error);
+	if (local_error != NULL) {
+		/* use the default */
+		if (default_value != NULL) {
+			val = atoi (default_value);
+		} else {
+			val = 0;
+		}
+		g_propagate_error (error, local_error);
+	}
+
+	*value = val;
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+
+	return TRUE;
+}
+
+gboolean
+gdm_common_config_get_translated_string (GKeyFile   *config,
+					 const char *keystring,
+					 char      **value,
+					 GError    **error)
+{
+	char   *group;
+	char   *key;
+	char   *default_value;
+	char   *val;
+	const char * const *langs;
+	int     i;
+
+	val = NULL;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value))
+		return FALSE;
+
+	langs = g_get_language_names ();
+
+	for (i = 0; langs[i] != NULL; i++) {
+		const char *locale;
+		locale = langs[i];
+
+		val = g_key_file_get_locale_string (config,
+						    group,
+						    key,
+						    locale,
+                                                    NULL);
+		if (val != NULL) {
+			break;
+		}
+	}
+
+	if (val == NULL) {
+		/* use the default */
+		val = g_strdup (default_value);
+	}
+
+	*value = val;
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+
+	return TRUE;
+}
+
+gboolean
+gdm_common_config_get_string (GKeyFile   *config,
+			      const char *keystring,
+			      char      **value,
+			      GError    **error)
+{
+	char   *group;
+	char   *key;
+	char   *default_value;
+	char   *val;
+	GError *local_error;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value)) {
+		g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE, "Unable to parse key: %s", keystring);
+		return FALSE;
+	}
+
+	local_error = NULL;
+	val = g_key_file_get_string (config,
+				     group,
+				     key,
+				     &local_error);
+	if (local_error != NULL) {
+		/* use the default */
+		val = g_strdup (default_value);
+		g_propagate_error (error, local_error);
+	}
+
+	*value = val;
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+
+	return TRUE;
+}
+
+gboolean
+gdm_common_config_get_boolean (GKeyFile   *config,
+			       const char *keystring,
+			       gboolean   *value,
+			       GError    **error)
+{
+	char    *group;
+	char    *key;
+	char    *default_value;
+	gboolean val;
+	GError  *local_error;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value))
+		return FALSE;
+
+	local_error = NULL;
+	val = g_key_file_get_boolean (config,
+				      group,
+				      key,
+				      &local_error);
+	if (local_error != NULL) {
+		/* use the default */
+		if (default_value != NULL &&
+		    (default_value[0] == 'T' ||
+		     default_value[0] == 't' ||
+		     default_value[0] == 'Y' ||
+		     default_value[0] == 'y' ||
+		     atoi (default_value) != 0)) {
+			val = TRUE;
+		} else {
+			val = FALSE;
+		}
+		g_propagate_error (error, local_error);
+	}
+
+	*value = val;
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+
+	return TRUE;
+}
+
+void
+gdm_common_config_set_string (GKeyFile   *config,
+			      const char *keystring,
+			      const char *value)
+{
+	char    *group;
+	char    *key;
+	char    *default_value;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value)) {
+		return;
+	}
+
+	g_key_file_set_string (config, group, key, value);
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+}
+
+void
+gdm_common_config_set_boolean (GKeyFile   *config,
+			       const char *keystring,
+			       gboolean    value)
+{
+	char    *group;
+	char    *key;
+	char    *default_value;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value)) {
+		return;
+	}
+
+	g_key_file_set_boolean (config, group, key, value);
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+}
+
+void
+gdm_common_config_set_int (GKeyFile   *config,
+			   const char *keystring,
+			   int         value)
+{
+	char    *group;
+	char    *key;
+	char    *default_value;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value)) {
+		return;
+	}
+
+	g_key_file_set_integer (config, group, key, value);
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+}
+
+void
+gdm_common_config_remove_key (GKeyFile   *config,
+			      const char *keystring,
+			      GError    **error)
+{
+	char    *group;
+	char    *key;
+	char    *default_value;
+	GError  *local_error;
+
+	group = key = default_value = NULL;
+	if (! gdm_common_config_parse_key_string (keystring, &group, &key, &default_value)) {
+		return;
+	}
+
+	local_error = NULL;
+	g_key_file_remove_key (config, group, key, &local_error);
+	if (local_error != NULL) {
+		g_propagate_error (error, local_error);
+	}
+
+	g_free (key);
+	g_free (group);
+	g_free (default_value);
+}
Index: common/gdm-common.h
===================================================================
--- common/gdm-common.h	(revision 0)
+++ common/gdm-common.h	(revision 0)
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * (c) 2000 Eazel, Inc.
+ * (c) 2001,2002 George Lebl
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GDM_COMMON_H
+#define _GDM_COMMON_H
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <time.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <locale.h>
+
+#include "ve-signal.h"
+#include "gdm-common-config.h"
+
+G_BEGIN_DECLS
+void           ve_clearenv (void);
+char *	       ve_first_word (const char *s);
+gboolean       ve_first_word_executable (const char *s,
+				   gboolean only_existance);
+char *         ve_rest (const char *s);
+
+/* Gets the first existing command out of a list separated by semicolons */
+char *	       ve_get_first_working_command (const char *list,
+					     gboolean only_existance);
+
+gboolean       ve_bool_equal (gboolean a, gboolean b);
+
+gboolean       ve_is_string_in_list (const GList *list,
+				     const char *string);
+gboolean       ve_is_string_in_list_case_no_locale (const GList *list,
+						    const char *string);
+
+#define        ve_string_empty(x) ((x)==NULL||(x)[0]=='\0')
+#define        ve_sure_string(x) ((x)!=NULL?(x):"")
+
+/* Find a file using the specified list of directories, an absolute path is
+ * just checked, whereas a relative path is search in the given directories,
+ */
+char *	       ve_find_file_simple		(const char *filename,
+						 const GList *directories);
+
+/* Find a file using the specified list of directories, an absolute path is
+ * just checked, whereas a relative path is search in the given directories,
+ * gnome_datadir, g_get_prgname() subdirectory, in GNOME_PATH
+ * under /share/ and /share/<g_get_prgname()> */
+char *	       ve_find_file			(const char *filename,
+						 const GList *directories);
+
+/* These two functions will ALWAYS return a non-NULL string,
+ * if there is an error, they return the unconverted string */
+char *         ve_locale_to_utf8 (const char *str);
+char *         ve_locale_from_utf8 (const char *str);
+
+/* These two functions will ALWAYS return a non-NULL string,
+ * if there is an error, they return the unconverted string */
+char *         ve_filename_to_utf8 (const char *str);
+char *         ve_filename_from_utf8 (const char *str);
+
+/* works with utf-8 strings and always returns something */
+char *         ve_strftime (struct tm *the_tm, const char *format);
+
+/* function which doesn't stop on signals */
+pid_t          ve_waitpid_no_signal (pid_t pid, int *status, int options);
+
+/* Testing for existance of a certain locale */
+gboolean       ve_locale_exists (const char *loc);
+
+char *         ve_find_prog_in_path (const char *prog, const char *path);
+gboolean       ve_is_prog_in_path (const char *prog, const char *path);
+
+char          *ve_shell_quote_filename (const char *name);
+
+#define VE_IGNORE_EINTR(expr) \
+	do {		\
+		errno = 0;	\
+		expr;		\
+	} while G_UNLIKELY (errno == EINTR);
+
+G_END_DECLS
+
+#endif /* _GDM_COMMON_H */
Index: common/ve-signal.c
===================================================================
--- common/ve-signal.c	(revision 0)
+++ common/ve-signal.c	(revision 0)
@@ -0,0 +1,160 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Signal routines
+ *
+ * (c) 2000, 2002 Queen of England
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "ve-signal.h"
+
+typedef struct _SignalSource SignalSource;
+struct _SignalSource {
+	GSource     source;
+
+	int         signal;
+	guint8      index;
+	guint8      shift;
+};
+
+static	guint32	signals_notified[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+static gboolean
+ve_signal_prepare (GSource  *source,
+		   int      *timeout)
+{
+	SignalSource *ss = (SignalSource *)source;
+
+	return signals_notified[ss->index] & (1 << ss->shift);
+}
+
+static gboolean
+ve_signal_check (GSource *source)
+{
+	SignalSource *ss = (SignalSource *)source;
+
+	return signals_notified[ss->index] & (1 << ss->shift);
+}
+
+static gboolean
+ve_signal_dispatch (GSource     *source,
+		    GSourceFunc  callback,
+		    gpointer     user_data)
+{
+	SignalSource *ss = (SignalSource *)source;
+
+	signals_notified[ss->index] &= ~(1 << ss->shift);
+
+	return ((VeSignalFunc)callback) (ss->signal, user_data);
+}
+
+static GSourceFuncs signal_funcs = {
+	ve_signal_prepare,
+	ve_signal_check,
+	ve_signal_dispatch
+};
+
+guint
+ve_signal_add (int	      signal,
+	       VeSignalFunc function,
+	       gpointer      data)
+{
+	return ve_signal_add_full (G_PRIORITY_DEFAULT, signal, function, data, NULL);
+}
+
+guint
+ve_signal_add_full (int            priority,
+		    int            signal,
+		    VeSignalFunc   function,
+		    gpointer       data,
+		    GDestroyNotify destroy)
+{
+	GSource *source;
+	SignalSource *ss;
+	guint s = 128 + signal;
+
+	g_return_val_if_fail (function != NULL, 0);
+
+	source = g_source_new (&signal_funcs, sizeof (SignalSource));
+	ss = (SignalSource *)source;
+
+	ss->signal = signal;
+	ss->index = s / 32;
+	ss->shift = s % 32;
+
+	g_assert (ss->index < 8);
+
+	g_source_set_priority (source, priority);
+	g_source_set_callback (source, (GSourceFunc)function, data, destroy);
+	g_source_set_can_recurse (source, TRUE);
+
+	return g_source_attach (source, NULL);
+}
+
+void
+ve_signal_notify (int signal)
+{
+	guint index, shift;
+	guint s = 128 + signal;
+
+	index = s / 32;
+	shift = s % 32;
+
+	g_assert (index < 8);
+
+	signals_notified[index] |= 1 << shift;
+
+	g_main_context_wakeup (NULL);
+}
+
+gboolean
+ve_signal_was_notified (int signal)
+{
+	guint index, shift;
+	guint s = 128 + signal;
+
+	index = s / 32;
+	shift = s % 32;
+
+	g_assert (index < 8);
+
+	return ((signals_notified[index]) & (1 << shift)) ? TRUE : FALSE;
+}
+
+void
+ve_signal_unnotify (int signal)
+{
+	guint index, shift;
+	guint s = 128 + signal;
+
+	index = s / 32;
+	shift = s % 32;
+
+	g_assert (index < 8);
+
+	signals_notified[index] &= ~(1 << shift);
+}
Index: common/gdm-common-config.h
===================================================================
--- common/gdm-common-config.h	(revision 0)
+++ common/gdm-common-config.h	(revision 0)
@@ -0,0 +1,71 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GDM_COMMON_CONFIG_H
+#define _GDM_COMMON_CONFIG_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+GKeyFile * gdm_common_config_load             (const char *filename,
+					       GError    **error);
+gboolean   gdm_common_config_save             (GKeyFile   *config,
+					       const char *filename,
+					       GError    **error);
+
+gboolean   gdm_common_config_get_string       (GKeyFile   *config,
+					       const char *keystring,
+					       char      **value,
+					       GError    **error);
+gboolean   gdm_common_config_get_translated_string       (GKeyFile   *config,
+							  const char *keystring,
+							  char      **value,
+							  GError    **error);
+gboolean   gdm_common_config_get_int          (GKeyFile   *config,
+					       const char *keystring,
+					       int        *value,
+					       GError    **error);
+gboolean   gdm_common_config_get_boolean      (GKeyFile   *config,
+					       const char *keystring,
+					       gboolean   *value,
+					       GError    **error);
+gboolean   gdm_common_config_parse_key_string (const char *keystring,
+					       char      **group,
+					       char      **key,
+					       char      **value);
+
+void       gdm_common_config_set_string       (GKeyFile   *config,
+					       const char *keystring,
+					       const char *value);
+void       gdm_common_config_set_boolean      (GKeyFile   *config,
+					       const char *keystring,
+					       gboolean    value);
+void       gdm_common_config_set_int          (GKeyFile   *config,
+					       const char *keystring,
+					       int         value);
+
+void       gdm_common_config_remove_key       (GKeyFile   *config,
+					       const char *keystring,
+					       GError    **error);
+
+G_END_DECLS
+
+#endif /* _GDM_COMMON_CONFIG_H */
Index: common/Makefile.am
===================================================================
--- common/Makefile.am	(revision 0)
+++ common/Makefile.am	(revision 0)
@@ -0,0 +1,30 @@
+## Process this file with automake to produce Makefile.in
+
+NULL =
+
+INCLUDES = \
+	-I.					\
+	-I..					\
+	-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+	$(GLIB_CFLAGS)
+
+noinst_LIBRARIES = 		\
+	libgdmcommon.a		\
+	$(null)
+
+libgdmcommon_a_SOURCES =	\
+	gdm-common.h		\
+	gdm-common.c		\
+	gdm-common-config.h	\
+	gdm-common-config.c	\
+	ve-signal.h		\
+	ve-signal.c		\
+	$(NULL)
+
+libgdmcommon_ui_a_SOURCES = 	\
+	$(libgdmcommon_a_SOURCES) \
+	glade-helper.c		\
+	glade-helper.h		\
+	gdm-common-ui.c		\
+	gdm-common-ui.h		\
+	$(NULL)
Index: common/ve-signal.h
===================================================================
--- common/ve-signal.h	(revision 0)
+++ common/ve-signal.h	(revision 0)
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Signal routines
+ *
+ * (c) 2000, 2002 Queen of England
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _VE_SIGNAL_H
+#define _VE_SIGNAL_H
+
+#include <glib.h>
+
+typedef gboolean (*VeSignalFunc) (int	        signal,
+				  gpointer	data);
+guint	ve_signal_add		(int		signal,
+				 VeSignalFunc	function,
+				 gpointer    	data);
+guint   ve_signal_add_full      (int            priority,
+				 int            signal,
+				 VeSignalFunc   function,
+				 gpointer       data,
+				 GDestroyNotify destroy);
+/* You must handle the signal notify yourself, you add
+ * this function as the signal notification function
+ * however */
+void    ve_signal_notify        (int            signal);
+
+gboolean ve_signal_was_notified (int            signal);
+void    ve_signal_unnotify      (int            signal);
+
+#endif /* _VE_CONFIG_H */
Index: common/gdm-common.c
===================================================================
--- common/gdm-common.c	(revision 0)
+++ common/gdm-common.c	(revision 0)
@@ -0,0 +1,374 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * (c) 2000 Eazel, Inc.
+ * (c) 2001,2002 George Lebl
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <locale.h>
+
+#ifdef HAVE_CRT_EXTERNS_H
+#include <crt_externs.h>
+#endif
+
+#include "gdm-common.h"
+
+/**
+ * ve_clearenv:
+ * 
+ * Description: Clears out the environment completely.
+ * In case there is no native implementation of clearenv,
+ * this could cause leaks depending on the implementation
+ * of environment.
+ * 
+ **/
+void
+ve_clearenv (void)
+{
+#ifdef HAVE_CLEARENV
+	clearenv ();
+#else
+
+#ifdef HAVE__NSGETENVIRON
+#define environ (*_NSGetEnviron())
+#else
+        extern char **environ;
+#endif
+
+	if (environ != NULL)
+		environ[0] = NULL;
+#endif
+}
+
+char *
+ve_first_word (const char *s)
+{
+	int argc;
+	char **argv;
+	char *ret;
+
+	if (s == NULL)
+		return NULL;
+
+	if ( ! g_shell_parse_argv (s, &argc, &argv, NULL)) {
+		char *p;
+		ret = g_strdup (s);
+		p = strchr (ret, ' ');
+		if (p != NULL)
+			*p = '\0';
+		return ret;
+	}
+
+	ret = g_strdup (argv[0]);
+
+	g_strfreev (argv);
+
+	return ret;
+}
+
+gboolean
+ve_first_word_executable (const char *s, gboolean only_existance)
+{
+	char *bin = ve_first_word (s);
+	if (bin == NULL)
+		return FALSE;
+	if (g_access (bin, only_existance ? F_OK : X_OK) == 0) {
+		g_free (bin);
+		return TRUE;
+	} else {
+		g_free (bin);
+		return FALSE;
+	}
+}
+
+char *
+ve_get_first_working_command (const char *list,
+			      gboolean only_existance)
+{
+	int i;
+	char **vector;
+	char *ret = NULL;
+
+	if (list == NULL)
+		return NULL;
+
+	vector = g_strsplit (list, ";", -1);
+	for (i = 0; vector[i] != NULL; i++) {
+		if (ve_first_word_executable (vector[i],
+					      only_existance)) {
+			ret = g_strdup (vector[i]);
+			break;
+		}
+	}
+	g_strfreev (vector);
+	return ret;
+}
+
+char *
+ve_rest (const char *s)
+{
+	const char *p;
+	gboolean single_quot = FALSE;
+	gboolean double_quot = FALSE;
+	gboolean escape = FALSE;
+
+	if (s == NULL)
+		return NULL;
+
+	for (p = s; *p != '\0'; p++) {
+		if (single_quot) {
+			if (*p == '\'') {
+				single_quot = FALSE;
+			}
+		} else if (escape) {
+			escape = FALSE;
+		} else if (double_quot) {
+			if (*p == '"') {
+				double_quot = FALSE;
+			} else if (*p == '\\') {
+				escape = TRUE;
+			}
+		} else if (*p == '\'') {
+			single_quot = TRUE;
+		} else if (*p == '"') {
+			double_quot = TRUE;
+		} else if (*p == '\\') {
+			escape = TRUE;
+		} else if (*p == ' ' || *p == '\t') {
+			while (*p == ' ' || *p == '\t')
+				p++;
+			return g_strdup (p);
+		}
+	}
+
+	return NULL;
+}
+
+gboolean
+ve_bool_equal (gboolean a, gboolean b)
+{
+	if ((a && b) || (!a && !b))
+		return TRUE;
+	else
+		return FALSE;
+}
+
+gboolean
+ve_is_string_in_list (const GList *list, const char *string)
+{
+	g_return_val_if_fail (string != NULL, FALSE);
+
+	while (list != NULL) {
+		if (list->data != NULL &&
+		    strcmp (string, list->data) == 0)
+			return TRUE;
+
+		list = list->next;
+	}
+
+	return FALSE;
+}
+
+gboolean
+ve_is_string_in_list_case_no_locale (const GList *list, const char *string)
+{
+	g_return_val_if_fail (string != NULL, FALSE);
+
+	while (list != NULL) {
+		if (list->data != NULL &&
+		    g_ascii_strcasecmp (string, list->data) == 0)
+			return TRUE;
+
+		list = list->next;
+	}
+
+	return FALSE;
+}
+
+char *
+ve_find_file_simple (const char *filename, const GList *directories)
+{
+	char *s;
+	const GList *li;
+
+	if (filename == NULL)
+		return NULL;
+
+	if (g_access (filename, F_OK) == 0)
+		return g_strdup (filename);
+
+	/* an absolute path is just checked */
+	if (g_path_is_absolute (filename))
+		return NULL;
+
+	for (li = directories; li != NULL; li = li->next) {
+		s = g_build_filename (li->data, filename, NULL);
+		if (g_access (s, F_OK) == 0)
+			return s;
+		g_free (s);
+	}
+
+	return NULL;
+}
+
+char *
+ve_locale_to_utf8 (const char *str)
+{
+	char *ret = g_locale_to_utf8 (str, -1, NULL, NULL, NULL);
+	if (ret == NULL) {
+		g_warning ("string not in proper locale encoding: \"%s\"", str);
+		return g_strdup (str);
+	} else {
+		return ret;
+	}
+}
+
+char *
+ve_locale_from_utf8 (const char *str)
+{
+	char *ret = g_locale_from_utf8 (str, -1, NULL, NULL, NULL);
+	if (ret == NULL) {
+		g_warning ("string not in proper utf8 encoding: \"%s\"", str);
+		return g_strdup (str);
+	} else {
+		return ret;
+	}
+}
+
+char *
+ve_filename_to_utf8 (const char *str)
+{
+	char *ret = g_filename_to_utf8 (str, -1, NULL, NULL, NULL);
+	if (ret == NULL) {
+		g_warning ("string not in proper locale encoding: \"%s\"", str);
+		return g_strdup (str);
+	} else {
+		return ret;
+	}
+}
+
+char *
+ve_filename_from_utf8 (const char *str)
+{
+	char *ret = g_filename_from_utf8 (str, -1, NULL, NULL, NULL);
+	if (ret == NULL) {
+		g_warning ("string not in proper utf8 encoding: \"%s\"", str);
+		return g_strdup (str);
+	} else {
+		return ret;
+	}
+}
+
+char *
+ve_strftime (struct tm *the_tm, const char *format)
+{
+	char str[1024];
+	char *loc_format = ve_locale_from_utf8 (format);
+
+	if (strftime (str, sizeof (str)-1, loc_format, the_tm) == 0) {
+		/* according to docs, if the string does not fit, the
+		 * contents of str are undefined, thus just use
+		 * ??? */
+		strcpy (str, "???");
+	}
+	str [sizeof (str)-1] = '\0'; /* just for sanity */
+	g_free (loc_format);
+
+	return ve_locale_to_utf8 (str);
+}
+
+pid_t
+ve_waitpid_no_signal (pid_t pid, int *status, int options)
+{
+	pid_t ret;
+
+	for (;;) {
+		ret = waitpid (pid, status, options);
+		if (ret == 0)
+			return 0;
+		if (errno != EINTR)
+			return ret;
+	}
+}
+
+gboolean
+ve_locale_exists (const char *loc)
+{
+	gboolean ret;
+	char *old = g_strdup (setlocale (LC_MESSAGES, NULL));
+	if (setlocale (LC_MESSAGES, loc) != NULL)
+		ret = TRUE;
+	else
+		ret = FALSE;
+	setlocale (LC_MESSAGES, old);
+	g_free (old);
+	return ret;
+}
+
+char *
+ve_find_prog_in_path (const char *prog, const char *path)
+{
+	char **vec;
+	int i;
+
+	if (ve_string_empty (prog) || ve_string_empty (path))
+		return NULL;
+
+	vec = g_strsplit (path, ":", -1);
+	for (i = 0; vec != NULL && vec[i] != NULL; i++) {
+		char *full = g_build_filename (vec[i], prog, NULL);
+		/* Do not use X_OK, we may be looking for things
+		   that are not executables */
+		if (g_access (full, F_OK) == 0) {
+			g_strfreev(vec);
+			return full;
+		}
+		g_free (full);
+	}
+	g_strfreev(vec);
+	return NULL;
+}
+
+gboolean
+ve_is_prog_in_path (const char *prog, const char *path)
+{
+	char *full = ve_find_prog_in_path (prog, path);
+	if (full != NULL) {
+		g_free (full);
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+}
+
+char *
+ve_shell_quote_filename (const char *name)
+{
+	if (name[0] != '-') {
+		return g_shell_quote (name);
+	} else {
+		char *fname = g_strconcat ("./", name, NULL);
+		char *quoted = g_shell_quote (fname);
+		g_free (fname);
+		return quoted;
+	}
+}
Index: daemon/errorgui.c
===================================================================
--- daemon/errorgui.c	(revision 4683)
+++ daemon/errorgui.c	(working copy)
@@ -43,6 +43,8 @@
 #include "errorgui.h"
 #include "slave.h"
 
+#include "gdm-common.h"
+
 /* set in the main function */
 extern char **stored_argv;
 extern int stored_argc;
Index: daemon/gdmconfig.h
===================================================================
--- daemon/gdmconfig.h	(revision 4683)
+++ daemon/gdmconfig.h	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
  * Copyright (C) 2005 Brian Cameron <brian.cameron@sun.com>
  *
@@ -16,42 +18,44 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
+#ifndef _GDM_CONFIG_H
+#define _GDM_CONFIG_H
+
 #include "gdm.h"
 
-/* To access ve_string_empty(), ve_sure_string(), and
-   VE_IGNORE_EINTR macros ve-misc.h must be included */
+G_BEGIN_DECLS
 
-#include "ve-misc.h"
 
 gchar*         gdm_get_display_custom_config_file
-                                        (gchar *display);
+                                        (const gchar *display);
 gchar*         gdm_get_custom_config_file (void);
-gchar*         gdm_get_value_string     (gchar *key);
-gboolean       gdm_get_value_bool       (gchar *key);
-gint           gdm_get_value_int        (gchar *key);
+gchar*         gdm_get_value_string     (const gchar *key);
+gboolean       gdm_get_value_bool       (const gchar *key);
+gint           gdm_get_value_int        (const gchar *key);
 gchar*         gdm_get_value_string_per_display (const gchar *display,
-                                                 gchar *key);
-gboolean       gdm_get_value_bool_per_display   (gchar *display,
-                                                 gchar *key);
-gint           gdm_get_value_int_per_display    (gchar *display,
-                                                 gchar *key);
-void           gdm_set_value_string     (gchar *key,
-                                         gchar *value);
-void           gdm_set_value_bool       (gchar *key,
+                                                 const gchar *key);
+gboolean       gdm_get_value_bool_per_display   (const gchar *display,
+                                                 const gchar *key);
+gint           gdm_get_value_int_per_display    (const gchar *display,
+                                                 const gchar *key);
+void           gdm_set_value_string     (const gchar *key,
+                                         const gchar *value);
+void           gdm_set_value_bool       (const gchar *key,
                                          gboolean value);
-void           gdm_set_value_int        (gchar *key,
+void           gdm_set_value_int        (const gchar *key,
                                          gint value);
 void           gdm_config_key_to_string_per_display
                                         (const gchar *display,
-                                         gchar *key,
+                                         const gchar *key,
                                          gchar **retval);
-void           gdm_config_key_to_string (gchar *file,
-                                         gchar *key,
+void           gdm_config_key_to_string (const gchar *file,
+                                         const gchar *key,
                                          gchar **retval);
-void           gdm_config_to_string     (gchar *key,
-                                         gchar *display,
+void           gdm_config_to_string     (const gchar *key,
+                                         const gchar *display,
                                          gchar **retval);
-gboolean       gdm_update_config        (gchar *key);
+gboolean       gdm_update_config        (const gchar *key);
 void           gdm_config_parse         (void);
 GdmXserver*    gdm_find_xserver         (const gchar *id);
 gchar*         gdm_get_xservers         (void);
@@ -61,7 +65,7 @@ uid_t          gdm_get_gdmuid           
 uid_t          gdm_get_gdmgid           (void);
 gint           gdm_get_high_display_num (void);
 void           gdm_set_high_display_num (gint val);
-gboolean       gdm_is_valid_key         (gchar *key);
+gboolean       gdm_is_valid_key         (const gchar *key);
 gboolean       gdm_signal_terminthup_was_notified  (void);
 
 gchar*         gdm_get_facefile_from_home
@@ -83,3 +87,7 @@ void		gdm_set_user_session_lang (gboolea
 char*          gdm_get_session_exec     (const char *session_name,
                                          gboolean check_try_exec);
 
+
+G_END_DECLS
+
+#endif /* _GDM_CONFIG_H */
Index: daemon/display.c
===================================================================
--- daemon/display.c	(revision 4683)
+++ daemon/display.c	(working copy)
@@ -41,6 +41,8 @@
 #include "gdm-net.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /* External vars */
 extern gint xdmcp_sessions;
 extern gint flexi_servers;
Index: daemon/gdm.c
===================================================================
--- daemon/gdm.c	(revision 4683)
+++ daemon/gdm.c	(working copy)
@@ -52,7 +52,7 @@
 #include <glib-object.h>
 
 /* Needed for signal handling */
-#include <vicious.h>
+#include <gdm-common.h>
 
 #include "gdm.h"
 #include "misc.h"
@@ -634,10 +634,15 @@ suspend_machine (void)
 		/* short sleep to give some processing time to master */
 		usleep (1000);
 
-		argv = ve_split (suspend);
+		argv = NULL;
+		g_shell_parse_argv (suspend, NULL, &argv, NULL);
+
 		if (argv != NULL && argv[0] != NULL)
 			VE_IGNORE_EINTR (execv (argv[0], argv));
+
 		/* FIXME: what about fail */
+		g_strfreev (argv);
+
 		_exit (1);
 	}
 }
@@ -676,6 +681,7 @@ static void
 halt_machine (void)
 {
 	char **argv;
+	const char *s;
 
 	gdm_info (_("Master halting..."));
 
@@ -686,18 +692,26 @@ halt_machine (void)
 	change_to_first_and_clear (FALSE);
 #endif /* __linux */
 
-	argv = ve_split (gdm_get_value_string (GDM_KEY_HALT));
+	argv = NULL;
+	s = gdm_get_value_string (GDM_KEY_HALT);
+	if (s != NULL) {
+		g_shell_parse_argv (s, NULL, &argv, NULL);
+	}
+
 	if (argv != NULL && argv[0] != NULL)
 		VE_IGNORE_EINTR (execv (argv[0], argv));
 
 	gdm_error (_("%s: Halt failed: %s"),
 		   "gdm_child_action", strerror (errno));
+
+	g_strfreev (argv);
 }
 
 static void
 restart_machine (void)
 {
 	char **argv;
+	const char *s;
 
 	gdm_info (_("Restarting computer..."));
 
@@ -708,12 +722,19 @@ restart_machine (void)
 	change_to_first_and_clear (TRUE);
 #endif /* __linux */
 
-	argv = ve_split (gdm_get_value_string (GDM_KEY_REBOOT));
+	argv = NULL;
+	s = gdm_get_value_string (GDM_KEY_REBOOT);
+	if (s != NULL) {
+		g_shell_parse_argv (s, NULL, &argv, NULL);
+	}
+
 	if (argv != NULL && argv[0] != NULL)
 		VE_IGNORE_EINTR (execv (argv[0], argv));
 
 	gdm_error (_("%s: Restart failed: %s"), 
 		   "gdm_child_action", strerror (errno));
+
+	g_strfreev (argv);
 }
 
 static void
@@ -739,28 +760,35 @@ custom_cmd (long cmd_id)
 
 static void
 custom_cmd_restart (long cmd_id)
-{	
+{
 	gchar * key_string;
 	char **argv;
+	const char *s;
 
         gdm_info (_("Executing custom command %ld with restart option..."), cmd_id);
 
 	gdm_final_cleanup ();
 	VE_IGNORE_EINTR (g_chdir ("/"));
-	
+
 #ifdef __linux__
 	change_to_first_and_clear (TRUE);
 #endif /* __linux */
-	
+
 	key_string = g_strdup_printf (_("%s%ld="), GDM_KEY_CUSTOM_CMD_TEMPLATE, cmd_id);
-	argv = ve_split (gdm_get_value_string (key_string));
-	g_free(key_string);
+
+	argv = NULL;
+	s = gdm_get_value_string (key_string);
+	g_free (key_string);
+	if (s != NULL) {
+		g_shell_parse_argv (s, NULL, &argv, NULL);
+	}
+
 	if (argv != NULL && argv[0] != NULL)
 		VE_IGNORE_EINTR (execv (argv[0], argv));
-	
-	g_strfreev (argv);	      
-	
-	gdm_error (_("%s: Execution of custom command failed: %s"), 
+
+	g_strfreev (argv);
+
+	gdm_error (_("%s: Execution of custom command failed: %s"),
 		   "gdm_child_action", strerror (errno));
 }
 
@@ -772,7 +800,7 @@ custom_cmd_no_restart (long cmd_id)
         gdm_info (_("Executing custom command %ld with no restart option ..."), cmd_id);
 
         pid = fork ();
-	
+
 	if (pid < 0) {
 	        /*failed fork*/
 	        gdm_error (_("custom_cmd: forking process for custom command %ld failed"), cmd_id);
@@ -781,18 +809,26 @@ custom_cmd_no_restart (long cmd_id)
 	else if (pid == 0) {
 		/* child */
 		char **argv;
-		gchar * key_string = g_strdup_printf (_("%s%ld="), GDM_KEY_CUSTOM_CMD_TEMPLATE, cmd_id);
-		argv = ve_split (gdm_get_value_string (key_string));
-		g_free(key_string);
+		const char *s;
+		gchar *key_string;
+
+		key_string = g_strdup_printf (_("%s%ld="), GDM_KEY_CUSTOM_CMD_TEMPLATE, cmd_id);
+
+		argv = NULL;
+		s = gdm_get_value_string (key_string);
+		g_free (key_string);
+		if (s != NULL) {
+			g_shell_parse_argv (s, NULL, &argv, NULL);
+		}
+
 		if (argv != NULL && argv[0] != NULL)
 			VE_IGNORE_EINTR (execv (argv[0], argv));
-	    
-		g_strfreev (argv);	      
-		
+
+		g_strfreev (argv);
+
 		gdm_error (_("%s: Execution of custom command failed: %s"), 
 			   "gdm_child_action", strerror (errno));
-		
-		_exit (0);	    
+		_exit (0);
 	}
 	else {
 		/* parent */
@@ -802,10 +838,10 @@ custom_cmd_no_restart (long cmd_id)
 			if G_LIKELY (WIFEXITED (exitstatus)){
 				status = WEXITSTATUS (exitstatus);
 				gdm_debug (_("custom_cmd: child %d returned %d"), p_stat, status);
-			}	
+			}
 			return;
 		}
-	}	
+	}
 }
 
 static gboolean 
@@ -1859,9 +1895,14 @@ write_x_servers (GdmDisplay *d)
 	if (SERVER_IS_LOCAL (d)) {
 		char **argv;
 		char *command;
-		argv = gdm_server_resolve_command_line
-			(d, FALSE /* resolve_flags */,
-			 NULL /* vtarg */);
+		int argc;
+		argc = 0;
+		argv = NULL;
+		gdm_server_resolve_command_line (d,
+						 FALSE, /* resolve_flags */
+						 NULL, /* vtarg */
+						 &argc,
+						 &argv);
 		command = g_strjoinv (" ", argv);
 		g_strfreev (argv);
 		VE_IGNORE_EINTR (fprintf (fp, "%s local %s\n", d->name, command));
Index: daemon/xdmcp.c
===================================================================
--- daemon/xdmcp.c	(revision 4683)
+++ daemon/xdmcp.c	(working copy)
@@ -103,6 +103,8 @@
 #include "cookie.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /*This is to be changed when the Xdmcp Multicast address is decided */
 #define XDMCP_MULTICAST_ADDRESS "ff02::1"
 
Index: daemon/filecheck.c
===================================================================
--- daemon/filecheck.c	(revision 4683)
+++ daemon/filecheck.c	(working copy)
@@ -26,6 +26,8 @@
 #include "filecheck.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /**
  * gdm_file_check:
  * @caller: String to be prepended to syslog error messages.
Index: daemon/verify-pam.c
===================================================================
--- daemon/verify-pam.c	(revision 4683)
+++ daemon/verify-pam.c	(working copy)
@@ -39,6 +39,8 @@
 #include "errorgui.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 #ifdef	HAVE_LOGINDEVPERM
 #include <libdevinfo.h>
 #endif	/* HAVE_LOGINDEVPERM */
Index: daemon/getvt.c
===================================================================
--- daemon/getvt.c	(revision 4683)
+++ daemon/getvt.c	(working copy)
@@ -34,6 +34,8 @@
 #include "getvt.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /* Virtual terminals only supported on Linux, FreeBSD, or DragonFly */
 
 #if defined (__linux__) || defined (__FreeBSD__) || defined (__DragonFly__)
Index: daemon/auth.c
===================================================================
--- daemon/auth.c	(revision 4683)
+++ daemon/auth.c	(working copy)
@@ -24,11 +24,13 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
-#include <netdb.h> 
+#include <netdb.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <netinet/in.h>
+#include <errno.h>
+
 #include <X11/Xauth.h>
 #include <glib/gi18n.h>
 
@@ -39,6 +41,8 @@
 #include "auth.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /* Ensure we know about FamilyInternetV6 even if what we're compiling
    against doesn't */
 #ifdef ENABLE_IPV6
Index: daemon/server.c
===================================================================
--- daemon/server.c	(revision 4683)
+++ daemon/server.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1999, 2000 Martin K. Petersen <mkp@mkp.net>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -50,6 +52,8 @@
 #include "getvt.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /* Local prototypes */
 static void gdm_server_spawn (GdmDisplay *d, const char *vtarg);
 static void gdm_server_usr1_handler (gint);
@@ -960,42 +964,90 @@ gdm_server_resolve (GdmDisplay *disp)
 }
 
 
-char **
+static char **
+vector_merge (char * const *v1,
+	      int           len1,
+	      char * const *v2,
+	      int           len2)
+{
+	int argc, i;
+	char **argv;
+
+	if (v1 == NULL && v2 == NULL)
+		return NULL;
+
+	argc = len1 + len2;
+
+	argv = g_new (char *, argc + 1);
+	for (i = 0; i < len1; i++)
+		argv[i] = g_strdup (v1[i]);
+	for (; i < argc; i++)
+		argv[i] = g_strdup (v2[i - len1]);
+	argv[i] = NULL;
+
+	return argv;
+}
+
+gboolean
 gdm_server_resolve_command_line (GdmDisplay *disp,
-				 gboolean resolve_flags,
-				 const char *vtarg)
+				 gboolean    resolve_flags,
+				 const char *vtarg,
+				 int        *argcp,
+				 char     ***argvp)
 {
 	char *bin;
+	int    argc;
 	char **argv;
 	int len;
 	int i;
 	gboolean gotvtarg = FALSE;
 	gboolean query_in_arglist = FALSE;
 
+        argv = NULL;
+
 	bin = ve_first_word (disp->command);
 	if (bin == NULL) {
+		const char *str;
+
 		gdm_error (_("Invalid server command '%s'"), disp->command);
-		argv = ve_split (gdm_get_value_string (GDM_KEY_STANDARD_XSERVER));
+		str = gdm_get_value_string (GDM_KEY_STANDARD_XSERVER);
+       		g_shell_parse_argv (str, &argc, &argv, NULL);
 	} else if (bin[0] != '/') {
 		GdmXserver *svr = gdm_find_xserver (bin);
 		if (svr == NULL) {
+			const char *str;
+
 			gdm_error (_("Server name '%s' not found; "
 				     "using standard server"), bin);
-			argv = ve_split (gdm_get_value_string (GDM_KEY_STANDARD_XSERVER));
+			str = gdm_get_value_string (GDM_KEY_STANDARD_XSERVER);
+			g_shell_parse_argv (str, &argc, &argv, NULL);
+
 		} else {
-			char **svr_command =
-				ve_split (ve_sure_string (svr->command));
-			argv = ve_split (disp->command);
+			char **svr_command;
+			const char *str;
+			int svr_argc;
+
+			str = ve_sure_string (svr->command);
+			svr_command = NULL;
+			g_shell_parse_argv (str, &svr_argc, &svr_command, NULL);
+
+			g_shell_parse_argv (disp->command, &argc, &argv, NULL);
+
 			if (argv[0] == NULL || argv[1] == NULL) {
 				g_strfreev (argv);
 				argv = svr_command;
+				argc = svr_argc;
 			} else {
 				char **old_argv = argv;
-				argv = ve_vector_merge (svr_command,
-							&old_argv[1]);
+				argv = vector_merge (svr_command,
+						     svr_argc,
+						     &old_argv[1],
+						     argc);
 				g_strfreev (svr_command);
 				g_strfreev (old_argv);
-			} 
+
+				argc += svr_argc;
+			}
 
 			if (resolve_flags) {
 				/* Setup the handled function */
@@ -1009,7 +1061,7 @@ gdm_server_resolve_command_line (GdmDisp
 			}
 		}
 	} else {
-		argv = ve_split (disp->command);
+		g_shell_parse_argv (disp->command, &argc, &argv, NULL);
 	}
 
 	for (len = 0; argv != NULL && argv[len] != NULL; len++) {
@@ -1027,6 +1079,7 @@ gdm_server_resolve_command_line (GdmDisp
 	}
 
 	argv = g_renew (char *, argv, len + 10);
+	/* shift args down one */
 	for (i = len - 1; i >= 1; i--) {
 		argv[i+1] = argv[i];
 	}
@@ -1065,9 +1118,12 @@ gdm_server_resolve_command_line (GdmDisp
 
 	argv[len++] = NULL;
 
+	*argvp = argv;
+	*argcp = len;
+
 	g_free (bin);
 
-	return argv;
+	return TRUE;
 }
 
 /**
@@ -1080,11 +1136,12 @@ gdm_server_resolve_command_line (GdmDisp
  * since otherwise the server might not yet be looked up yet.
  */
 
-static void 
+static void
 gdm_server_spawn (GdmDisplay *d, const char *vtarg)
 {
     struct sigaction ign_signal;
     sigset_t mask;
+    int argc;
     gchar **argv = NULL;
     char *logfile;
     int logfd;
@@ -1110,9 +1167,13 @@ gdm_server_spawn (GdmDisplay *d, const c
     }
 
     /* Figure out the server command */
-    argv = gdm_server_resolve_command_line (d,
-					    TRUE /* resolve flags */,
-					    vtarg);
+    argv = NULL;
+    argc = 0;
+    gdm_server_resolve_command_line (d,
+				     TRUE /* resolve flags */,
+				     vtarg,
+				     &argc,
+				     &argv);
 
     command = g_strjoinv (" ", argv);
 
@@ -1195,7 +1256,6 @@ gdm_server_spawn (GdmDisplay *d, const c
 	sigprocmask (SIG_SETMASK, &mask, NULL);
 
 	if (SERVER_IS_PROXY (d)) {
-		int argc = ve_vector_len (argv);
 		gboolean add_display = TRUE;
 
 		g_unsetenv ("DISPLAY");
Index: daemon/cookie.c
===================================================================
--- daemon/cookie.c	(revision 4683)
+++ daemon/cookie.c	(working copy)
@@ -43,6 +43,8 @@
 #include "cookie.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 #define MAXBUFFERSIZE 1024
 
 struct rngs {
Index: daemon/slave.c
===================================================================
--- daemon/slave.c	(revision 4683)
+++ daemon/slave.c	(working copy)
@@ -91,6 +91,8 @@
 #include "gdmconfig.h"
 #include "display.h"
 
+#include "gdm-common.h"
+
 #ifdef WITH_CONSOLE_KIT
 #include "gdmconsolekit.h"
 #endif
@@ -1767,6 +1769,8 @@ run_config (GdmDisplay *display, struct 
 
 	if (pid == 0) {
 		char **argv;
+		const char *s;
+
 		/* child */
 
 		setsid ();
@@ -1812,11 +1816,19 @@ run_config (GdmDisplay *display, struct 
 			VE_IGNORE_EINTR (g_chdir ("/"));
 
 		/* exec the configurator */
-		argv = ve_split (gdm_get_value_string (GDM_KEY_CONFIGURATOR));
+		argv = NULL;
+		s = gdm_get_value_string (GDM_KEY_CONFIGURATOR);
+		if (s != NULL) {
+			g_shell_parse_argv (s, NULL, &argv, NULL);
+		}
+
 		if G_LIKELY (argv != NULL &&
 			     argv[0] != NULL &&
-			     g_access (argv[0], X_OK) == 0)
+			     g_access (argv[0], X_OK) == 0) {
 			VE_IGNORE_EINTR (execv (argv[0], argv));
+		}
+
+		g_strfreev (argv);
 
 		gdm_error_box (d,
 			       GTK_MESSAGE_ERROR,
@@ -1826,11 +1838,15 @@ run_config (GdmDisplay *display, struct 
 				 "Attempting to start it from the default "
 				 "location."));
 
-		argv = ve_split
-			(LIBEXECDIR
-			 "/gdmsetup --disable-sound --disable-crash-dialog");
-		if (g_access (argv[0], X_OK) == 0)
+		s = LIBEXECDIR "/gdmsetup --disable-sound --disable-crash-dialog";
+		argv = NULL;
+		g_shell_parse_argv (s, NULL, &argv, NULL);
+
+		if (g_access (argv[0], X_OK) == 0) {
 			VE_IGNORE_EINTR (execv (argv[0], argv));
+		}
+
+		g_strfreev (argv);
 
 		gdm_error_box (d,
 			       GTK_MESSAGE_ERROR,
@@ -2440,7 +2456,12 @@ copy_auth_file (uid_t fromuid, uid_t tou
 static void
 exec_command (const char *command, const char *extra_arg)
 {
-	char **argv = ve_split (command);
+	char **argv;
+	int argc;
+
+	if (! g_shell_parse_argv (command, &argc, &argv, NULL)) {
+		return;
+	}
 
 	if (argv == NULL ||
 	    ve_string_empty (argv[0]))
@@ -2450,20 +2471,16 @@ exec_command (const char *command, const
 		return;
 
 	if (extra_arg != NULL) {
-		char **new_argv;
-		int i;
-		for (i = 0; argv[i] != NULL; i++)
-			;
-		new_argv = g_new0 (char *, i+2);
-		for (i = 0; argv[i] != NULL; i++)
-			new_argv[i] = argv[i];
-		new_argv[i++] = (char *)extra_arg;
-		new_argv[i++] = NULL;
 
-		argv = new_argv;
+		argv = g_renew (char *, argv, argc + 2);
+
+		argv[argc] = g_strdup (extra_arg);
+		argv[argc + 1] = NULL;
 	}
 
 	VE_IGNORE_EINTR (execv (argv[0], argv));
+
+	g_strfreev (argv);
 }
 
 static void
@@ -5462,7 +5479,10 @@ gdm_slave_exec_script (GdmDisplay *d, co
 	if ( ! ve_string_empty (d->theme_name))
 		g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
 	g_unsetenv ("MAIL");
-	argv = ve_split (script);
+
+	argv = NULL;
+	g_shell_parse_argv (script, NULL, &argv, NULL);
+
 	VE_IGNORE_EINTR (execv (argv[0], argv));
 	syslog (LOG_ERR, _("%s: Failed starting: %s"), "gdm_slave_exec_script",
 		script);
@@ -5602,20 +5622,22 @@ gdm_parse_enriched_login (const gchar *s
 		    g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
 	    g_unsetenv ("MAIL");
 
-	    argv = ve_split (str->str);
+	    argv = NULL;
+	    g_shell_parse_argv (str->str, NULL, &argv, NULL);
+
 	    VE_IGNORE_EINTR (execv (argv[0], argv));
 	    gdm_error (_("%s: Failed executing: %s"),
 		       "gdm_parse_enriched_login",
 		       str->str);
 	    _exit (EXIT_SUCCESS);
-	    
+
         case -1:
 	    gdm_error (_("%s: Can't fork script process!"),
 		       "gdm_parse_enriched_login");
             VE_IGNORE_EINTR (close (pipe1[0]));
             VE_IGNORE_EINTR (close (pipe1[1]));
 	    break;
-	
+
         default:
 	    /* The parent reads username from the pipe a chunk at a time */
             VE_IGNORE_EINTR (close (pipe1[1]));
Index: daemon/server.h
===================================================================
--- daemon/server.h	(revision 4683)
+++ daemon/server.h	(working copy)
@@ -39,9 +39,11 @@ GdmDisplay *	gdm_server_alloc	(gint id,
 void		gdm_server_whack_clients (Display *dsp);
 void		gdm_server_checklog	(GdmDisplay *disp);
 
-char **		gdm_server_resolve_command_line (GdmDisplay *disp,
+gboolean	gdm_server_resolve_command_line (GdmDisplay *disp,
 						 gboolean resolve_flags,
-						 const char *vtarg);
+						 const char *vtarg,
+                                                 int        *argc,
+                                                 char     ***argv);
 GdmXserver *	gdm_server_resolve	(GdmDisplay *disp);
 
 
Index: daemon/Makefile.am
===================================================================
--- daemon/Makefile.am	(revision 4683)
+++ daemon/Makefile.am	(working copy)
@@ -5,7 +5,7 @@
 INCLUDES = \
 	-I.						\
 	-I..						\
-	-I$(top_srcdir)/vicious-extensions		\
+	-I$(top_srcdir)/common				\
 	-DAUTHDIR=\"$(authdir)\"			\
 	-DBINDIR=\"$(bindir)\"				\
 	-DDATADIR=\"$(datadir)\"			\
@@ -91,7 +91,7 @@ gdm_binary_LDADD = \
 	$(GLIB_LIBS)				\
 	$(GOBJECT_LIBS)				\
 	$(GDK_LIBS)				\
-	$(top_builddir)/vicious-extensions/libvicious.a \
+	$(top_builddir)/common/libgdmcommon.a	\
 	$(X_LIBS)				\
 	$(XINERAMA_LIBS)			\
 	$(XDMCP_LIBS)				\
Index: daemon/misc.c
===================================================================
--- daemon/misc.c	(revision 4683)
+++ daemon/misc.c	(working copy)
@@ -57,6 +57,8 @@
 #include "slave.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 extern char **environ;
 
 extern pid_t extra_process;
Index: daemon/gdm-net.c
===================================================================
--- daemon/gdm-net.c	(revision 4683)
+++ daemon/gdm-net.c	(working copy)
@@ -37,6 +37,8 @@
 #include "gdm-net.h"
 #include "gdmconfig.h"
 
+#include "gdm-common.h"
+
 /*
  * Kind of a weird setup, new connections whack old connections.
  *
Index: daemon/gdmconfig.c
===================================================================
--- daemon/gdmconfig.c	(revision 4683)
+++ daemon/gdmconfig.c	(working copy)
@@ -1,4 +1,6 @@
-/* GDM - The GNOME Display Manager
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 3 -*-
+ *
+ * GDM - The GNOME Display Manager
  * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
  * Copyright (C) 2005 Brian Cameron <brian.cameron@sun.com>
  *
@@ -17,15 +19,15 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-/* 
- * gdmconfig.c isolates most logic that interacts with vicious-extensions
+/*
+ * gdmconfig.c isolates most logic that interacts with GDM configuration
  * into a single file and provides a mechanism for interacting with GDM
  * configuration optins via access functions for getting/setting values.
  * This logic also ensures that the same configuration validation happens
  * when loading the values initially or setting them via the
  * GDM_UPDATE_CONFIG socket command.
- * 
- * When adding a new configuration option, simply add the new option to 
+ *
+ * When adding a new configuration option, simply add the new option to
  * gdm.h and to the val_hash and type_hash hashes in the gdm_config_init
  * function.  Any validation for the configuration option should be
  * placed in the _gdm_set_value_string, _gdm_set_value_int, or
@@ -48,7 +50,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include "vicious.h"
+#include "gdm-common.h"
 
 #include "gdm.h"
 #include "gdmconfig.h"
@@ -277,7 +279,8 @@ gdm_config_add_hash (gchar *key, gpointe
  * value.
  */
 static gpointer
-gdm_config_hash_lookup (GHashTable *hash, gchar *key)
+gdm_config_hash_lookup (GHashTable *hash,
+                        const gchar *key)
 {
    gchar *p;
    gpointer *ret;
@@ -573,33 +576,39 @@ gdm_config_init (void)
 /**
  * gdm_get_config:
  *
- * Get config file.  
+ * Get config file.
  */
-static VeConfig *
-gdm_get_default_config (struct stat *statbuf)
+static GKeyFile *
+gdm_get_default_config (void)
 {
-   int r;
+   GKeyFile   *config;
+   GError     *error;
+   struct stat statbuf;
+   int         r;
 
    /* Not NULL if config_file was set by command-line option. */
-   if (config_file != NULL) {
-      VE_IGNORE_EINTR (r = g_stat (config_file, statbuf));
-      if (r < 0) {
-         gdm_error (_("%s: No GDM configuration file: %s. Using defaults."),
-                      "gdm_config_parse", config_file);
-         return NULL;
-      }
-   } else {
-      VE_IGNORE_EINTR (r = g_stat (GDM_DEFAULTS_CONF, statbuf));
-      if (r < 0) {
-         gdm_error (_("%s: No GDM configuration file: %s. Using defaults."),
-                      "gdm_config_parse", GDM_DEFAULTS_CONF);
-         return NULL;
-      } else {
-              config_file = GDM_DEFAULTS_CONF;
-      }
+   if (config_file == NULL) {
+      config_file = GDM_DEFAULTS_CONF;
    }
 
-   return ve_config_new (config_file);
+   error = NULL;
+   config = gdm_common_config_load (config_file, &error);
+
+   if (config == NULL) {
+      gdm_error (_("%s: Unable to load configuration from %s: %s"),
+                 "gdm_config_parse",
+                 config_file,
+                 error->message);
+      g_error_free (error);
+      return NULL;
+   }
+
+   VE_IGNORE_EINTR (r = g_stat (config_file, &statbuf));
+   if (r >= 0) {
+      config_file_mtime = statbuf.st_mtime;
+   }
+
+   return config;
 }
 
 /**
@@ -608,17 +617,20 @@ gdm_get_default_config (struct stat *sta
  * Get the custom config file where gdmsetup saves its changes and
  * where users are encouraged to make modifications.
  */
-static VeConfig *
-gdm_get_custom_config (struct stat *statbuf)
+static GKeyFile *
+gdm_get_custom_config (void)
 {
-   int r;
+   GKeyFile   *config;
+   GError     *error;
+   struct stat statbuf;
+   int         r;
 
    /*
     * First check to see if the old configuration file name is on
     * the system.  If so, use that as the custom configuration
     * file.  "make install" will move this file aside, and 
     * distros probably can also manage moving this file on
-    * upgrade.   
+    * upgrade.
     *
     * In case this file is on the system, then use it as
     * the custom configuration file until the user moves it
@@ -627,19 +639,28 @@ gdm_get_custom_config (struct stat *stat
     * file has all the keys in it (except new ones).  But
     * that would be what the user wants.
     */
-   VE_IGNORE_EINTR (r = g_stat (GDM_OLD_CONF, statbuf));
-   if (r >= 0) {
+
+   error = NULL;
+   config = gdm_common_config_load (GDM_OLD_CONF, &error);
+   if (config != NULL) {
       custom_config_file = g_strdup (GDM_OLD_CONF);
-      return ve_config_new (custom_config_file);
+   } else {
+      g_error_free (error);
+      error = NULL;
+      config = gdm_common_config_load (GDM_CUSTOM_CONF, &error);
+      if (config != NULL) {
+         custom_config_file = g_strdup (GDM_CUSTOM_CONF);
+      } else {
+         g_error_free (error);
+      }
    }
 
-   VE_IGNORE_EINTR (r = g_stat (GDM_CUSTOM_CONF, statbuf));
+   VE_IGNORE_EINTR (r = g_stat (custom_config_file, &statbuf));
    if (r >= 0) {
-      custom_config_file = g_strdup (GDM_CUSTOM_CONF);
-      return ve_config_new (custom_config_file);
-   } else {
-      return NULL;
+      custom_config_file_mtime = statbuf.st_mtime;
    }
+
+   return config;
 }
 
 /**
@@ -673,7 +694,7 @@ gdm_get_custom_config_file (void)
  * first be loaded, say, by calling gdm_config_parse.
  */
 gint
-gdm_get_value_int (char *key)
+gdm_get_value_int (const char *key)
 {
    GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
    gpointer val        = gdm_config_hash_lookup (val_hash, key);
@@ -697,7 +718,7 @@ gdm_get_value_int (char *key)
  * first be loaded, say, by calling gdm_config_parse.
  */
 gchar *
-gdm_get_value_string (char *key)
+gdm_get_value_string (const char *key)
 {
    GdmConfigType *type;
    gpointer val;
@@ -733,7 +754,7 @@ gdm_get_value_string (char *key)
  * first be loaded, say, by calling gdm_config_parse.
  */
 gboolean
-gdm_get_value_bool (char *key)
+gdm_get_value_bool (const char *key)
 {
    GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
    gpointer val        = gdm_config_hash_lookup (val_hash, key);
@@ -763,7 +784,8 @@ gdm_get_value_bool (char *key)
  * Gets the per-display version  of the configuration, or the default
  * value if none exists.
  */
-gint gdm_get_value_int_per_display (gchar *display, gchar *key)
+gint gdm_get_value_int_per_display (const gchar *display,
+                                    const gchar *key)
 {
    gchar *perdispval;
 
@@ -784,7 +806,8 @@ gint gdm_get_value_int_per_display (gcha
  * Gets the per-display version  of the configuration, or the default
  * value if none exists.
  */
-gboolean gdm_get_value_bool_per_display (gchar *display, gchar *key)
+gboolean gdm_get_value_bool_per_display (const gchar *display,
+                                         const gchar *key)
 {
    gchar *perdispval;
 
@@ -813,7 +836,8 @@ gboolean gdm_get_value_bool_per_display 
  * value if none exists.  Note that this value needs to be freed,
  * unlike the non-per-display version.
  */
-gchar * gdm_get_value_string_per_display (const gchar *display, gchar *key)
+gchar * gdm_get_value_string_per_display (const gchar *display,
+                                          const gchar *key)
 {
    gchar *perdispval;
 
@@ -839,10 +863,13 @@ gchar * gdm_get_value_string_per_display
  * sure they are added to the if-test below.
  */
 void
-gdm_config_key_to_string_per_display (const gchar *display, gchar *key, gchar **retval)
+gdm_config_key_to_string_per_display (const gchar *display,
+                                      const gchar *key,
+                                      gchar **retval)
 {
    gchar *file;
    gchar **splitstr = g_strsplit (key, "/", 2);
+
    *retval = NULL;
 
    if (display == NULL)
@@ -869,50 +896,57 @@ gdm_config_key_to_string_per_display (co
  * to parse it properly if it is a bool or int.
  */
 void
-gdm_config_key_to_string (gchar *file, gchar *key, gchar **retval)
+gdm_config_key_to_string (const gchar *file,
+                          const gchar *keystring,
+                          gchar **retval)
 {
-   VeConfig *cfg = ve_config_get (file);
-   GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
-   gchar **splitstr = g_strsplit (key, "/", 2);
-   GList *list;
-   *retval = NULL;
+   GKeyFile *config;
+   GdmConfigType *type;
 
-   /* Should not fail, all keys should have a category. */
-   if (splitstr[0] == NULL)
-      return;
+   if (retval != NULL) {
+      *retval = NULL;
+   }
 
+   config = gdm_common_config_load (file, NULL);
    /* If file doesn't exist, then just return */
-   if (cfg == NULL)
+   if (config == NULL)
       return;
 
-   list = ve_config_get_keys (cfg, splitstr[0]);
-   while (list != NULL) {
-      gchar *display_key     = (char *)list->data;
-      gchar *display_fullkey = g_strdup_printf ("%s/%s", splitstr[0], display_key);
-
-      if (is_key (key, display_fullkey)) {
-         gdm_debug ("Returning value for key <%s>\n", key);
-         if (*type == CONFIG_BOOL) {
-            gboolean value = ve_config_get_bool (cfg, key);
-            if (value)
-               *retval = g_strdup ("true");
-            else
-               *retval = g_strdup ("false");
-            return;
-         } else if (*type == CONFIG_INT) {
-            gint value = ve_config_get_int (cfg, key);
-            *retval = g_strdup_printf ("%d", value);
-            return;
-         } else if (*type == CONFIG_STRING) {
-            gchar *value = ve_config_get_string (cfg, key);
-            if (value != NULL)
-               *retval = g_strdup (value);
-            return;
-         }
+   type = gdm_config_hash_lookup (type_hash, keystring);
+
+   gdm_debug ("Returning value for key <%s>\n", keystring);
+
+   switch (*type) {
+   case CONFIG_BOOL:
+      {
+         gboolean value;
+         gdm_common_config_get_boolean (config, keystring, &value, NULL);
+         if (value)
+            *retval = g_strdup ("true");
+         else
+            *retval = g_strdup ("false");
+      }
+      break;
+   case CONFIG_INT:
+      {
+         gint value;
+         gdm_common_config_get_int (config, keystring, &value, NULL);
+         *retval = g_strdup_printf ("%d", value);
       }
-      g_free (display_fullkey);
-      list = list->next;
+      break;
+   case CONFIG_STRING:
+      {
+         gchar *value;
+         gdm_common_config_get_string (config, keystring, &value, NULL);
+         *retval = value;
+      }
+      break;
+   default:
+      break;
    }
+
+   g_key_file_free (config);
+
    return;
 }
 
@@ -921,9 +955,11 @@ gdm_config_key_to_string (gchar *file, g
  *
  * Returns a configuration option as a string.  Used by GDM's
  * GET_CONFIG socket command.
- */ 
+ */
 void
-gdm_config_to_string (gchar *key, gchar *display, gchar **retval)
+gdm_config_to_string (const gchar *key,
+                      const gchar *display,
+                      gchar **retval)
 {
    GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
    *retval = NULL;
@@ -1053,12 +1089,14 @@ notify_displays_string (const gchar *key
  * functions directly.
  */
 static void
-_gdm_set_value_string (gchar *key, gchar *value_in, gboolean doing_update)
+_gdm_set_value_string (const gchar *key,
+                       const gchar *value_in,
+                       gboolean doing_update)
 {
    gchar **setting = gdm_config_hash_lookup (val_hash, key);
    gchar *setting_copy = NULL;
    gchar *temp_string;
-   gchar *value;
+   const gchar *value;
    gint i;
 
    if (! ve_string_empty (value_in))
@@ -1082,7 +1120,7 @@ _gdm_set_value_string (gchar *key, gchar
 
       temp_string = gdm_read_default ("PATH=");
       if (temp_string != NULL)
-         *setting = temp_string;                
+         *setting = temp_string;
       else if (value != NULL)
          *setting = g_strdup (value);
       else
@@ -1093,7 +1131,7 @@ _gdm_set_value_string (gchar *key, gchar
 
       temp_string = gdm_read_default ("SUPATH=");
       if (temp_string != NULL)
-         *setting = temp_string;                
+         *setting = temp_string;
       else if (value != NULL)
          *setting = g_strdup (value);
       else
@@ -1167,7 +1205,7 @@ _gdm_set_value_string (gchar *key, gchar
         *setting = g_strdup ("circles");
      else
         *setting = g_strdup (value);
- 
+
    /*
     * Default Welcome Message.  Don't translate here since the
     * GDM user may not be running with the same language as the user.
@@ -1192,16 +1230,15 @@ _gdm_set_value_string (gchar *key, gchar
 
    /* All others */
    } else {
-       for (i = 0; i < GDM_CUSTOM_COMMAND_MAX; i++) {	   
+       for (i = 0; i < GDM_CUSTOM_COMMAND_MAX; i++) {
 	       gchar * key_string = NULL;
-	       /* For each possible custom command */     
+	       /* For each possible custom command */
 	       key_string = g_strdup_printf (_("%s%d="), GDM_KEY_CUSTOM_CMD_TEMPLATE, i);
-	       if(is_key (key, key_string)) {	       
+	       if (is_key (key, key_string)) {
 		       if (value != NULL)
 			       *setting = ve_get_first_working_command (value, FALSE);
 		       else
 			       *setting = NULL;
-		       
 		       break;
 	       }
 	       g_free(key_string);
@@ -1265,13 +1302,16 @@ _gdm_set_value_string (gchar *key, gchar
 }
 
 void
-gdm_set_value_string (gchar *key, gchar *value_in)
+gdm_set_value_string (const gchar *key,
+                      const gchar *value_in)
 {
    _gdm_set_value_string (key, value_in, TRUE);
 }
 
 static void
-_gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
+_gdm_set_value_bool (const gchar *key,
+                     gboolean value,
+                     gboolean doing_update)
 {
    gboolean *setting     = gdm_config_hash_lookup (val_hash, key);
    gboolean setting_copy = *setting;
@@ -1349,13 +1389,16 @@ _gdm_set_value_bool (gchar *key, gboolea
 }
 
 void
-gdm_set_value_bool (gchar *key, gboolean value)
+gdm_set_value_bool (const gchar *key,
+                    gboolean value)
 {
    _gdm_set_value_bool (key, value, TRUE);
 }
 
 static void
-_gdm_set_value_int (gchar *key, gint value, gboolean doing_update)
+_gdm_set_value_int (const gchar *key,
+                    gint value,
+                    gboolean doing_update)
 {
    gint *setting     = gdm_config_hash_lookup (val_hash, key);
    gint setting_copy = *setting;
@@ -1405,11 +1448,14 @@ _gdm_set_value_int (gchar *key, gint val
 }
 
 void
-gdm_set_value_int (gchar *key, gint value)
+gdm_set_value_int (const gchar *key,
+                   gint value)
 {
    _gdm_set_value_int (key, value, TRUE);
 }
 
+
+
 /**
  * gdm_set_value
  *
@@ -1419,39 +1465,49 @@ gdm_set_value_int (gchar *key, gint valu
  * (greeter/Welcome[cs] for example).
  */
 static gboolean
-gdm_set_value (VeConfig *cfg, GdmConfigType *type, gchar *key, gboolean doing_update) 
+gdm_set_value (GKeyFile      *config,
+               GdmConfigType *type,
+               const gchar   *fullkey,
+               gboolean       doing_update)
 {
-   gchar * realkey = gdm_config_hash_lookup (realkey_hash, key);
+   gchar * realkey;
    gchar *value;
 
+   realkey = gdm_config_hash_lookup (realkey_hash, fullkey);
+
    if (realkey == NULL) {
       return FALSE;
    }
 
    if (*type == CONFIG_BOOL) {
-       gboolean value = ve_config_get_bool (cfg, realkey);
-       _gdm_set_value_bool (key, value, doing_update);
-       return TRUE;
+      gboolean value;
+      gdm_common_config_get_boolean (config, realkey, &value, NULL);
+      _gdm_set_value_bool (fullkey, value, doing_update);
+      return TRUE;
    } else if (*type == CONFIG_INT) {
-       gint value = ve_config_get_int (cfg, realkey);
-       _gdm_set_value_int (key, value, doing_update);
-       return TRUE;
+      gint value;
+      gdm_common_config_get_int (config, realkey, &value, NULL);
+      _gdm_set_value_int (fullkey, value, doing_update);
+      return TRUE;
    } else if (*type == CONFIG_STRING) {
 
-       /* Process translated strings */
-       if (is_key (key, GDM_KEY_WELCOME) ||
-           is_key (key, GDM_KEY_REMOTE_WELCOME)) {
-
-          GList *list = ve_config_get_keys (cfg, "greeter");
-          gchar *prefix, *basekey;
-
-          if (is_key (key, GDM_KEY_WELCOME)) {
-             basekey = g_strdup ("Welcome");
-             prefix  = g_strdup ("Welcome[");
-          } else {
-             basekey = g_strdup ("RemoteWelcome");
-             prefix  = g_strdup ("RemoteWelcome[");
-          }
+      /* Process translated strings */
+      if (is_key (fullkey, GDM_KEY_WELCOME) ||
+          is_key (fullkey, GDM_KEY_REMOTE_WELCOME)) {
+         gchar **keys;
+         gsize   length;
+         gchar  *prefix, *basekey;
+         int     i;
+
+         keys = g_key_file_get_keys (config, "greeter", &length, NULL);
+
+         if (is_key (fullkey, GDM_KEY_WELCOME)) {
+            basekey = g_strdup ("Welcome");
+            prefix  = g_strdup ("Welcome[");
+         } else {
+            basekey = g_strdup ("RemoteWelcome");
+            prefix  = g_strdup ("RemoteWelcome[");
+         }
 
           /*
            * Loop over translated keys and put all values into the hash
@@ -1460,18 +1516,22 @@ gdm_set_value (VeConfig *cfg, GdmConfigT
            * config, GDM won't forget about it until restart.  I don't think
            * this will happen, or be a real problem if it does.
            */
-          while (list != NULL) {
-             if (g_str_has_prefix ((char *)list->data, prefix) &&
-                 g_str_has_suffix ((char *)list->data, "]")) {
-                gchar *transkey, *transvalue;
+         for (i = 0; i < length; i++) {
+            gchar *key;
+
+            key = keys[i];
 
-                if (translated_hash == NULL)
-                   translated_hash = g_hash_table_new (g_str_hash, g_str_equal);
+            if (g_str_has_prefix (key, prefix) &&
+                g_str_has_suffix (key, "]")) {
+               gchar *transkey, *transvalue;
 
-                transkey   = g_strdup_printf ("greeter/%s", (char *)list->data);
-                transvalue = ve_config_get_string (cfg, transkey);
+               if (translated_hash == NULL)
+                  translated_hash = g_hash_table_new (g_str_hash, g_str_equal);
 
-                g_hash_table_remove (translated_hash, transkey);
+               transkey = g_strdup_printf ("greeter/%s", key);
+               gdm_common_config_get_string (config, transkey, &transvalue, NULL);
+
+               g_hash_table_remove (translated_hash, transkey);
 
                /*
                 * Store translated values in a separate hash.  Note that we load
@@ -1479,20 +1539,21 @@ gdm_set_value (VeConfig *cfg, GdmConfigT
                 * we add these to the same hash, we would end up loading these
                 * values in again a second time.
                 */
-                g_hash_table_insert (translated_hash, transkey, transvalue);
-             }
-             list = list->next;
-          }
-          g_free (basekey);
-          g_free (prefix);
-       }
+               g_hash_table_insert (translated_hash, transkey, transvalue);
+            }
+         }
 
-       /* Handle non-translated strings as normal */
-       value = ve_config_get_string (cfg, realkey);
-       _gdm_set_value_string (key, value, doing_update);
-       return TRUE;
+         g_strfreev (keys);
+         g_free (basekey);
+         g_free (prefix);
+      }
+
+      /* Handle non-translated strings as normal */
+      gdm_common_config_get_string (config, realkey, &value, NULL);
+      _gdm_set_value_string (fullkey, value, doing_update);
+      return TRUE;
    }
-   
+
    return FALSE;
 }
 
@@ -1562,72 +1623,77 @@ gdm_get_xservers (void)
  * Load [server-foo] sections from a configuration file.
  */
 static void
-gdm_load_xservers (VeConfig *cfg)
+gdm_load_xservers (GKeyFile *config)
 {
-   GList *list, *li;
+   int i;
+   gsize length;
+   char **groups;
 
    /* Find server definitions */
-   list = ve_config_get_sections (cfg);
-   for (li = list; li != NULL; li = li->next) {
-      const gchar *sec = li->data;
-
-      if (strncmp (sec, "server-", strlen ("server-")) == 0) {
-         gchar *id;
-
-         id = g_strdup (sec + strlen ("server-"));
-
-         /*
-          * See if we already loaded a server with this id, skip if
-          * one already exists.
-          */
-         if (gdm_find_xserver (id) != NULL) {
-            g_free (id);
-         } else {
-            GdmXserver *svr = g_new0 (GdmXserver, 1);
-            gchar buf[256];
-            int n;
-
-            svr->id = id;
-
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_NAME, sec);
-            svr->name = ve_config_get_string (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_COMMAND, sec);
-            svr->command = ve_config_get_string (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_FLEXIBLE, sec);
-            svr->flexible = ve_config_get_bool (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSABLE, sec);
-            svr->choosable = ve_config_get_bool (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_HANDLED, sec);
-            svr->handled = ve_config_get_bool (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSER, sec);
-            svr->chooser = ve_config_get_bool (cfg, buf);
-            g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_PRIORITY, sec);
-            svr->priority = ve_config_get_int (cfg, buf);
-
-            /* do some bounds checking */
-             n = svr->priority;
-             if (n < PRIO_MIN)
-                n = PRIO_MIN;
-             else if (n > PRIO_MAX)
-                n = PRIO_MAX;
-             if (n != svr->priority) {
-                gdm_error (_("%s: Priority out of bounds; changed to %d"),
-                             "gdm_config_parse", n);
-                svr->priority = n;
-             }
-
-            if (ve_string_empty (svr->command)) {
-               gdm_error (_("%s: Empty server command; "
-                            "using standard command."), "gdm_config_parse");
-               g_free (svr->command);
-               svr->command = g_strdup (GdmStandardXserver);
-            }
+   groups = g_key_file_get_groups (config, &length);
+
+   for (i = 0; i < length; i++) {
+      gchar *id;
+      const char *sec = groups [i];
 
-            xservers = g_slist_append (xservers, svr);
+      if (strncmp (sec, "server-", strlen ("server-")) != 0) {
+         continue;
+      }
+
+      id = g_strdup (sec + strlen ("server-"));
+
+      /*
+       * See if we already loaded a server with this id, skip if
+       * one already exists.
+       */
+      if (gdm_find_xserver (id) != NULL) {
+         g_free (id);
+      } else {
+         GdmXserver *svr = g_new0 (GdmXserver, 1);
+         gchar buf[256];
+         int n;
+
+         svr->id = id;
+
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_NAME, sec);
+         gdm_common_config_get_string (config, buf, &svr->name, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_COMMAND, sec);
+         gdm_common_config_get_string (config, buf, &svr->command, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_FLEXIBLE, sec);
+         gdm_common_config_get_boolean (config, buf, &svr->flexible, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSABLE, sec);
+         gdm_common_config_get_boolean (config, buf, &svr->choosable, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_HANDLED, sec);
+         gdm_common_config_get_boolean (config, buf, &svr->handled, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSER, sec);
+         gdm_common_config_get_boolean (config, buf, &svr->chooser, NULL);
+         g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_PRIORITY, sec);
+         gdm_common_config_get_int (config, buf, &svr->priority, NULL);
+
+         /* do some bounds checking */
+         n = svr->priority;
+         if (n < PRIO_MIN)
+            n = PRIO_MIN;
+         else if (n > PRIO_MAX)
+            n = PRIO_MAX;
+         if (n != svr->priority) {
+            gdm_error (_("%s: Priority out of bounds; changed to %d"),
+                       "gdm_config_parse", n);
+            svr->priority = n;
+         }
+
+         if (ve_string_empty (svr->command)) {
+            gdm_error (_("%s: Empty server command; "
+                         "using standard command."), "gdm_config_parse");
+            g_free (svr->command);
+            svr->command = g_strdup (GdmStandardXserver);
          }
+
+         xservers = g_slist_append (xservers, svr);
       }
    }
-  ve_config_free_list_of_strings (list);
+
+   g_strfreev (groups);
 }
 
 /**
@@ -1636,7 +1702,8 @@ gdm_load_xservers (VeConfig *cfg)
  * Reload [server-foo] sections from the configuration files.
  */
 static void
-gdm_update_xservers (VeConfig *cfg, VeConfig *custom_cfg)
+gdm_update_xservers (GKeyFile *cfg,
+                     GKeyFile *custom_cfg)
 {
    GSList *xli;
 
@@ -1677,7 +1744,7 @@ gdm_update_xservers (VeConfig *cfg, VeCo
 
 /**
  * gdm_update_config
- * 
+ *
  * Will cause a the GDM daemon to re-read the key from the configuration
  * file and cause notify signal to be sent to the slaves for the 
  * specified key, if appropriate.  Only specific keys defined in the
@@ -1691,19 +1758,23 @@ gdm_update_xservers (VeConfig *cfg, VeCo
  * functions and in the gdm_slave_handle_notify function in slave.c.
  */
 gboolean
-gdm_update_config (gchar* key)
+gdm_update_config (const gchar *key)
 {
    GdmConfigType *type;
    struct stat statbuf, custom_statbuf;
-   VeConfig *cfg;
-   VeConfig *custom_cfg = NULL;
-   gboolean rc = FALSE;
+   GKeyFile *cfg;
+   GKeyFile *custom_cfg;
+   gboolean rc;
+
+   rc = FALSE;
+   cfg = NULL;
+   custom_cfg = NULL;
 
    /*
     * Do not allow these keys to be updated, since GDM would need
     * additional work, or at least heavy testing, to make these keys
     * flexible enough to be changed at runtime.
-    */ 
+    */
    if (is_key (key, GDM_KEY_PID_FILE) ||
        is_key (key, GDM_KEY_CONSOLE_NOTIFY) ||
        is_key (key, GDM_KEY_USER) ||
@@ -1718,7 +1789,7 @@ gdm_update_config (gchar* key)
 
    /* See if custom file is now there */
    if (custom_config_file == NULL) {
-      custom_cfg = gdm_get_custom_config (&statbuf);
+      custom_cfg = gdm_get_custom_config ();
    }
 
    /* Don't bother re-reading configuration if files have not changed */
@@ -1732,8 +1803,10 @@ gdm_update_config (gchar* key)
    * has changed since GDM was started.
    */
    if (config_file_mtime        == statbuf.st_mtime &&
-       custom_config_file_mtime == custom_statbuf.st_mtime)
-      return TRUE;
+       custom_config_file_mtime == custom_statbuf.st_mtime) {
+      rc = TRUE;
+      goto out;
+   }
 
    /* Shortcut for updating all XDMCP parameters */
    if (is_key (key, "xdmcp/PARAMETERS")) {
@@ -1745,19 +1818,21 @@ gdm_update_config (gchar* key)
       gdm_update_config (GDM_KEY_MAX_INDIRECT);
       gdm_update_config (GDM_KEY_MAX_WAIT_INDIRECT);
       gdm_update_config (GDM_KEY_PING_INTERVAL);
-      return TRUE;
+      rc = TRUE;
+      goto out;
    }
 
-   if (custom_config_file != NULL)
-      custom_cfg = ve_config_new (custom_config_file);
+   if (custom_config_file != NULL) {
+      custom_cfg = gdm_common_config_load (custom_config_file, NULL);
+   }
 
    if (is_key (key, "xservers/PARAMETERS")) {
-      cfg = ve_config_new (config_file);
+      cfg = gdm_common_config_load (config_file, NULL);
+
       gdm_update_xservers (cfg, custom_cfg);
-      ve_config_destroy (cfg);
-      if (custom_cfg != NULL)
-         ve_config_destroy (custom_cfg);
-      return TRUE;
+
+      rc = TRUE;
+      goto out;
    }
 
    type = gdm_config_hash_lookup (type_hash, key);
@@ -1766,38 +1841,38 @@ gdm_update_config (gchar* key)
 
    /* First check the custom file */
    if (custom_cfg != NULL) {
-       gchar **splitstr = g_strsplit (key, "/", 2);
-
-       if (splitstr[0] != NULL) {
-          GList *list = ve_config_get_keys (custom_cfg, splitstr[0]);
-
-          while (list != NULL) {
-             gchar *custom_key     = (char *)list->data;
-             gchar *custom_fullkey = g_strdup_printf ("%s/%s", splitstr[0], custom_key);
-
-             if (is_key (key, custom_fullkey)) {
-                rc = gdm_set_value (custom_cfg, type, key, TRUE);
-                
-                g_free (custom_fullkey);
-                g_strfreev (splitstr);
-                ve_config_destroy (custom_cfg);
-                return (rc);
-             }
-
-             g_free (custom_fullkey);
-             list = list->next;
-          }
-       }
-       g_strfreev (splitstr);
+      char *config_group;
+      char *config_key;
+      gboolean has_key;
+
+      config_group = config_key = NULL;
+      if (! gdm_common_config_parse_key_string (key, &config_group, &config_key, NULL)) {
+         rc = FALSE;
+         goto out;
+      }
+
+      has_key = g_key_file_has_key (custom_cfg, config_group, config_key, NULL);
+      g_free (config_group);
+      g_free (config_key);
+
+      if (has_key) {
+         rc = gdm_set_value (custom_cfg, type, key, TRUE);
+         goto out;
+      }
    }
 
    /* If not in the custom file, check main config file */
-   cfg = ve_config_new (config_file);
-   rc  = gdm_set_value (cfg, type, key, TRUE);
+   cfg = gdm_common_config_load (config_file, NULL);
+
+   rc = gdm_set_value (cfg, type, key, TRUE);
+
+ out:
+   if (cfg != NULL)
+      g_key_file_free (cfg);
 
-   ve_config_destroy (cfg);
    if (custom_cfg != NULL)
-      ve_config_destroy (custom_cfg);
+      g_key_file_free (custom_cfg);
+
    return rc;
 }
 
@@ -1866,8 +1941,8 @@ check_servauthdir (struct stat *statbuf)
 }
 
 typedef struct _GdmConfigFiles {
-   VeConfig *cfg;
-   VeConfig *custom_cfg;
+   GKeyFile *cfg;
+   GKeyFile *custom_cfg;
 } GdmConfigFiles;
 
 /**
@@ -1876,24 +1951,33 @@ typedef struct _GdmConfigFiles {
  * Load the displays section of the config file
  */
 static void
-gdm_load_displays (VeConfig *cfg, GList *list )
+gdm_load_displays (GKeyFile *cfg,
+                   char    **keys)
 {
-   GList *li;
    GSList *li2;
+   int i;
 
-   for (li = list; li != NULL; li = li->next) {
-      const gchar *key = li->data;
+   for (i = 0; keys[i] != NULL; i++) {
+      const gchar *key = keys[i];
 
+      gdm_debug ("Loading display for key '%s'", key);
       if (isdigit (*key)) {
          gchar *fullkey;
          gchar *dispval;
          int keynum = atoi (key);
          gboolean skip_entry = FALSE;
+         GError *error;
 
-         fullkey  = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
-         dispval  = ve_config_get_string (cfg, fullkey);
+         fullkey = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
+         dispval = NULL;
+         error = NULL;
+         gdm_common_config_get_string (cfg, fullkey, &dispval, &error);
+         if (error != NULL) {
+            gdm_error ("Unable to get name for server '%s': %s", fullkey, error->message);
+         }
          g_free (fullkey);
 
+         gdm_debug ("Got name for server: %s", dispval);
          /* Do not add if already in the list */
          for (li2 = displays; li2 != NULL; li2 = li2->next) {
             GdmDisplay *disp = li2->data;
@@ -1955,26 +2039,23 @@ gdm_load_config_option (gpointer key_in,
    if (type != NULL) {
       /* First check the custom file */
       if (cfgfiles->custom_cfg != NULL) {
-          gchar **splitstr = g_strsplit (key_in, "/", 2);
-          if (splitstr[0] != NULL) {
-             GList *list = ve_config_get_keys (cfgfiles->custom_cfg, splitstr[0]);
-
-             while (list != NULL) {
-                gchar *custom_key     = (char *)list->data;
-                gchar *custom_fullkey = g_strdup_printf ("%s/%s", splitstr[0], custom_key);
-
-                if (is_key (key_in, custom_fullkey)) {
-                   custom_retval = gdm_set_value (cfgfiles->custom_cfg, type, key, FALSE);
-                   g_free (custom_fullkey);
-                   g_strfreev (splitstr);
-                   return;
-                }
+         gchar *config_group;
+         gchar *config_key;
+         gboolean has_key;
+
+         config_group = config_key = NULL;
+         if (! gdm_common_config_parse_key_string (key_in, &config_group, &config_key, NULL)) {
+            return;
+         }
+
+         has_key = g_key_file_has_key (cfgfiles->custom_cfg, config_group, config_key, NULL);
+         g_free (config_group);
+         g_free (config_key);
 
-                g_free (custom_fullkey);
-                list = list->next;
-             }
-          }
-          g_strfreev (splitstr);
+         if (has_key) {
+            custom_retval = gdm_set_value (cfgfiles->custom_cfg, type, key, FALSE);
+            return;
+         }
       }
 
       /* If not in the custom file, check main config file */
@@ -1982,7 +2063,7 @@ gdm_load_config_option (gpointer key_in,
          return;
    }
 
-   gdm_error ("Cannot set config option %s", key); 
+   gdm_error ("Cannot set config option %s", key);
 }
 
 /**
@@ -1994,7 +2075,8 @@ void
 gdm_config_parse (void)
 {
    GdmConfigFiles cfgfiles;
-   VeConfig *cfg, *custom_cfg;
+   GKeyFile *cfg;
+   GKeyFile *custom_cfg;
    struct passwd *pwent;
    struct group *grent;
    struct stat statbuf;
@@ -2012,16 +2094,15 @@ gdm_config_parse (void)
     * not exist we cannot continue and need to bail out.
     */
 
-   cfg                      = gdm_get_default_config (&statbuf);
+   cfg = gdm_get_default_config ();
 
    if (cfg == NULL)
 	   gdm_fail (_("%s: Main config file (defaults.conf) is missing. Aborting!"), "gdm_config_parse");
 
-   config_file_mtime        = statbuf.st_mtime;
-   custom_cfg               = gdm_get_custom_config (&statbuf);
-   custom_config_file_mtime = statbuf.st_mtime;
-   cfgfiles.cfg             = cfg;
-   cfgfiles.custom_cfg      = custom_cfg;
+   custom_cfg = gdm_get_custom_config ();
+
+   cfgfiles.cfg = cfg;
+   cfgfiles.custom_cfg = custom_cfg;
 
    /* Loop over all configuration options and load them */
    g_hash_table_foreach (type_hash, gdm_load_config_option, &cfgfiles);
@@ -2030,20 +2111,37 @@ gdm_config_parse (void)
    gdm_update_xservers (cfg, custom_cfg);
 
    /* Only read the list if no_console is FALSE at this stage */
-   if ( !no_console) {
-      GList *list;
+   if (! no_console) {
+      char  **keys;
+      GError *error;
       GSList *li2;
+      gsize   len;
 
       /* Find static X server definitions */
-      if (custom_cfg) {
-         list = ve_config_get_keys (custom_cfg, GDM_KEY_SECTION_SERVERS);
-         gdm_load_displays (custom_cfg, list);
-         ve_config_free_list_of_strings (list);
+      if (custom_cfg != NULL) {
+         error = NULL;
+         keys = g_key_file_get_keys (custom_cfg, GDM_KEY_SECTION_SERVERS, &len, &error);
+         if (error != NULL) {
+            gdm_error ("Unable to load server list: %s", error->message);
+            g_error_free (error);
+         }
+         if (keys != NULL) {
+            gdm_load_displays (custom_cfg, keys);
+         }
+         g_strfreev (keys);
       }
 
-      list = ve_config_get_keys (cfg, GDM_KEY_SECTION_SERVERS);
-      gdm_load_displays (cfg, list);
-      ve_config_free_list_of_strings (list);
+      error = NULL;
+      keys = g_key_file_get_keys (cfg, GDM_KEY_SECTION_SERVERS, &len, &error);
+      if (error != NULL) {
+         gdm_error ("Unable to load server list: %s", error->message);
+         g_error_free (error);
+      }
+      if (keys != NULL) {
+         gdm_load_displays (cfg, keys);
+      }
+
+      g_strfreev (keys);
 
       /* Free list of inactive, not needed anymore */
       for (li2 = displays_inactive; li2 != NULL; li2 = li2->next) {
@@ -2280,9 +2378,9 @@ gdm_config_parse (void)
    /* Check that user authentication is properly configured */
    gdm_verify_check ();
 
-   if (custom_cfg)
-      ve_config_destroy (custom_cfg);
-   ve_config_destroy (cfg);
+   if (custom_cfg != NULL)
+      g_key_file_free (custom_cfg);
+   g_key_file_free (cfg);
 }
 
 /** 
@@ -2327,7 +2425,7 @@ gdm_set_high_display_num (gint val)
  * Returns TRUE if the key is a valid key, FALSE otherwise.
  */
 gboolean
-gdm_is_valid_key (gchar *key)
+gdm_is_valid_key (const gchar *key)
 {
    GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
    if (type == NULL)
@@ -2433,15 +2531,17 @@ get_facefile_from_gnome2_dir_config (con
    /* Sanity check on ~user/.gnome2/gdm */
    cfgdir = g_build_filename (homedir, ".gnome2", "gdm", NULL);
    if (G_LIKELY (check_user_file (cfgdir, uid))) {
-      VeConfig *cfg;
+      GKeyFile *cfg;
       char *cfgfile;
 
       cfgfile = g_build_filename (homedir, ".gnome2", "gdm", NULL);
-      cfg = ve_config_new (cfgfile);
+      cfg = gdm_common_config_load (cfgfile, NULL);
       g_free (cfgfile);
 
-      picfile = ve_config_get_string (cfg, "face/picture=");
-      ve_config_destroy (cfg);
+      if (cfg != NULL) {
+         gdm_common_config_get_string (cfg, "face/picture=", &picfile, NULL);
+         g_key_file_free (cfg);
+      }
 
       /* must exist and be absolute (note that this check
        * catches empty strings)*/
@@ -2626,10 +2726,13 @@ gdm_get_session_exec (const char *sessio
 {
    char *file;
    char *full = NULL;
-   VeConfig *cfg;
+   GKeyFile *cfg;
    static char *exec;
    static char *cached = NULL;
-   char *tryexec;
+   gboolean hidden;
+   char *ret;
+
+   cfg = NULL;
 
    /* clear cache */
    if (session_name == NULL) {
@@ -2673,24 +2776,43 @@ gdm_get_session_exec (const char *sessio
       }
    }
 
-   cfg = ve_config_get (full);
+   cfg = gdm_common_config_load (full, NULL);
    g_free (full);
-   if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false"))
-      return NULL;
+   if (cfg == NULL) {
+      ret = NULL;
+      goto out;
+   }
+
+   hidden = FALSE;
+   gdm_common_config_get_boolean (cfg, "Desktop Entry/Hidden=false", &hidden, NULL);
+   if (hidden) {
+      ret = NULL;
+      goto out;
+   }
 
    if (check_try_exec) {
-      tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec");
+      char *tryexec;
+      tryexec = NULL;
+      gdm_common_config_get_string (cfg, "Desktop Entry/TryExec", &tryexec, NULL);
       if ( ! ve_string_empty (tryexec) &&
            ! ve_is_prog_in_path (tryexec, gdm_get_value_string (GDM_KEY_PATH)) &&
            ! ve_is_prog_in_path (tryexec, gdm_saved_getenv ("PATH"))) {
          g_free (tryexec);
-         return NULL;
+         ret = NULL;
+         goto out;
       }
       g_free (tryexec);
    }
 
-   exec = ve_config_get_string (cfg, "Desktop Entry/Exec");
-   return g_strdup (exec);
+   exec = NULL;
+   gdm_common_config_get_string (cfg, "Desktop Entry/Exec", &exec, NULL);
+   ret = g_strdup (exec);
+
+ out:
+
+   g_key_file_free (cfg);
+
+   return ret;
 }
 
 /**
@@ -2701,77 +2823,110 @@ gdm_get_session_exec (const char *sessio
  * $HOME/.dmrc file via vicious-extensions.
  */
 void
-gdm_set_user_session_lang (gboolean savesess, gboolean savelang,
-    const char *home_dir, const char *save_session, const char *save_language)
+gdm_set_user_session_lang (gboolean savesess,
+                           gboolean savelang,
+                           const char *home_dir,
+                           const char *save_session,
+                           const char *save_language)
 {
-   VeConfig *dmrc = NULL;
-   gchar *cfgstr = g_build_filename (home_dir, ".dmrc", NULL);
+   GKeyFile *dmrc;
+   gchar *cfgstr;
+
+   cfgstr = g_build_filename (home_dir, ".dmrc", NULL);
+
+   dmrc = gdm_common_config_load (cfgstr, NULL);
+   if (dmrc == NULL) {
+      return;
+   }
 
    if (savesess) {
-      dmrc = ve_config_new (cfgstr);
-      ve_config_set_string (dmrc, "Desktop/Session",
-         ve_sure_string (save_session));
+      g_key_file_set_string (dmrc, "Desktop", "Session", ve_sure_string (save_session));
    }
 
    if (savelang) {
-      if (dmrc == NULL)
-         dmrc = ve_config_new (cfgstr);
-      if (ve_string_empty (save_language))
+      if (ve_string_empty (save_language)) {
          /* we chose the system default language so wipe the
           * lang key */
-         ve_config_delete_key (dmrc, "Desktop/Language");
-      else
-         ve_config_set_string (dmrc, "Desktop/Language", save_language);
+         g_key_file_remove_key (dmrc, "Desktop", "Language", NULL);
+      } else {
+         g_key_file_set_string (dmrc, "Desktop", "Language", save_language);
+      }
    }
 
-   g_free (cfgstr);
-
    if (dmrc != NULL) {
       mode_t oldmode;
       oldmode = umask (077);
-      ve_config_save (dmrc, FALSE);
-      ve_config_destroy (dmrc);
-      dmrc = NULL;
+      gdm_common_config_save (dmrc, cfgstr, NULL);
       umask (oldmode);
    }
+
+   g_free (cfgstr);
+   g_key_file_free (dmrc);
 }
 
 void
-gdm_get_user_session_lang (char **usrsess, char **usrlang,
-   const char *home_dir, gboolean *savesess)
+gdm_get_user_session_lang (char **usrsess,
+                           char **usrlang,
+                           const char *home_dir,
+                           gboolean *savesess)
 {
    char *p;
-   char *cfgfile = g_build_filename (home_dir, ".dmrc", NULL);
-   VeConfig *cfg = ve_config_new (cfgfile);
+   char *cfgfile;
+   GKeyFile *cfg;
+   char *session;
+   char *lang;
+   gboolean save;
+
+   cfgfile = g_build_filename (home_dir, ".dmrc", NULL);
+   cfg = gdm_common_config_load (cfgfile, NULL);
    g_free (cfgfile);
 
-   *usrsess = ve_config_get_string (cfg, "Desktop/Session");
-   if (*usrsess == NULL)
-      *usrsess = g_strdup ("");
+   save = FALSE;
+   session = NULL;
+
+   gdm_common_config_get_string (cfg, "Desktop/Session", &session, NULL);
+   if (session == NULL) {
+      session = g_strdup ("");
+   }
 
    /* this is just being truly anal about what users give us, and in case
     * it looks like they may have included a path whack it. */
-   p = strrchr (*usrsess, '/');
+   p = strrchr (session, '/');
    if (p != NULL) {
-      char *tmp = g_strdup (p+1);
-      g_free (*usrsess);
-      *usrsess = tmp;
+      char *tmp = g_strdup (p + 1);
+      g_free (session);
+      session = tmp;
    }
 
    /* ugly workaround for migration */
-   if ((strcmp (ve_sure_string (*usrsess), "Default.desktop") == 0 ||
-        strcmp (ve_sure_string (*usrsess), "Default") == 0) &&
+   if ((strcmp (ve_sure_string (session), "Default.desktop") == 0 ||
+        strcmp (ve_sure_string (session), "Default") == 0) &&
        ! ve_is_prog_in_path ("Default.desktop",
             gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR))) {
-           g_free (*usrsess);
-           *usrsess = g_strdup ("default");
-           *savesess = TRUE;
+           g_free (session);
+           session = g_strdup ("default");
+           save = TRUE;
    }
 
-   *usrlang = ve_config_get_string (cfg, "Desktop/Language");
-   if (*usrlang == NULL)
-           *usrlang = g_strdup ("");
+   gdm_common_config_get_string (cfg, "Desktop/Language", &lang, NULL);
+   if (lang == NULL) {
+           lang = g_strdup ("");
+   }
+
+   if (usrsess != NULL) {
+      *usrsess = g_strdup (session);
+   }
+   g_free (session);
+
+   if (savesess != NULL) {
+      *savesess = save;
+   }
+
+   if (usrlang != NULL) {
+      *usrlang = g_strdup (lang);
+   }
+   g_free (lang);
 
-   ve_config_destroy (cfg);
+   g_key_file_free (cfg);
 }
 
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 4683)
+++ Makefile.am	(working copy)
@@ -1,12 +1,16 @@
-SUBDIRS = \
-	po \
-	config \
-	pixmaps \
-	vicious-extensions \
-	daemon \
-	gui \
-	utils \
-	docs
+NULL =
+
+SUBDIRS = 			\
+	po 			\
+	config 			\
+	pixmaps 		\
+	common 			\
+	daemon 			\
+	gui 			\
+	utils 			\
+	docs			\
+	$(NULL)
+
 
 # add these when help gets added back
 # docs omf-install
