diff -puNr gnome-control-center.orig/capplets/sound/gnome-settings-sound.desktop.in.in gnome-control-center/capplets/sound/gnome-settings-sound.desktop.in.in
--- gnome-control-center.orig/capplets/sound/gnome-settings-sound.desktop.in.in	2006-01-22 23:07:17.000000000 +0100
+++ gnome-control-center/capplets/sound/gnome-settings-sound.desktop.in.in	2006-01-29 17:26:26.000000000 +0100
@@ -1,7 +1,7 @@
 [Desktop Entry]
 Encoding=UTF-8
-_Name=Sound
-_Comment=Enable sound and associate sounds with events
+_Name=Sound & Video
+_Comment=Configure sound & video and associate sounds with events
 Exec=gnome-sound-properties
 Icon=gnome-settings-sound
 Terminal=false
diff -puNr gnome-control-center.orig/capplets/sound/Makefile.am gnome-control-center/capplets/sound/Makefile.am
--- gnome-control-center.orig/capplets/sound/Makefile.am	2004-11-28 09:14:04.000000000 +0100
+++ gnome-control-center/capplets/sound/Makefile.am	2006-01-29 17:26:26.000000000 +0100
@@ -3,8 +3,9 @@ bin_PROGRAMS = gnome-sound-properties
 gnome_sound_properties_LDADD = \
 	$(top_builddir)/libsounds/libsounds.a \
 	$(GNOMECC_CAPPLETS_LIBS) \
-	$(SOUND_CAPPLET_LIBS)
-gnome_sound_properties_SOURCES = sound-properties-capplet.c
+	$(SOUND_CAPPLET_LIBS) \
+	$(HAL_LIBS)
+gnome_sound_properties_SOURCES = sound-properties-capplet.c pipeline-tests.c
 
 @INTLTOOL_DESKTOP_RULE@
 
@@ -18,6 +19,6 @@ desktopdir = $(datadir)/applications
 Desktop_in_files = gnome-settings-sound.desktop.in
 desktop_DATA = $(Desktop_in_files:.desktop.in=.desktop)
 
-INCLUDES   = $(GNOMECC_CAPPLETS_CFLAGS) $(SOUND_CAPPLET_CFLAGS)
+INCLUDES   = $(GNOMECC_CAPPLETS_CFLAGS) $(SOUND_CAPPLET_CFLAGS) $(HAL_CFLAGS)
 CLEANFILES = $(GNOMECC_CAPPLETS_CLEANFILES) $(Desktop_in_files) $(desktop_DATA)
 EXTRA_DIST = $(Glade_DATA) $(desktop_icons_DATA)
