diff -burN gnome-applets-2.13.2/configure.in gnome-applets-2.13.2/configure.in
--- gnome-applets-2.13.2/configure.in	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/configure.in	2006-01-20 13:25:37.000000000 -0600
@@ -319,11 +319,35 @@
 MIXER_CFLAGS=
 MIXER_LIBS=
 
-GST_MAJORMINOR=0.8
-GST_REQ=0.8.2
-PKG_CHECK_MODULES(MIXER, gstreamer-interfaces-$GST_MAJORMINOR >= $GST_REQ \
-			 gstreamer-$GST_MAJORMINOR >= $GST_REQ,
-		  HAVE_GST="yes", HAVE_GST="no")
+GST_MAJORMINOR=auto
+AC_ARG_WITH(gstreamer,
+            AC_HELP_STRING([--with-gstreamer],[use gstreamer version for mixer if available]),
+            [case "${withval}" in
+               0.8) GST_MAJORMINOR=0.8 ;;
+               0.10) GST_MAJORMINOR=0.10 ;;
+               *) AC_MSG_ERROR([
+                                *** Bad value ${withval} for --with-gstreamer
+                                *** Please use one of the following:
+                                ***    --with-gstreamer=0.8
+                                ***    --with-gstreamer=0.10
+                              ]);;
+             esac])
+
+if test x$GST_MAJORMINOR = xauto ; then
+   PKG_CHECK_MODULES(GST, gstreamer-0.8, GST_MAJORMINOR=0.8, GST_MAJORMINOR=0.10)
+   AC_MSG_RESULT([using $GST_MAJORMINOR backend])
+fi
+
+if test x$GST_MAJORMINOR = x0.8 ; then
+   GST_REQS=0.8.0
+   PKGS="gstreamer-0.8 >= $GST_REQS gstreamer-interfaces-0.8 >= $GST_REQS"
+else
+   GST_REQS=0.10.2
+   PKGS="gstreamer-0.10 >= $GST_REQS gstreamer-plugins-base-0.10 >= $GST_REQS"
+fi
+
+PKG_CHECK_MODULES(MIXER, $PKGS, [HAVE_GST="yes"], [HAVE_GST="no"])
+
 if test "x$HAVE_GST" = "xyes"; then
   P_MIXER=mixer
 fi
@@ -332,11 +356,7 @@
 AC_SUBST(MIXER_LIBS)
 
 AM_CONDITIONAL(APPLET_MIXER, test "$P_MIXER" = "mixer")
-if test x"$P_MIXER" == x"mixer"; then
-	AC_MSG_RESULT(yes)
-else
-	AC_MSG_RESULT(no)
-fi
+AM_CONDITIONAL(HAVE_GST10, test x"$GST_MAJORMINOR" = "x0.10")
 
 dnl ***************************************
 dnl ** Check for libnotify               **
diff -burN gnome-applets-2.13.2/mixer/applet.c gnome-applets-2.13.2/mixer/applet.c
--- gnome-applets-2.13.2/mixer/applet.c	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/applet.c	2006-01-20 13:30:45.000000000 -0600
@@ -265,7 +265,12 @@
   active_track_name_list = NULL;
 
   if (reset_state) {
+#ifdef HAVE_GST10
+    gst_element_set_state (element, GST_STATE_READY);
+    if (gst_element_get_state(element, NULL, NULL, -1) != GST_STATE_CHANGE_SUCCESS)
+#else
     if (gst_element_set_state (element, GST_STATE_READY) != GST_STATE_SUCCESS)
+#endif
       return NULL;
   }
 
