diff -uNr ../gnome-media-2.31.6/gnome-volume-control/src/gvc-applet.c ./gnome-volume-control/src/gvc-applet.c
--- ../gnome-media-2.31.6/gnome-volume-control/src/gvc-applet.c	2010-08-04 06:23:03.000000000 -0700
+++ ./gnome-volume-control/src/gvc-applet.c	2011-02-13 19:18:00.608299004 -0800
@@ -168,6 +168,9 @@
 {
         update_default_sink (applet);
         update_default_source (applet);
+
+        gvc_stream_status_icon_set_mixer_control (applet->priv->output_status_icon,
+                                                  applet->priv->control);
 }
 
 static void
diff -uNr ../gnome-media-2.31.6/gnome-volume-control/src/gvc-stream-status-icon.c ./gnome-volume-control/src/gvc-stream-status-icon.c
--- ../gnome-media-2.31.6/gnome-volume-control/src/gvc-stream-status-icon.c	2010-08-04 06:22:32.000000000 -0700
+++ ./gnome-volume-control/src/gvc-stream-status-icon.c	2011-02-13 19:22:02.418299002 -0800
@@ -29,12 +29,19 @@
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 
+#include "gvc-mixer-control.h"
+#include "gvc-mixer-sink.h"
 #include "gvc-mixer-stream.h"
 #include "gvc-channel-bar.h"
 #include "gvc-stream-status-icon.h"
 
 #define GVC_STREAM_STATUS_ICON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_STREAM_STATUS_ICON, GvcStreamStatusIconPrivate))
 
+typedef struct {
+        GvcMixerControl *control;
+        guint id;
+} OutputDeviceData;
+
 struct GvcStreamStatusIconPrivate
 {
         char          **icon_names;
@@ -44,6 +51,7 @@
         guint           current_icon;
         char           *display_name;
         gboolean        thaw;
+        GvcMixerControl *mixer_control;
 };
 
 enum
@@ -241,6 +249,58 @@
 }
 
 static void
+on_dev1_selected (GtkMenuItem *item, gpointer user_data)
+{
+        OutputDeviceData *output_device_data = user_data;
+
+        GvcMixerStream *stream;
+
+        g_debug ("Output selected: %u", output_device_data->id);
+
+        stream = gvc_mixer_control_lookup_stream_id (output_device_data->control, output_device_data->id);
+        if (stream == NULL) {
+                g_warning ("Unable to find stream for id: %u", output_device_data->id);
+                return;
+        }
+
+        gvc_mixer_control_set_default_sink(output_device_data->control, stream);
+}
+
+
+static void
+gvc_stream_status_icon_populate_output_device_menu (GvcStreamStatusIcon *icon,
+                                         GvcMixerControl      *control,
+                                        GtkWidget *output_device_submenu) {
+
+        GtkWidget *item;
+        GSList           *l;
+        GSList           *streams;
+        GvcMixerStream   *stream;
+
+        streams = gvc_mixer_control_get_streams (icon->priv->mixer_control);
+        for (l = streams; l != NULL; l = l->next) {
+                stream = l->data;
+                if (GVC_IS_MIXER_SINK (stream)) {
+
+                        item = gtk_menu_item_new_with_label ( gvc_mixer_stream_get_description( stream ) );
+
+                        OutputDeviceData* output_device_data;
+                        output_device_data = (OutputDeviceData*)malloc(sizeof(OutputDeviceData));
+                        output_device_data->id = gvc_mixer_stream_get_id( stream );
+                        output_device_data->control = icon->priv->mixer_control;
+
+                        g_signal_connect (item,
+                                          "activate",
+                                          G_CALLBACK (on_dev1_selected),
+                                          output_device_data);
+                        gtk_menu_shell_append (GTK_MENU_SHELL (output_device_submenu), item);
+                }
+
+        }
+        g_slist_free (streams);
+}
+
+static void
 on_status_icon_popup_menu (GtkStatusIcon       *status_icon,
                            guint                button,
                            guint                activate_time,
@@ -249,6 +309,7 @@
         GtkWidget *menu;
         GtkWidget *item;
         GtkWidget *image;
+        GtkWidget *output_device_submenu;
 
         menu = gtk_menu_new ();
 
@@ -271,6 +332,16 @@
                           icon);
         gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
 
+
+        output_device_submenu = gtk_menu_new ();
+        gvc_stream_status_icon_populate_output_device_menu (icon, icon->priv->mixer_control, output_device_submenu);
+
+        item = gtk_image_menu_item_new_with_mnemonic ("Output _Devices");
+        gtk_menu_item_set_submenu ( GTK_MENU_ITEM( item ), output_device_submenu );
+
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+
         gtk_widget_show_all (menu);
         gtk_menu_popup (GTK_MENU (menu),
                         NULL,
@@ -513,6 +584,27 @@
         g_object_notify (G_OBJECT (icon), "display-name");
 }
 
+
+void
+gvc_stream_status_icon_set_mixer_control (GvcStreamStatusIcon *icon,
+                                         GvcMixerControl      *control)
+{
+        g_return_if_fail (GVC_STREAM_STATUS_ICON (icon));
+
+        if (control != NULL) {
+                g_object_ref (control);
+        }
+
+        if (icon->priv->mixer_control != NULL) {
+
+                g_object_unref (icon->priv->mixer_control);
+                icon->priv->mixer_control = NULL;
+        }
+
+        icon->priv->mixer_control = control;
+}
+
+
 void
 gvc_stream_status_icon_set_mixer_stream (GvcStreamStatusIcon *icon,
                                          GvcMixerStream      *stream)
diff -uNr ../gnome-media-2.31.6/gnome-volume-control/src/gvc-stream-status-icon.h ./gnome-volume-control/src/gvc-stream-status-icon.h
--- ../gnome-media-2.31.6/gnome-volume-control/src/gvc-stream-status-icon.h	2009-04-22 14:48:45.000000000 -0700
+++ ./gnome-volume-control/src/gvc-stream-status-icon.h	2011-02-13 19:18:18.228299002 -0800
@@ -57,7 +57,8 @@
                                                                   const char          *display_name);
 void                  gvc_stream_status_icon_set_mixer_stream    (GvcStreamStatusIcon *icon,
                                                                   GvcMixerStream      *stream);
-
+void                  gvc_stream_status_icon_set_mixer_control    (GvcStreamStatusIcon *icon,
+                                                                   GvcMixerControl      *control);
 G_END_DECLS
 
 #endif /* __GVC_STREAM_STATUS_ICON_H */