diff -puNr gnome-control-center.orig/capplets/sound/pipeline-tests.c gnome-control-center/capplets/sound/pipeline-tests.c
--- gnome-control-center.orig/capplets/sound/pipeline-tests.c	1970-01-01 01:00:00.000000000 +0100
+++ gnome-control-center/capplets/sound/pipeline-tests.c	2006-01-29 17:26:26.000000000 +0100
@@ -0,0 +1,187 @@
+/* -*- mode: c; style: linux -*- */
+/* -*- c-basic-offset: 2 -*- */
+
+/* pipeline-tests.c
+ * Copyright (C) 2002 Jan Schmidt
+ * Copyright (C) 2005 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006 Jürg Billeter <j@bitron.ch>
+ *
+ * Written by: Jan Schmidt <thaytan@mad.scientist.com>
+ *
+ * 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, 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <locale.h>
+#include <string.h>
+#include <gnome.h>
+#include <glade/glade.h>
+#include <gtk/gtk.h>
+#include <gst/gst.h>
+
+#include "pipeline-tests.h"
+#define WID(s) glade_xml_get_widget (interface_xml, s)
+static gint timeout_tag;
+
+static GstElement *gst_test_pipeline;
+
+static void pipeline_error_dlg (GtkWindow * parent,
+    const gchar * pipeline, const gchar * error_message);
+
+/* User responded in the dialog */
+static void
+user_test_pipeline_response (GtkDialog * widget, gint response_id,
+    GladeXML * dialog)
+{
+  /* Close the window causing the test to end */
+  gtk_widget_hide (GTK_WIDGET (widget));
+}
+
+/* Timer timeout has been occurred */
+static gint
+user_test_pipeline_timeout (gpointer data)
+{
+  gtk_progress_bar_pulse (GTK_PROGRESS_BAR (data));
+  return TRUE;
+}
+
+/* Build the pipeline */
+static gboolean
+build_test_pipeline (const gchar * pipeline, GError ** p_err)
+{
+  gst_test_pipeline = gst_parse_launch (pipeline, p_err);
+
+  if (*p_err == NULL && gst_test_pipeline != NULL)
+    return TRUE;
+  
+  return FALSE;
+}
+
+static void
+pipeline_error_dlg (GtkWindow * parent,
+    const gchar * pipeline, const gchar * error_message)
+{
+  gchar *errstr;
+
+  if (error_message) {
+    errstr = g_strdup_printf ("%s: %s", pipeline, error_message);
+  } else {
+    errstr = g_strdup_printf (_("Failed to construct test pipeline for '%s'"),
+        pipeline);
+  }
+
+  if (parent == NULL) {
+    g_printerr ("%s", errstr);
+  } else {
+    GtkWidget *dialog;
+
+    dialog = gtk_message_dialog_new (parent,
+        GTK_DIALOG_DESTROY_WITH_PARENT,
+        GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", errstr);
+
+    gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy (dialog);
+  }
+
+  g_free (errstr);
+}
+
+/* Construct and run the pipeline. Use the indicated parent
+ * for any user interaction window.
+ */
+void
+user_test_pipeline (GladeXML * interface_xml,
+    GtkWindow * parent, const gchar * pipeline)
+{
+  GstStateChangeReturn ret;
+  GtkDialog *dialog = NULL;
+  GstMessage *msg;
+  GError *err = NULL;
+  GstBus *bus;
+
+  gst_test_pipeline = NULL;
+
+  /* Build the pipeline */
+  if (!build_test_pipeline (pipeline, &err)) {
+    /* Show the error pipeline */
+    pipeline_error_dlg (parent, pipeline, (err) ? err->message : NULL);
+    if (err)
+      g_error_free (err);
+    return;
+  }
+
+  /* Setup the 'click ok when done' dialog */
+  if (parent) {
+    dialog = GTK_DIALOG (WID ("test_pipeline"));
+    /* g_return_if_fail(dialog != NULL); */
+    gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+    gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+    g_signal_connect (G_OBJECT (dialog), "response",
+        (GCallback) user_test_pipeline_response, interface_xml);
+  }
+
+  /* Start the pipeline and wait for max. 3 seconds for it to start up */
+  gst_element_set_state (gst_test_pipeline, GST_STATE_PLAYING);
+  ret = gst_element_get_state (gst_test_pipeline, NULL, NULL, 3 * GST_SECOND);
+
+  /* Check if any error messages were posted on the bus */
+  bus = gst_element_get_bus (gst_test_pipeline);
+  msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
+  gst_object_unref (bus);
+
+  if (msg != NULL) {
+    gchar *dbg = NULL;
+
+    gst_message_parse_error (msg, &err, &dbg);
+    gst_message_unref (msg);
+
+    g_message ("Error running pipeline '%s': %s [%s]", pipeline,
+        (err) ? err->message : "(null error)",
+        (dbg) ? dbg : "no additional debugging details");
+    pipeline_error_dlg (parent, pipeline, err->message);
+    g_error_free (err);
+    g_free (dbg);
+  } else if (ret != GST_STATE_CHANGE_SUCCESS) {
+    pipeline_error_dlg (parent, pipeline, NULL);
+  } else {
+    /* Show the dialog */
+    if (dialog) {
+      gtk_window_present (GTK_WINDOW (dialog));
+      timeout_tag =
+          gtk_timeout_add (50, user_test_pipeline_timeout,
+          WID ("test_pipeline_progress"));
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_timeout_remove (timeout_tag);
+      gtk_widget_hide (GTK_WIDGET (dialog));
+    } else {
+      gint secs;
+
+      /* A bit hacky: No parent dialog, run in limited test mode */
+      for (secs = 0; secs < 5; ++secs) {
+        g_print (".");
+        g_usleep (G_USEC_PER_SEC);      /* 1 second */
+      }
+    }
+  }
+
+  if (gst_test_pipeline) {
+    gst_element_set_state (gst_test_pipeline, GST_STATE_NULL);
+    gst_object_unref (gst_test_pipeline);
+    gst_test_pipeline = NULL;
+  }
+}
diff -puNr gnome-control-center.orig/capplets/sound/pipeline-tests.h gnome-control-center/capplets/sound/pipeline-tests.h
--- gnome-control-center.orig/capplets/sound/pipeline-tests.h	1970-01-01 01:00:00.000000000 +0100
+++ gnome-control-center/capplets/sound/pipeline-tests.h	2006-01-29 17:26:26.000000000 +0100
@@ -0,0 +1,36 @@
+/* -*- mode: c; style: linux -*- */
+/* -*- c-basic-offset: 2 -*- */
+
+/* pipeline-tests.h
+ * Copyright (C) 2002 Jan Schmidt
+ * Copyright (C) 2006 Jürg Billeter <j@bitron.ch>
+ *
+ * Written by: Jan Schmidt <thaytan@mad.scientist.com>
+ *
+ * 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, 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+#ifndef __PIPELINE_TESTS_HH__
+#define __PIPELINE_TESTS_HH__
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+void user_test_pipeline(GladeXML *interface_xml,
+		    GtkWindow *parent,
+		    const gchar *pipeline);
+
+			
+#endif	
diff -puNr gnome-control-center.orig/capplets/sound/sound-properties-capplet.c gnome-control-center/capplets/sound/sound-properties-capplet.c
--- gnome-control-center.orig/capplets/sound/sound-properties-capplet.c	2006-01-12 13:55:37.000000000 +0100
+++ gnome-control-center/capplets/sound/sound-properties-capplet.c	2006-01-29 18:06:15.000000000 +0100
@@ -40,22 +40,52 @@
 
 #include <glade/glade.h>
 
+#include <dbus/dbus-glib-lowlevel.h>
+#include <libhal.h>
+#include <gst/gst.h>
+
 /* Needed only for the sound capplet */
 
 #include <stdlib.h>
 #include <sys/types.h>
 
 #include "activate-settings-daemon.h"
+#include "pipeline-tests.h"
+
+typedef enum {
+	AUDIO_PLAYBACK,
+	AUDIO_CAPTURE,
+	VIDEO_PLAYBACK,
+	VIDEO_CAPTURE
+} device_type;
+
+typedef struct _DeviceChooser
+{
+	const gchar *profile;
+	int type;
+	GtkWidget *combobox;
+	GtkListStore *model;
+	const gchar *test_pipeline;
+} DeviceChooser;
 
 #define ENABLE_ESD_KEY             "/desktop/gnome/sound/enable_esd"
 #define EVENT_SOUNDS_KEY           "/desktop/gnome/sound/event_sounds"
 #define VISUAL_BELL_KEY            "/apps/metacity/general/visual_bell"
 #define AUDIO_BELL_KEY             "/apps/metacity/general/audible_bell"
 #define VISUAL_BELL_TYPE_KEY       "/apps/metacity/general/visual_bell_type"
+#define GST_GCONF_DIR              "/system/gstreamer/0.10"
+
+#define AUDIO_TEST_SOURCE          "audiotestsrc wave=sine freq=512"
+#define VIDEO_TEST_SOURCE          "videotestsrc"
+#define AUDIO_TEST_IN_BETWEEN      " ! audioconvert ! audioresample ! "
+#define VIDEO_TEST_IN_BETWEEN      " ! ffmpegcolorspace ! "
 
 /* Capplet-specific prototypes */
 
 static SoundProperties *props = NULL;
+static GConfClient     *gconf_client = NULL;
+static GtkWidget       *dialog_win = NULL;
+static GList           *device_choosers = NULL;
 
 static gboolean
 CheckXKB (void)
@@ -163,6 +193,471 @@ create_dialog (void) 
 	return dialog;
 }
 