@@ -1174,8 +1179,12 @@
 
           if (new_element != old_element) {
             /* change element */
-            if (gst_element_set_state (item->data,
-				       GST_STATE_READY) != GST_STATE_SUCCESS)
+#ifdef HAVE_GST10
+            gst_element_set_state (item->data, GST_STATE_READY);
+            if (gst_element_get_state (item->data, NULL, NULL, -1) != GST_STATE_CHANGE_SUCCESS)
+#else
+            if (gst_element_set_state (item->data, GST_STATE_READY) != GST_STATE_SUCCESS)
+#endif
               continue;
 	    
             /* save */
diff -burN gnome-applets-2.13.2/mixer/applet.h gnome-applets-2.13.2/mixer/applet.h
--- gnome-applets-2.13.2/mixer/applet.h	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/applet.h	2006-01-20 13:24:59.000000000 -0600
@@ -31,7 +31,11 @@
 #include <gconf/gconf-client.h>
 #include <panel-applet-gconf.h>
 #include <gst/gst.h>
+#ifdef HAVE_GST10
+#include <gst/interfaces/mixer.h>
+#else
 #include <gst/mixer/mixer.h>
+#endif
 
 #include "dock.h"
 
diff -burN gnome-applets-2.13.2/mixer/dock.h gnome-applets-2.13.2/mixer/dock.h
--- gnome-applets-2.13.2/mixer/dock.h	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/dock.h	2006-01-20 13:24:59.000000000 -0600
@@ -28,7 +28,11 @@
 #include <gtk/gtkrange.h>
 #include <gtk/gtkwindow.h>
 #include <gst/gst.h>
+#ifdef HAVE_GST10
+#include <gst/interfaces/mixer.h>
+#else
 #include <gst/mixer/mixer.h>
+#endif
 
 G_BEGIN_DECLS
 
diff -burN gnome-applets-2.13.2/mixer/load.c gnome-applets-2.13.2/mixer/load.c
--- gnome-applets-2.13.2/mixer/load.c	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/load.c	2006-01-20 14:04:14.000000000 -0600
@@ -26,10 +26,110 @@
 #include <string.h>
 
 #include <glib/glist.h>
+#ifdef HAVE_GST10
+#include <gst/audio/mixerutils.h>
+#else
 #include <gst/propertyprobe/propertyprobe.h>
+#endif
 
 #include "applet.h"
 
+#ifdef HAVE_GST10
+typedef struct _FilterHelper {
+   GList *names_list;
+   gint count;
+} FilterHelper;
+
+
+static gboolean
+_filter_func (GstMixer *mixer, gpointer data) {
+   GstElementFactory *factory;
+   const gchar *longname;
+   FilterHelper *helper = (FilterHelper *)data;
+   gchar *device = NULL;
+   gchar *name, *original;
+
+   /* fetch name */
+   if (g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (mixer)), "device-name")) {
+      g_object_get (mixer, "device-name", &device, NULL);
+      GST_DEBUG ("device-name: %s", GST_STR_NULL (device));
+   } else {
+      GST_DEBUG ("no 'device-name' property: device name unknown");
+   }
+
+   factory = gst_element_get_factory (GST_ELEMENT (mixer));
+   longname = gst_element_factory_get_longname (factory);
+
+   if (device) {
+      GList *list;
+      gint duplicates = 0;
+
+      name = g_strdup_printf ("%s (%s)", device, longname);
+      g_free (device);
+
+      /* Devices are sorted by names, we must ensure that the names are unique */
+      for (list = helper->names_list; list != NULL; list = list->next) {
+         if (strcmp ((const gchar *) list->data, name) == 0)
+            duplicates++;
+      }
+
+      if (duplicates > 0) {
+         /*
+          * There is a duplicate name, so append an index to make the name
+          * unique within the list
+          */
+          original = name;
+          name = g_strdup_printf("%s #%d", name, duplicates + 1);
+      } else {
+         original = g_strdup(name);
+      }
+   } else {
+      gchar *title;
+
+      (helper->count)++;
+
+      title = g_strdup_printf (_("Unknown Volume Control %d"), helper->count);
+      name = g_strdup_printf ("%s (%s)", title, longname);
+      original = g_strdup(name);
+      g_free (title);
+   }
+
+   helper->names_list = g_list_prepend (helper->names_list, name);
+
+   g_object_set_data_full (G_OBJECT (mixer),
+                           "gnome-volume-applet-name",
+                           name,
+                           (GDestroyNotify) g_free);
+
+   /* Is this even used anywhere? */
+   g_object_set_data_full (G_OBJECT(mixer),
+                           "gnome-volume-applet-origname",
+                           original,
+                           (GDestroyNotify) g_free);
+
+   GST_DEBUG ("Adding '%s' to the list of available mixers", name);
+
+   gst_element_set_state (GST_ELEMENT (mixer), GST_STATE_NULL);
+
+   return TRUE;
+}
+
+static GList *
+create_mixer_collection (void)
+{
+   FilterHelper helper;
+   GList *mixer_list;
+
+   helper.count = 0;
+   helper.names_list = NULL;
+
+   mixer_list = gst_audio_default_registry_mixer_filter(_filter_func, FALSE, &helper);
+   g_free (helper.names_list);
+
+   return mixer_list;
+}
+
+#else
 static gint
 sort_by_rank (GstElement * a, GstElement * b)
 {
@@ -178,6 +278,7 @@
 
   return g_list_sort (collection, (GCompareFunc) sort_by_rank);
 }
