Index: gstplaybin.c
===================================================================
--- gstplaybin.c	(revision 5223)
+++ gstplaybin.c	(working copy)
@@ -247,6 +247,7 @@
 
 #include <gst/gst-i18n-plugin.h>
 #include <gst/pbutils/pbutils.h>
+#include <gst/interfaces/mixer.h>
 
 #include "gstplaybasebin.h"
 
@@ -329,6 +334,7 @@
 static gboolean setup_sinks (GstPlayBaseBin * play_base_bin,
     GstPlayBaseGroup * group);
 static void remove_sinks (GstPlayBin * play_bin);
+static void gst_play_bin_set_mixer_volume (GstMixer *mixer, gdouble volume);
 
 static void gst_play_bin_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * spec);
@@ -625,6 +626,32 @@
       play_bin);
 }
 
+/* Set mixer volume for all tracks and channels
+ */
+static void 
+gst_play_bin_set_mixer_volume (GstMixer *mixer, gdouble volume)
+{
+  const GList *tracks;
+  gint channel_volume;
+  GstMixerTrack *t = NULL;
+  guint i;
+
+  /* Set same volume for each track  */
+  for (tracks = gst_mixer_list_tracks(mixer); tracks != NULL; tracks = tracks->next) {
+    t = tracks->data;
+    if (t->num_channels < 1) {
+      continue;
+    }
+    gint volumes[t->num_channels];
+    channel_volume = (gint) (volume * t->max_volume) / VOLUME_MAX_DOUBLE;
+    /* Set same volume for each channel */
+    for(i = 0; i < t->num_channels; i++){
+      volumes[i] = channel_volume;
+    }
+    gst_mixer_set_volume(mixer, t, volumes);
+  }
+}
+
 static void
 gst_play_bin_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -724,9 +751,17 @@
     }
     case ARG_VOLUME:
       play_bin->volume = g_value_get_double (value);
-      if (play_bin->volume_element) {
+      /* Use mixer interface if found */ 
+      GstElement *mixer = gst_bin_get_by_interface (GST_BIN (play_bin), GST_TYPE_MIXER);
+      if (mixer) {
+        gst_play_bin_set_mixer_volume (GST_MIXER (mixer), play_bin->volume);
+        GST_DEBUG_OBJECT (play_bin,"Set volume to %.3f using Mixer interface",
+                          play_bin->volume);
+
+        gst_object_unref (mixer);
+      } else if (play_bin->volume_element) {
         g_object_set (G_OBJECT (play_bin->volume_element), "volume",
-            play_bin->volume, NULL);
+                      play_bin->volume, NULL);
       }
       break;
     case ARG_FONT_DESC:
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 5223)
+++ Makefile.am	(working copy)
@@ -21,6 +21,7 @@
 libgstplaybin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstplaybin_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
 	$(GST_LIBS)
 
 libgstdecodebin_la_SOURCES = gstdecodebin.c