+static gboolean
+element_available (const gchar *pipeline)
+{
+	gboolean res = FALSE;
+	gchar *p, *first_space;
+
+	if (pipeline == NULL || *pipeline == '\0')
+		return FALSE;
+
+	p = g_strdup (pipeline);
+
+	g_strstrip (p);
+
+	/* skip the check and pretend all is fine if it's something that does
+	 * not look like an element name (e.g. parentheses to signify a bin) */
+	if (!g_ascii_isalpha (*p)) {
+		g_free (p);
+		return TRUE;
+	}
+
+	/* just the element name, no arguments */
+	first_space = strchr (p, ' ');
+	if (first_space != NULL)
+		*first_space = '\0';
+
+	/* check if element is available */
+	res = gst_default_registry_check_feature_version (p, GST_VERSION_MAJOR,
+		GST_VERSION_MINOR, 0);
+
+	g_free (p);
+	return res;
+}
+static void
+add_device (int type, const gchar *pipeline, const gchar *description, const gchar *selection)
+{
+	GList *l;
+	DeviceChooser *device_chooser;
+	gchar *row_pipeline;
+	gchar *description_mod;
+	const gchar *suffix;
+	gboolean selected, row_selected;
+	gboolean found_pipeline, found_selected;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkTreeIter found_pipeline_iter = { };
+	GtkTreeIter found_selected_iter = { };
+
+	/* only display pipelines available on this system */	
+	if (!element_available (pipeline))
+		return;
+	
+	for (l = device_choosers; l != NULL; l = l->next) {
+		device_chooser = (DeviceChooser *) l->data;
+		
+		if (device_chooser->type != type)
+			continue;
+		
+		/* if we're adding/updating the currently selected device
+		 * we're only interested in the DeviceChooser for the
+		 * corresponding profile */
+		if (selection != NULL && strcmp (selection, device_chooser->profile) != 0)
+			continue;
+			
+		selected = (selection != NULL);
+		
+		found_pipeline = FALSE;
+		found_selected = FALSE;
+		
+		model = GTK_TREE_MODEL (device_chooser->model);
+		
+		if (gtk_tree_model_get_iter_first (model, &iter)) {
+			do {
+				gtk_tree_model_get (model, &iter, 0, &row_pipeline, 2, &row_selected, -1);
+
+				if (strcmp (row_pipeline, pipeline) == 0) {
+					found_pipeline_iter = iter;
+					found_pipeline = TRUE;
+				}
+				g_free (row_pipeline);
+
+				if (row_selected) {
+					found_selected_iter = iter;
+					found_selected = TRUE;
+				}
+
+			} while (gtk_tree_model_iter_next (model, &iter));
+		}
+		
+		if (found_pipeline) {
+			/* the specified pipeline is already in the model */
+			iter = found_pipeline_iter;
+			if (!selected) {
+				/* if the specified pipeline was only already in
+				 * the model because it's currently selected,
+				 * clear the corresponding flag in the model
+				 * (happens when reconnecting usb audio devices) */
+				gtk_list_store_set (device_chooser->model, &iter, 2, FALSE, -1);
+			}
+		} else if (selected && found_selected) {
+			/* we only allow one custom pipeline in the model */
+			iter = found_selected_iter;
+		} else {
+			/* no existing pipeline found that would be appropriate
+			 * to reuse, so append a new row */
+			gtk_list_store_append (device_chooser->model, &iter);
+			gtk_list_store_set (device_chooser->model, &iter, 2, selected, -1);
+		}
+		
+		gtk_list_store_set (device_chooser->model, &iter, 0, pipeline, -1);
+		
+		if (!selected || !found_pipeline) {
+			/* either we're appending a new row or we're updating
+			 * a row with non-appropriate description */
+			 
+			if (selected) {
+				/* we add the specified pipeline only because
+				 * it's the preferred device but it's neither
+				 * a device currently detected by HAL nor a
+				 * standard pipeline */
+				if (g_str_has_prefix (pipeline, "hal")) {
+					suffix = _("Not connected");
+				} else {
+					suffix = _("Custom");
+				}
+				description_mod = g_strdup_printf ("%s (%s)", description, suffix);
+			} else {
+				description_mod = g_strdup (description);
+			}
+			gtk_list_store_set (device_chooser->model, &iter, 1, description_mod, -1);
+			
+			/* we need to store the unmodified description to not
+			 * modify already modified descriptions */
+			gtk_list_store_set (device_chooser->model, &iter, 3, description, -1);
+			
+			g_free (description_mod);
+		}
+		
+		if (selected) {
+			gtk_combo_box_set_active_iter (GTK_COMBO_BOX (device_chooser->combobox), &iter);
+		}
+	}
+}
+
+static void
+remove_device (int type, const gchar *pipeline)
+{
+	GList *l;
+	DeviceChooser *device_chooser;
+	GtkTreeIter iter;
+	gchar *row_pipeline;
+	gchar *description;
+	gchar *description_mod;
+	GtkTreeModel *model;
+	
+	for (l = device_choosers; l != NULL; l = l->next) {
+		device_chooser = (DeviceChooser *) l->data;
+		
+		if (device_chooser->type != type)
+			continue;
+		
+		model = GTK_TREE_MODEL (device_chooser->model);
+
+		gtk_combo_box_get_active_iter (GTK_COMBO_BOX (device_chooser->combobox), &iter);
+		gtk_tree_model_get (model, &iter, 0, &row_pipeline, -1);
+
+		/* don't remove currently selected devices */
+		if (strcmp (row_pipeline, pipeline) == 0) {
+			g_free (row_pipeline);
+			
+			/* let the user know that they have to reconnect the
+			 * sound device */
+			gtk_tree_model_get (model, &iter, 3, &description, -1);
+			description_mod = g_strdup_printf ("%s (%s)", description, _("Not connected"));
+			g_free (description);
+			gtk_list_store_set (device_chooser->model, &iter, 1, description_mod, -1);
+			g_free (description_mod);
+		} else {
+			g_free (row_pipeline);
+
+			if (gtk_tree_model_get_iter_first (model, &iter)) {
+				do {
+					gtk_tree_model_get (model, &iter, 0, &row_pipeline, -1);
+					if (strcmp (row_pipeline, pipeline) == 0) {
+						g_free (row_pipeline);
+						gtk_list_store_remove (device_chooser->model, &iter);
+						break;
+					}
+					g_free (row_pipeline);
+				} while (gtk_tree_model_iter_next (model, &iter));
+			}
+		}
+	}
+}
+
+#if USE_HAL
+static void
+device_added_callback (LibHalContext *ctx, const char *udi)
+{
+	DBusError error;
+	gchar *type_string;
+	int type;
+	const gchar *element;
+	gchar *pipeline, *description;
+	
+	dbus_error_init (&error);
+
+	if (!libhal_device_query_capability (ctx, udi, "alsa", &error)) {
+		dbus_error_free (&error);
+		return;
+	}
+
+	type_string = libhal_device_get_property_string (ctx, udi, "alsa.type", &error);
+	if (strcmp (type_string, "playback") == 0) {
+		type = AUDIO_PLAYBACK;
+		element = "halaudiosink";
+	} else if (strcmp (type_string, "capture") == 0) {
+		type = AUDIO_CAPTURE;
+		element = "halaudiosrc";
+	} else {
+		type = -1;
+		element = NULL;
+	}
+	libhal_free_string (type_string);
+	if (type == -1) {
+		dbus_error_free (&error);
+		return;
+	}
+	
+	pipeline = g_strdup_printf ("%s udi=%s", element, udi);
+	description = libhal_device_get_property_string (ctx, udi, "alsa.device_id", &error);
+
+	add_device (type, pipeline, description, NULL);
+
+	g_free (pipeline);
+	libhal_free_string (description);
+
+	dbus_error_free (&error);
+}
+
+static void
+device_removed_callback (LibHalContext *ctx, const char *udi)
+{
+	gchar *pipeline;
+	
+	pipeline = g_strdup_printf ("halaudiosink udi=%s", udi);
+	remove_device (AUDIO_PLAYBACK, pipeline);
+	g_free (pipeline);
+	
+	pipeline = g_strdup_printf ("halaudiosrc udi=%s", udi);
+	remove_device (AUDIO_CAPTURE, pipeline);
+	g_free (pipeline);
+}
+
+static void
+setup_hal_devices ()
+{
+	DBusConnection *connection;
+	DBusError error;
+	LibHalContext *ctx;
+	char **devices;
+	int i, num;
+	
+	dbus_error_init (&error);
+	
+	connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+	g_return_if_fail (connection != NULL);
+	
+	dbus_connection_setup_with_g_main (connection, g_main_context_default ());
+	
+	ctx = libhal_ctx_new ();
+	g_return_if_fail (ctx != NULL);
+	
+	libhal_ctx_set_device_added (ctx, device_added_callback);
+	libhal_ctx_set_device_removed (ctx, device_removed_callback);
+	libhal_ctx_set_dbus_connection (ctx, connection);
+
+	libhal_ctx_init (ctx, &error);
+	
+	devices = libhal_find_device_by_capability (ctx, "alsa", &num, &error);
+	
+	for (i = 0; i < num; i++) {
+		device_added_callback (ctx, devices[i]);
+	}
+	
+	dbus_free_string_array (devices);
+	
+	dbus_error_free (&error);
+}
+#endif
+
+static void
+device_test_button_clicked (GtkWidget *button, gpointer user_data)
+{
+	DeviceChooser *device_chooser = (DeviceChooser *) user_data;
+	
+	GladeXML *dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/sound-properties.glade", NULL, NULL);
+
+	user_test_pipeline (dialog, GTK_WINDOW (dialog_win), device_chooser->test_pipeline);
+	
+	g_object_unref (dialog);
+}
+
+static gchar *
+get_gconf_key_for_profile (const gchar *profile, int type)
+{
+	const gchar *element_type;
+	
+	switch (type) {
+		case AUDIO_PLAYBACK:
+			element_type = "audiosink";
+			break;
+		case AUDIO_CAPTURE:
+			element_type = "audiosrc";
+			break;
+		case VIDEO_PLAYBACK:
+			element_type = "videosink";
+			break;
+		case VIDEO_CAPTURE:
+			element_type = "videosrc";
+			break;
+		default:
+			g_return_val_if_reached (NULL);
+	}
+	
+	return g_strdup_printf ("%s/default/%s%s", GST_GCONF_DIR, profile, element_type);
+}
+
+static void
+device_changed (GtkComboBox *widget, gpointer user_data)
+{
+	DeviceChooser *device_chooser = (DeviceChooser *) user_data;
+	GtkTreeIter iter;
+	gchar *pipeline, *description;
+	gchar *base_key, *key;
+	
+	gtk_combo_box_get_active_iter (widget, &iter);
+	gtk_tree_model_get (GTK_TREE_MODEL (device_chooser->model), &iter, 0, &pipeline, 3, &description, -1);
+	
+	base_key = get_gconf_key_for_profile (device_chooser->profile, device_chooser->type);
+	gconf_client_set_string (gconf_client, base_key, pipeline, NULL);
+	g_free (pipeline);
+	key = g_strconcat (base_key, "_description", NULL);
+	g_free (base_key);
+	gconf_client_set_string (gconf_client, key, description, NULL);
+	g_free (description);
+	g_free (key);
+}
+
+static gchar *
+get_gconf_description_for_profile (const gchar *profile, int type)
+{
+	gchar *base_key;
+	gchar *key;
+	gchar *description;
+	
+	base_key = get_gconf_key_for_profile (profile, type);
+	key = g_strconcat (base_key, "_description", NULL);
+	g_free (base_key);
+
+	description = gconf_client_get_string (gconf_client, key, NULL);
+	g_free (key);
+	
+	return description;
+}
+
+static void
+gconf_key_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data)
+{
+	DeviceChooser *device_chooser = (DeviceChooser *) data;
+	gchar *description;
+	
+	description = get_gconf_description_for_profile (device_chooser->profile, device_chooser->type);
+	
+	add_device (device_chooser->type, gconf_value_get_string (gconf_entry_get_value (entry)), description, device_chooser->profile);
+	
+	g_free (description);
+}
+
+static void
+setup_device_chooser (const gchar *profile, int type, GtkWidget *combobox, GtkWidget *test_button, const gchar *test_pipeline)
+{
+	DeviceChooser *device_chooser;
+	GtkCellRenderer *cell;
+	gchar *gconf_key;
+	
+	g_return_if_fail (GTK_IS_COMBO_BOX (combobox));
+	g_return_if_fail (GTK_IS_BUTTON (test_button));
+	
+	device_chooser = g_malloc0 (sizeof (DeviceChooser));
+
+	device_chooser->profile = profile;
+	device_chooser->type = type;
+	device_chooser->combobox = combobox;
+	device_chooser->model = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
+	device_chooser->test_pipeline = test_pipeline;
+	gtk_combo_box_set_model (GTK_COMBO_BOX (combobox), GTK_TREE_MODEL (device_chooser->model));
+	cell = gtk_cell_renderer_text_new ();
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), cell, TRUE);
+	gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox), cell, "text", 1);
+	
+	device_choosers = g_list_prepend (device_choosers, device_chooser);
+	
+	gconf_key = get_gconf_key_for_profile (profile, type);
+	gconf_client_notify_add (gconf_client, gconf_key, gconf_key_changed,
+				 device_chooser, NULL, NULL);
+	g_free (gconf_key);
+	
+	g_signal_connect (combobox, "changed", G_CALLBACK (device_changed), device_chooser);
+
+	g_signal_connect (test_button, "clicked", G_CALLBACK (device_test_button_clicked), device_chooser);
+}
+
+static void
+add_selected_device (const gchar *profile, int type)
+{
+	gchar *gconf_key;
+	gchar *description;
+	gchar *pipeline;
+
+	gconf_key = get_gconf_key_for_profile (profile, type);
+	pipeline = gconf_client_get_string (gconf_client, gconf_key, NULL);
+	g_free (gconf_key);
+	
+	g_return_if_fail (pipeline != NULL);
+	
+	description = get_gconf_description_for_profile (profile, type);
+	
+	add_device (type, pipeline, description, profile);
+	
+	g_free (pipeline);
+}
+
+static void
+setup_devices ()
+{
+	add_device (AUDIO_PLAYBACK, "autoaudiosink", "Autodetect", NULL);
+#if USE_HAL
+	setup_hal_devices ();
+#else
+	add_device (AUDIO_PLAYBACK, "alsasink", "ALSA - Advanced Linux Sound Architecture", NULL);
+	add_device (AUDIO_CAPTURE, "alsasrc", "ALSA - Advanced Linux Sound Architecture", NULL);
+#endif
+	add_device (AUDIO_PLAYBACK, "artsdsink", "Artsd - ART Sound Daemon", NULL);
+	add_device (AUDIO_PLAYBACK, "esdsink", "ESD - Enlightenment Sound Daemon", NULL);
+	add_device (AUDIO_CAPTURE, "esdmon", "ESD - Enlightenment Sound Daemon", NULL);
+	add_device (AUDIO_PLAYBACK, "osssink", "OSS - Open Sound System", NULL);
+	add_device (AUDIO_CAPTURE, "osssrc", "OSS - Open Sound System", NULL);
+	add_device (AUDIO_PLAYBACK, "polypsink", "Polypaudio Sound Server", NULL);
+	add_device (AUDIO_CAPTURE, "polypsrc", "Polypaudio Sound Server", NULL);
+	add_device (AUDIO_CAPTURE, "audiotestsrc wave=triangle is-live=true", "Test Sound", NULL);
+	add_device (AUDIO_CAPTURE, "audiotestsrc wave=silence is-live=true", "Silence", NULL);
+	
+	add_device (VIDEO_CAPTURE, "v4lmjpegsrc", "MJPEG (e.g. Zoran v4l device)", NULL);
+	add_device (VIDEO_CAPTURE, "qcamsrc", "QCAM", NULL);
+	add_device (VIDEO_CAPTURE, "videotestsrc is-live=true", "Test Input", NULL);
+	add_device (VIDEO_CAPTURE, "v4lsrc", "Video for Linux (v4l)", NULL);
+	add_device (VIDEO_CAPTURE, "v4l2src", "Video for Linux 2 (v4l2)", NULL);
+
+	add_selected_device ("", AUDIO_PLAYBACK);
+	add_selected_device ("music", AUDIO_PLAYBACK);
+	add_selected_device ("chat", AUDIO_PLAYBACK);
+	add_selected_device ("", AUDIO_CAPTURE);
+	add_selected_device ("", VIDEO_CAPTURE);
+}
+
 /* setup_dialog
  *
  * Set up the property editors for our dialog
@@ -172,6 +667,41 @@ static void
 setup_dialog (GladeXML *dialog, GConfChangeSet *changeset) 
 {
 	GObject *peditor;
+	GtkSizeGroup *combobox_size_group;
+	GtkSizeGroup *label_size_group;
+
+	gconf_client_add_dir (gconf_client, GST_GCONF_DIR,
+			      GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
+
+	combobox_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+	label_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+	gtk_size_group_add_widget (label_size_group, WID ("sounds_playback_label"));
+	gtk_size_group_add_widget (label_size_group, WID ("music_playback_label"));
+	gtk_size_group_add_widget (label_size_group, WID ("chat_audio_playback_label"));
+	gtk_size_group_add_widget (label_size_group, WID ("chat_audio_capture_label"));
+	gtk_size_group_add_widget (label_size_group, WID ("chat_video_capture_label"));
+	gtk_size_group_add_widget (combobox_size_group, WID ("sounds_playback_device"));
+	gtk_size_group_add_widget (combobox_size_group, WID ("music_playback_device"));
+	gtk_size_group_add_widget (combobox_size_group, WID ("chat_audio_playback_device"));
+	gtk_size_group_add_widget (combobox_size_group, WID ("chat_audio_capture_device"));
+	gtk_size_group_add_widget (combobox_size_group, WID ("chat_video_capture_device"));
+
+	setup_device_chooser ("", AUDIO_PLAYBACK, WID ("sounds_playback_device"),
+			      WID ("sounds_playback_test"),
+			      AUDIO_TEST_SOURCE AUDIO_TEST_IN_BETWEEN "gconfaudiosink");
+	setup_device_chooser ("music", AUDIO_PLAYBACK, WID ("music_playback_device"),
+			      WID ("music_playback_test"),
+			      AUDIO_TEST_SOURCE AUDIO_TEST_IN_BETWEEN "gconfaudiosink profile=music");
+	setup_device_chooser ("chat", AUDIO_PLAYBACK, WID ("chat_audio_playback_device"),
+			      WID ("chat_audio_playback_test"),
+			      AUDIO_TEST_SOURCE AUDIO_TEST_IN_BETWEEN "gconfaudiosink profile=chat");
+	setup_device_chooser ("", AUDIO_CAPTURE, WID ("chat_audio_capture_device"),
+			      WID ("chat_audio_capture_test"),
+			      "gconfaudiosrc" AUDIO_TEST_IN_BETWEEN "gconfaudiosink profile=chat");
+	setup_device_chooser ("", VIDEO_CAPTURE, WID ("chat_video_capture_device"),
+			      WID ("chat_video_capture_test"),
+			      "gconfvideosrc" VIDEO_TEST_IN_BETWEEN "gconfvideosink");
 
 	peditor = gconf_peditor_new_boolean (NULL, ENABLE_ESD_KEY, WID ("enable_toggle"), NULL);
 	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("events_toggle"));
@@ -228,10 +758,8 @@ dialog_button_clicked_cb (GtkDialog *dia
 int
 main (int argc, char **argv) 
 {
-	GConfClient    *client;
 	GConfChangeSet *changeset;
 	GladeXML       *dialog = NULL;
-	GtkWidget      *dialog_win;
 
 	static gboolean apply_only;
 	static gboolean get_legacy;
@@ -249,6 +777,8 @@ main (int argc, char **argv) 
 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 	textdomain (GETTEXT_PACKAGE);
 
+	gst_init (&argc, &argv);
+
 	gnome_program_init ("gnome-sound-properties", VERSION,
 			    LIBGNOMEUI_MODULE, argc, argv,
 			    GNOME_PARAM_POPT_TABLE, cap_options,
@@ -256,9 +786,9 @@ main (int argc, char **argv) 
 
 	activate_settings_daemon ();
 	
-	client = gconf_client_get_default ();
-	gconf_client_add_dir (client, "/desktop/gnome/sound", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-	gconf_client_add_dir (client, "/apps/metacity/general", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+	gconf_client = gconf_client_get_default ();
+	gconf_client_add_dir (gconf_client, "/desktop/gnome/sound", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+	gconf_client_add_dir (gconf_client, "/apps/metacity/general", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
 
 	if (get_legacy) {
 		get_legacy_settings ();
@@ -266,9 +796,10 @@ main (int argc, char **argv) 
 		changeset = gconf_change_set_new ();
 		dialog = create_dialog ();
 		setup_dialog (dialog, changeset);
+		setup_devices ();
 
 		dialog_win = gtk_dialog_new_with_buttons
-			(_("Sound Preferences"), NULL, GTK_DIALOG_NO_SEPARATOR,
+			(_("Sound & Video Preferences"), NULL, GTK_DIALOG_NO_SEPARATOR,
 			 GTK_STOCK_HELP, GTK_RESPONSE_HELP,
 			 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
 			 NULL);
@@ -285,7 +816,7 @@ main (int argc, char **argv) 
 		gconf_change_set_unref (changeset);
 	}
 	
-	g_object_unref (client);
+	g_object_unref (gconf_client);
 	g_object_unref (dialog);
 	return 0;
 }
diff -puNr gnome-control-center.orig/capplets/sound/sound-properties.glade gnome-control-center/capplets/sound/sound-properties.glade
--- gnome-control-center.orig/capplets/sound/sound-properties.glade	2006-01-12 13:55:37.000000000 +0100
+++ gnome-control-center/capplets/sound/sound-properties.glade	2006-01-29 17:30:45.000000000 +0100
@@ -6,7 +6,7 @@
 
 <widget class="GtkWindow" id="window1">
   <property name="border_width">5</property>
-  <property name="title" translatable="yes">Sound Preferences</property>
+  <property name="title" translatable="yes">Sound &amp; Video Preferences</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">False</property>
@@ -18,6 +18,7 @@
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
   <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
 
   <child>
     <widget class="GtkNotebook" id="prefs_widget">
@@ -31,6 +32,926 @@
       <property name="enable_popup">False</property>
 
       <child>
+	<widget class="GtkVBox" id="vbox13">
+	  <property name="border_width">12</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">18</property>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox14">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label6">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;b&gt;Sound Events&lt;/b&gt;</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox11">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">6</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label36">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">    </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="sounds_playback_label">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Sound Playback:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="sounds_playback_device">
+		      <property name="visible">True</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="sounds_playback_test">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment9">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox8">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image5">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-apply</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label21">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox15">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label7">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;b&gt;Music and Movies&lt;/b&gt;</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox12">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">6</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label37">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">    </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="music_playback_label">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Sound Playback:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="music_playback_device">
+		      <property name="visible">True</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="music_playback_test">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment6">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox5">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image2">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-apply</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label18">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox16">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label8">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;b&gt;Audio/Video Conferencing&lt;/b&gt;</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox13">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">6</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label38">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">    </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="chat_audio_playback_label">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Sound Playback:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="chat_audio_playback_device">
+		      <property name="visible">True</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="chat_audio_playback_test">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment7">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox6">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image3">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-apply</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label19">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox14">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">6</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label39">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">    </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="chat_audio_capture_label">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Sound Capture:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="chat_audio_capture_device">
+		      <property name="visible">True</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="chat_audio_capture_test">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment11">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox10">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image7">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-apply</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label35">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox15">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">6</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label40">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">    </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="chat_video_capture_label">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Video Capture:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="chat_video_capture_device">
+		      <property name="visible">True</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="chat_video_capture_test">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment8">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox7">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image4">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-apply</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label20">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="tab_expand">False</property>
+	  <property name="tab_fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLabel" id="label5">
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">Devices</property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	  <property name="width_chars">-1</property>
+	  <property name="single_line_mode">False</property>
+	  <property name="angle">0</property>
+	</widget>
+	<packing>
+	  <property name="type">tab</property>
+	</packing>
+      </child>
+
+      <child>
 	<widget class="GtkVBox" id="vbox1">
 	  <property name="border_width">12</property>
 	  <property name="visible">True</property>
@@ -353,4 +1274,137 @@
   </child>
 </widget>
 
+<widget class="GtkDialog" id="test_pipeline">
+  <property name="border_width">5</property>
+  <property name="can_default">True</property>
+  <property name="can_focus">True</property>
+  <property name="title" translatable="yes">Testing Pipeline</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">True</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="test_pipeline_vbox">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="test_pipeline_action_area">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="test_pipeline_ok_button">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="test_pipeline_content_vbox">
+	  <property name="border_width">5</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">6</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="test_pipeline_testing_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot; size=&quot;x-large&quot;&gt;Testing...&lt;/span&gt;</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_CENTER</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkProgressBar" id="test_pipeline_progress">
+	      <property name="visible">True</property>
+	      <property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
+	      <property name="fraction">0.10000000149</property>
+	      <property name="pulse_step">0.0500000007451</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="test_pipeline_desc_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Click Ok to finish.</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_CENTER</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
 </glade-interface>
diff -puNr gnome-control-center.orig/configure.in gnome-control-center/configure.in
--- gnome-control-center.orig/configure.in	2006-01-18 13:29:38.000000000 +0100
+++ gnome-control-center/configure.in	2006-01-29 17:31:56.000000000 +0100
@@ -106,7 +106,7 @@ PKG_CHECK_MODULES(GTK, gtk+-2.0)
 PKG_CHECK_MODULES(VFS_CAPPLET, $COMMON_MODULES gnome-vfs-module-2.0 gnome-vfs-2.0)
 PKG_CHECK_MODULES(GNOME_DESKTOP, gnome-desktop-2.0)
 PKG_CHECK_MODULES(DEFAULT_APPLICATIONS_CAPPLET, libxml-2.0)
-PKG_CHECK_MODULES(SOUND_CAPPLET, esound)
+PKG_CHECK_MODULES(SOUND_CAPPLET, esound gstreamer-0.10)
 PKG_CHECK_MODULES(METACITY, libmetacity-private)
 PKG_CHECK_MODULES(LIBXKLAVIER, libxklavier >= 1.14,,
     AC_MSG_ERROR([gnome-control-center depends on libxklavier.
@@ -354,6 +354,17 @@ AM_CONDITIONAL(BUILD_ABOUTME, test -n "$
 AM_CONDITIONAL(HAVE_LIBEBOOK, test -n "$LIBEBOOK_REQUIREMENT")
 
 dnl ==============================================
+dnl HAL stuff
+dnl ==============================================
+AC_ARG_ENABLE(hal, AC_HELP_STRING([--disable-hal],[build without hal support]))
+if test "x$enable_hal" != "xno"; then
+	PKG_CHECK_MODULES(HAL, [hal >= 0.5.6, dbus-1 >= 0.32, dbus-glib-1 >= 0.32],
+		[ AC_DEFINE(USE_HAL, 1, [defined if using libhal]) ],)
+	AC_SUBST(HAL_CFLAGS)
+	AC_SUBST(HAL_LIBS)
+fi
+
+dnl ==============================================
 dnl End: Check that we meet the  dependencies
 dnl ==============================================
 