+#endif
 
 static gboolean
 gnome_volume_applet_factory (PanelApplet *applet,
diff -burN gnome-applets-2.13.2/mixer/Makefile.am gnome-applets-2.13.2/mixer/Makefile.am
--- gnome-applets-2.13.2/mixer/Makefile.am	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/Makefile.am	2006-01-20 14:05:43.000000000 -0600
@@ -27,6 +27,11 @@
 	$(GNOME_APPLETS_LIBS)				\
 	$(GNOMEDESKTOP_LIBS)
 
+if HAVE_GST10
+INCLUDES += -DHAVE_GST10
+mixer_applet2_LDADD += -lgstinterfaces-0.10 -lgstaudio-0.10
+endif
+
 serverdir       = $(libdir)/bonobo/servers
 server_in_files = GNOME_MixerApplet.server.in
 server_DATA     = $(server_in_files:.server.in=.server)
diff -burN gnome-applets-2.13.2/mixer/preferences.c gnome-applets-2.13.2/mixer/preferences.c
--- gnome-applets-2.13.2/mixer/preferences.c	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/preferences.c	2006-01-20 13:39:31.000000000 -0600
@@ -41,7 +41,11 @@
 #include <gtk/gtktreeselection.h>
 #include <gtk/gtkvbox.h>
 
+#ifdef HAVE_GST10
+#include <gst/interfaces/mixer.h>
+#else
 #include <gst/mixer/mixer.h>
+#endif
 
 #include "applet.h"
 #include "preferences.h"
@@ -345,7 +349,7 @@
 		 gpointer    data)
 {
   GnomeVolumeAppletPreferences *prefs = data;
-  GnomeVolumeApplet *applet = (GnomeVolumeApplet *) prefs->applet;
+  /* GnomeVolumeApplet *applet = (GnomeVolumeApplet *) prefs->applet; */
   GtkTreeIter iter;
   const gchar *label;
 
diff -burN gnome-applets-2.13.2/mixer/preferences.h gnome-applets-2.13.2/mixer/preferences.h
--- gnome-applets-2.13.2/mixer/preferences.h	2006-01-20 13:24:00.000000000 -0600
+++ gnome-applets-2.13.2/mixer/preferences.h	2006-01-20 13:24:59.000000000 -0600
@@ -26,7 +26,11 @@
 #include <gtk/gtkdialog.h>
 #include <panel-applet.h>
 #include <panel-applet-gconf.h>
+#ifdef HAVE_GST10
+#include <gst/interfaces/mixer.h>
+#else
 #include <gst/mixer/mixer.h>
+#endif
 
 G_BEGIN_DECLS
 
