diff -ruN libgnome-2.12.0.1/config.h.in libgnome-with-gst/config.h.in
--- libgnome-2.12.0.1/config.h.in	2005-09-07 17:29:35.000000000 +0200
+++ libgnome-with-gst/config.h.in	2005-12-26 00:00:06.000000000 +0100
@@ -27,6 +27,9 @@
 /* Compile with esd support */
 #undef HAVE_ESD
 
+/* Compile with GStreamer support */
+#undef HAVE_GST
+
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
diff -ruN libgnome-2.12.0.1/configure.in libgnome-with-gst/configure.in
--- libgnome-2.12.0.1/configure.in	2005-09-07 17:29:21.000000000 +0200
+++ libgnome-with-gst/configure.in	2005-12-26 00:27:02.000000000 +0100
@@ -18,6 +18,7 @@
 dnl required versions of other tools.
 m4_define([audiofile_required_version], [0.2.3])
 m4_define([esound_required_version],    [0.2.26])
+m4_define([gstreamer_required_version], [0.10.0])
 m4_define([gconf_required_version],     [1.1.11])
 m4_define([glib_required_version],      [2.6.0])
 m4_define([gnome_vfs_required_version], [2.5.3])
@@ -143,14 +144,20 @@
 dnl support built in)
 dnl
 
-SOUND_MODULES="esound >= esound_required_version dnl
- audiofile >= audiofile_required_version"
+SOUND_MODULES="gstreamer-0.10 >= gstreamer_required_version"
 PKG_CHECK_MODULES(SOUND_TEST, [$SOUND_MODULES],
 [
-  AC_DEFINE(HAVE_LIBAUDIOFILE,, [Compile with audiofile support])
-  AC_DEFINE(HAVE_ESD,, [Compile with esd support])
+  AC_DEFINE(HAVE_GST,, [Compile with GStreamer support])
 ],[
-  SOUND_MODULES=""
+  SOUND_MODULES="esound >= esound_required_version dnl
+  audiofile >= audiofile_required_version"
+  PKG_CHECK_MODULES(SOUND_TEST, [$SOUND_MODULES],
+  [
+    AC_DEFINE(HAVE_LIBAUDIOFILE,, [Compile with audiofile support])
+    AC_DEFINE(HAVE_ESD,, [Compile with esd support])
+  ],[
+    SOUND_MODULES=""
+  ])
 ])
 
 PKG_CHECK_MODULES(LIBGNOME, dnl
diff -ruN libgnome-2.12.0.1/doc/reference/version.xml libgnome-with-gst/doc/reference/version.xml
--- libgnome-2.12.0.1/doc/reference/version.xml	2005-09-07 17:29:45.000000000 +0200
+++ libgnome-with-gst/doc/reference/version.xml	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-2.12.0.1
diff -ruN libgnome-2.12.0.1/libgnome/gnome-sound.c libgnome-with-gst/libgnome/gnome-sound.c
--- libgnome-2.12.0.1/libgnome/gnome-sound.c	2005-05-30 11:54:04.000000000 +0200
+++ libgnome-with-gst/libgnome/gnome-sound.c	2005-12-26 00:48:12.000000000 +0100
@@ -37,12 +37,20 @@
 #include <esd.h>
 #endif
 
+#ifdef HAVE_GST
+#include <gst/gst.h>
+#endif
+
 #ifdef HAVE_ESD
 static char *esound_hostname = NULL;
 static gboolean esound_hostname_null_ok = FALSE;
 static int gnome_sound_connection = -1;
 #endif
 
+#ifdef HAVE_GST
+GstElement *gstreamer_playbin = NULL;
+#endif
+
 typedef struct _sample
   {
     int rate, format, samples, id, size;
@@ -396,6 +404,43 @@
 }
 #endif
 
+#ifdef HAVE_GST
+static gboolean
+gstreamer_bus_callback(GstBus *bus, GstMessage *msg, gpointer data)
+{
+  switch (GST_MESSAGE_TYPE(msg)) {
+    case GST_MESSAGE_EOS:
+      gst_element_set_state(GST_ELEMENT(gstreamer_playbin), GST_STATE_NULL); 
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+/*
+ * Initialize the gstreamer playbin
+ *
+ * It needs proper error handling, correct init, and should obey multimedia systems
+ * selector for audio sink.
+ */
+static gboolean
+use_sound (void)
+{
+    if (gstreamer_playbin != NULL) return TRUE;
+
+    gstreamer_playbin = gst_element_factory_make("playbin", "gstreamer_playbin");
+    if (!gstreamer_playbin) {
+        g_warning("gnome-sound gstreamer init failed\n");
+        return FALSE;
+    }
+
+    gst_bus_add_watch(gst_pipeline_get_bus(GST_PIPELINE(gstreamer_playbin)),
+            gstreamer_bus_callback, NULL);
+
+    return TRUE;
+}
+#endif
 
 /**
  * gnome_sound_sample_load:
@@ -469,6 +514,9 @@
   g_free(s->data); g_free(s);
 
   return sample_id;
+#elif defined(HAVE_GST)
+  g_warning ("sample preloading and caching not available with gstreamer backend\n");
+  return -1;
 #else
   return -1;
 #endif
@@ -507,6 +555,14 @@
   esd_sample_play(gnome_sound_connection, sample);
   fsync (gnome_sound_connection);
   esd_sample_free(gnome_sound_connection, sample);
+#elif defined(HAVE_GST)
+  if (!use_sound())
+    return;
+
+  char buf[8192];
+  g_snprintf(buf, sizeof(buf), "file://%s", filename);
+  g_object_set(G_OBJECT(gstreamer_playbin), "uri", buf, NULL);
+  gst_element_set_state(gstreamer_playbin, GST_STATE_PLAYING);
 #endif
 }
 
@@ -526,6 +582,8 @@
 		esound_hostname = g_strdup (hostname);
 	else
 		esound_hostname_null_ok = TRUE;
+#elif defined(HAVE_GST)
+    gst_init(NULL, NULL); // FIXME - this is horrible
 #endif
 }
 
@@ -544,6 +602,11 @@
 		esd_close(gnome_sound_connection);
 		gnome_sound_connection = -1;
 	}
+#elif defined(HAVE_GST)
+    if (gstreamer_playbin) {
+        gst_object_unref(GST_OBJECT(gstreamer_playbin));
+        gstreamer_playbin = NULL;
+    }
 #endif
 }
 
@@ -564,6 +627,8 @@
 	if ( ! use_sound ())
 		return -1;
 	return gnome_sound_connection;
+#elif defined(HAVE_GST)
+    return 0;
 #else
 	return -1;
 #endif
diff -ruN libgnome-2.12.0.1/libgnome/gnome-triggers.c libgnome-with-gst/libgnome/gnome-triggers.c
--- libgnome-2.12.0.1/libgnome/gnome-triggers.c	2005-03-28 17:45:07.000000000 +0200
+++ libgnome-with-gst/libgnome/gnome-triggers.c	2005-12-26 00:31:28.000000000 +0100
@@ -612,6 +612,8 @@
     esd_sample_play(gnome_sound_connection_get (), t->u.media.cache_id);
   else if(t->u.media.cache_id == -1)
     gnome_sound_play(t->u.media.file);
+#elif defined(HAVE_GST)
+    gnome_sound_play(t->u.media.file);
 #endif
 }
 
