diff --git a/backends/gstreamer/Makefile.am b/backends/gstreamer/Makefile.am
index 093a02d..42fdb6f 100644
--- a/backends/gstreamer/Makefile.am
+++ b/backends/gstreamer/Makefile.am
@@ -9,6 +9,7 @@ librbbackendsgstreamer_la_SOURCES =			\
 
 librbbackendsgstreamer_la_LIBADD =			\
 	-lgstpbutils-0.10				\
+	-lgstaudio-0.10					\
 	$(RHYTHMBOX_LIBS)
 
 librbbackendsgstreamer_la_LDFLAGS = -export-dynamic
diff --git a/backends/gstreamer/rb-player-gst-xfade.c b/backends/gstreamer/rb-player-gst-xfade.c
index 2283201..bdb5497 100644
--- a/backends/gstreamer/rb-player-gst-xfade.c
+++ b/backends/gstreamer/rb-player-gst-xfade.c
@@ -140,6 +140,7 @@
 #include <gst/gst.h>
 #include <gst/controller/gstcontroller.h>
 #include <gst/base/gstbasetransform.h>
+#include <gst/audio/multichannel.h>
 
 #include "rb-player.h"
 #include "rb-player-gst-xfade.h"
@@ -1728,6 +1729,10 @@ create_stream (RBPlayerGstXFade *player, const char *uri, gpointer stream_data,
 {
 	RBXFadeStream *stream;
 	GstCaps *caps;
+	GstAudioChannelPosition channels[] = {
+		GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+		GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+	};
 
 	rb_debug ("creating new stream for %s (stream data %p)", uri, stream_data);
 	stream = g_object_new (RB_TYPE_XFADE_STREAM, NULL, NULL);
@@ -1808,11 +1813,15 @@ create_stream (RBPlayerGstXFade *player, const char *uri, gpointer stream_data,
 	gst_object_ref (stream->capsfilter);
 
 	caps = gst_caps_new_simple ("audio/x-raw-int",
+				    "endianness", G_TYPE_INT, G_BYTE_ORDER,
+				    "signed",   G_TYPE_BOOLEAN, TRUE,
 				    "channels", G_TYPE_INT, 2,
 				    "rate",	G_TYPE_INT, 44100,
 				    "width",	G_TYPE_INT, 16,
 				    "depth",	G_TYPE_INT, 16,
 				    NULL);
+
+	gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), channels);
 	g_object_set (stream->capsfilter, "caps", caps, NULL);
 	gst_caps_unref (caps);
 
@@ -2497,6 +2506,10 @@ create_sink (RBPlayerGstXFade *player, GError **error)
 	GstPad *addersrcpad;
 	GstPadLinkReturn plr;
 	GList *l;
+	GstAudioChannelPosition channels[] = {
+		GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+		GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+	};
 
 	if (player->priv->sink_state != SINK_NULL)
 		return TRUE;
@@ -2508,11 +2521,14 @@ create_sink (RBPlayerGstXFade *player, GError **error)
 	 * that rate.
 	 */
 	caps = gst_caps_new_simple ("audio/x-raw-int",
+				    "endianness", G_TYPE_INT, G_BYTE_ORDER,
+				    "signed",   G_TYPE_BOOLEAN, TRUE,
 				    "channels", G_TYPE_INT, 2,
 				    "rate",	G_TYPE_INT, 44100,
 				    "width",	G_TYPE_INT, 16,
 				    "depth",	G_TYPE_INT, 16,
 				    NULL);
+	gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), channels);
 
 	player->priv->pipeline = gst_pipeline_new ("rbplayer");
 	gst_bus_add_watch (gst_element_get_bus (GST_ELEMENT (player->priv->pipeline)),
