diff --git a/configure.ac b/configure.ac
index d7863c9..6173e1d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,7 @@ LIBGNOMEDESKTOP_REQUIRED=2.25.1
 GCONF_REQUIRED=2.16.0
 GSTREAMER_REQUIRED=0.10.20
 LIBEBOOK_REQUIRED=1.12.0
+LIBCANBERRA_REQUIRED=0.4
 CAIRO_REQUIRED=1.4.0
 DBUS_REQUIRED=1.0
 DBUS_GLIB_REQUIRED=0.7
@@ -84,6 +85,7 @@ PKG_CHECK_MODULES(CHEESE, \
   gstreamer-0.10 >= $GSTREAMER_REQUIRED \
   gstreamer-plugins-base-0.10 >= $GSTREAMER_REQUIRED \
   libebook-1.2 >= $LIBEBOOK_REQUIRED \
+  libcanberra-gtk >= $LIBCANBERRA_REQUIRED \
   cairo >= $CAIRO_REQUIRED \
   dbus-1 >= $DBUS_REQUIRED \
   dbus-glib-1 >= $DBUS_GLIB_REQUIRED \
diff --git a/src/Makefile.am b/src/Makefile.am
index d713c6d..dd4135d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -36,8 +36,6 @@ cheese_SOURCES = \
 	eog-thumb-nav.h \
 	ephy-spinner.c \
 	ephy-spinner.h \
-	gst-audio-play.c \
-	gst-audio-play.h \
 	cheese-no-camera.c \
 	cheese-no-camera.h \
 	cheese-prefs-widget.h \
diff --git a/src/cheese-window.c b/src/cheese-window.c
index a2e48db..fe1621a 100644
--- a/src/cheese-window.c
+++ b/src/cheese-window.c
@@ -37,6 +37,7 @@
 
 #include <gst/interfaces/xoverlay.h>
 #include <gtk/gtk.h>
+#include <canberra-gtk.h>
 #include <libebook/e-book.h>
 
 #ifdef HAVE_MMKEYS
@@ -55,7 +56,6 @@
 #include "eog-thumb-nav.h"
 #include "cheese-window.h"
 #include "ephy-spinner.h"
-#include "gst-audio-play.h"
 #include "cheese-no-camera.h"
 #include "cheese-prefs-dialog.h"
 #include "cheese-flash.h"
@@ -180,8 +180,6 @@ typedef struct
 
   GSource *fullscreen_timeout_source;
 
-  int audio_play_counter;
-
   gint repeat_count;
 
   CheeseFlash *flash;
@@ -200,22 +198,6 @@ cheese_window_bring_to_front (gpointer data)
   gtk_window_present (GTK_WINDOW (cheese_window->window));
 }
 
-static char *
-audio_play_get_filename (CheeseWindow *cheese_window)
-{
-  char *filename;
-
-  if (cheese_window->audio_play_counter > 21)
-    filename = g_strdup_printf ("%s/sounds/shutter%i.ogg", PACKAGE_DATADIR,
-                                g_random_int_range (0, SHUTTER_SOUNDS));
-  else
-    filename = g_strdup_printf ("%s/sounds/shutter0.ogg", PACKAGE_DATADIR);
-
-  cheese_window->audio_play_counter++;
-
-  return filename;
-}
-
 /* standard event handler */
 static int
 cheese_window_delete_event_cb (GtkWidget *widget, GdkEvent event, gpointer data)
@@ -1191,23 +1173,23 @@ void
 cheese_window_countdown_picture_cb (gpointer data)
 {
   CheeseWindow *cheese_window = (CheeseWindow *) data;
-  GError       *error         = NULL;
-  GstAudioPlay *audio_play;
-  char         *shutter_filename;
   char         *photo_filename;
+  gboolean audio_error = 0;
 
   photo_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil, WEBCAM_MODE_PHOTO);
   if (cheese_webcam_take_photo (cheese_window->webcam, photo_filename))
   {
-    cheese_flash_fire (cheese_window->flash);
-    shutter_filename = audio_play_get_filename (cheese_window);
-    audio_play       = gst_audio_play_file (shutter_filename, &error);
-    if (!audio_play)
+//    cheese_flash_fire (cheese_window->flash);
+
+    audio_error = ca_gtk_play_for_widget (cheese_window->window, 0,
+                                          CA_PROP_EVENT_ID, "camera-shutter",
+                                          CA_PROP_EVENT_DESCRIPTION, _("Photo taken"),
+                                          NULL);
+      g_warning ("oo %s ", ca_strerror(audio_error));
+    if (audio_error != 0)
     {
-      g_warning ("%s", error ? error->message : "Unknown error");
-      g_error_free (error);
+      g_warning ("Unknown error while playing sound");
     }
-    g_free (shutter_filename);
   }
   g_free (photo_filename);
 }
@@ -2049,7 +2031,6 @@ cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server)
   cheese_window->gconf               = cheese_gconf_new ();
   cheese_window->fileutil            = cheese_fileutil_new ();
   cheese_window->flash               = cheese_flash_new ();
-  cheese_window->audio_play_counter  = 0;
   cheese_window->isFullscreen        = FALSE;
 
   cheese_window->server = dbus_server;
diff --git a/src/cheese.c b/src/cheese.c
index 0b5adcf..69fc9ec 100644
--- a/src/cheese.c
+++ b/src/cheese.c
@@ -27,6 +27,7 @@
 #include <glib/gi18n.h>
 #include <gio/gio.h>
 #include <gtk/gtk.h>
+#include <canberra-gtk.h>
 #include <gst/gst.h>
 
 #include "cheese-fileutil.h"
@@ -215,6 +216,7 @@ main (int argc, char **argv)
   gtk_window_set_default_icon_name ("cheese");
   gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
                                      APPNAME_DATA_DIR G_DIR_SEPARATOR_S "icons");
+  ca_gtk_context_get();
 
   cheese_handle_files_from_before_224 ();
   cheese_window_init (CheeseOptions.hal_device_id, dbus_server);
diff --git a/src/gst-audio-play.c b/src/gst-audio-play.c
deleted file mode 100644
index eb5b0c4..0000000
--- a/src/gst-audio-play.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Mathias Hasselmann <mathias.hasselmann@gmx.de>
- *
- * gst-audio-play.h: A simple audio file player
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gst-audio-play.h"
-#include <gst/gst.h>
-
-#define GST_AUDIO_PLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_AUDIO_PLAY, GstAudioPlayPrivate))
-
-enum {
-  PROPID_URI = 1
-};
-
-enum {
-  SIGNAL_DONE,
-  LAST_SIGNAL
-};
-
-typedef struct {
-  GstElement *pipeline;
-  GstElement *playbin;
-} GstAudioPlayPrivate;
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (GstAudioPlay, gst_audio_play, G_TYPE_OBJECT)
-
-static gboolean
-gst_audio_play_bus_message (GstBus     *bus G_GNUC_UNUSED,
-                        GstMessage *message,
-                        gpointer    data)
-{
-  GstAudioPlay *self = GST_AUDIO_PLAY (data);
-  GError *error = NULL;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_EOS:
-      g_signal_emit (self, signals[SIGNAL_DONE], 0, NULL);
-
-      gst_audio_play_stop (self);
-      g_object_unref (self);
-
-      break;
-
-    case GST_MESSAGE_ERROR: 
-      gst_message_parse_error (message, &error, NULL);
-      g_signal_emit (self, signals[SIGNAL_DONE], 0, error);
-      g_clear_error (&error);
-
-      gst_audio_play_stop (self);
-      g_object_unref (self);
-
-      break;
-
-    default:
-      break;
-  }
-  return TRUE;
-}
-
-static void
-gst_audio_play_init (GstAudioPlay *self)
-{
-  GstAudioPlayPrivate* priv = GST_AUDIO_PLAY_GET_PRIVATE (self);
-  GstBus *bus;
-
-  priv->pipeline = gst_pipeline_new (NULL);
-
-  priv->playbin = gst_element_factory_make ("playbin", NULL);
-  g_return_if_fail (NULL != priv->playbin);
-
-  gst_bin_add (GST_BIN (priv->pipeline), priv->playbin);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
-  gst_bus_add_watch (bus, gst_audio_play_bus_message, self);
-  g_object_unref (bus);
-
-  g_object_ref (self);
-}
-
-static void
-gst_audio_play_set_property (GObject      *object,
-                             guint         propid,
-                             const GValue *value,
-                             GParamSpec   *spec)
-{
-  GstAudioPlay *self = GST_AUDIO_PLAY (object);
-  GstAudioPlayPrivate* priv = GST_AUDIO_PLAY_GET_PRIVATE (self);
-
-  g_return_if_fail (self && priv);
-
-  switch (propid) {
-    case PROPID_URI:
-      g_object_set_property (G_OBJECT (priv->playbin), 
-                             "uri", value);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, spec);
-      break;
-  }
-}
-
-static void
-gst_audio_play_dispose (GObject *object)
-{
-  GstAudioPlay *self = GST_AUDIO_PLAY (object);
-  GstAudioPlayPrivate* priv = GST_AUDIO_PLAY_GET_PRIVATE (self);
-
-  if (self && priv) {
-    if (priv->pipeline) {
-      g_object_unref (priv->pipeline);
-      priv->pipeline = NULL;
-    }
-  }
-
-  if (G_OBJECT_CLASS (gst_audio_play_parent_class)->dispose)
-    G_OBJECT_CLASS (gst_audio_play_parent_class)->dispose (object);
-}
-
-static void
-gst_audio_play_class_init (GstAudioPlayClass *audio_play_class)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (audio_play_class);
-
-  object_class->dispose = gst_audio_play_dispose;
-  object_class->set_property = gst_audio_play_set_property;
-
-  g_object_class_install_property (object_class, PROPID_URI, g_param_spec_string (
-                                   "uri", NULL, NULL, NULL, G_PARAM_STATIC_NAME |
-                                   G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
-
-  signals[SIGNAL_DONE] = g_signal_new ("done", GST_TYPE_AUDIO_PLAY, G_SIGNAL_RUN_FIRST, 
-                                       G_STRUCT_OFFSET (GstAudioPlayClass, done), NULL, NULL,
-                                       g_cclosure_marshal_VOID__POINTER, 
-                                       G_TYPE_NONE, 1, G_TYPE_POINTER);
-
-  g_type_class_add_private (audio_play_class, sizeof (GstAudioPlayPrivate));
-}
-
-GstAudioPlay* 
-gst_audio_play_new (const gchar *uri)
-{
-  return g_object_new (GST_TYPE_AUDIO_PLAY, "uri", uri, NULL);
-}
-
-void
-gst_audio_play_start (GstAudioPlay *audio_play)
-{
-  g_return_if_fail (GST_IS_AUDIO_PLAY (audio_play));
-  GstAudioPlayPrivate* priv = GST_AUDIO_PLAY_GET_PRIVATE (audio_play);
-
-  gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
-}
-
-void
-gst_audio_play_stop (GstAudioPlay *audio_play)
-{
-  g_return_if_fail (GST_IS_AUDIO_PLAY (audio_play));
-  GstAudioPlayPrivate* priv = GST_AUDIO_PLAY_GET_PRIVATE (audio_play);
-
-  gst_element_set_state (priv->pipeline, GST_STATE_NULL);
-}
-
-GstAudioPlay*
-gst_audio_play_file (const gchar *filename,
-                     GError     **error)
-{
-  GstAudioPlay *audio_play;
-  gchar *uri;
-
-  g_return_val_if_fail (NULL != filename, NULL);
-  uri = g_filename_to_uri (filename, NULL, error);
-
-  if (NULL == uri)
-    return NULL;
-
-  audio_play = gst_audio_play_new (uri);
-  gst_audio_play_start (audio_play);
-  g_free (uri);
-
-  return audio_play;
-}
diff --git a/src/gst-audio-play.h b/src/gst-audio-play.h
deleted file mode 100644
index 4d6720f..0000000
--- a/src/gst-audio-play.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Mathias Hasselmann <mathias.hasselmann@gmx.de>
- *
- * gst-audio-play.h: A simple audio file player
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_AUDIO_PLAY_H__
-#define __GST_AUDIO_PLAY_H__
-
-#include <glib-object.h>
-
-#define GST_TYPE_AUDIO_PLAY           (gst_audio_play_get_type())
-#define GST_AUDIO_PLAY(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AUDIO_PLAY, GstAudioPlay))
-#define GST_AUDIO_PLAY_CLASS(cls)     (G_TYPE_CHECK_CLASS_CAST((cls), GST_TYPE_AUDIO_PLAY, GstAudioPlayClass))
-#define GST_IS_AUDIO_PLAY(obj)        (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AUDIO_PLAY))
-#define GST_IS_AUDIO_PLAY_CLASS(cls)  (G_TYPE_CHECK_CLASS_TYPE((cls), GST_TYPE_AUDIO_PLAY))
-#define GST_AUDIO_PLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_AUDIO_PLAY, GstAudioPlayClass))
-
-G_BEGIN_DECLS
-
-typedef struct
-{
-  GObject object;
-} GstAudioPlay;
-
-typedef struct
-{
-  GObjectClass parent_class;
-
-  /* signals */
-  void (*done) (GstAudioPlay *audio_play, GError *error);
-} GstAudioPlayClass;
-
-GType         gst_audio_play_get_type 	(void) G_GNUC_CONST;
-GstAudioPlay *gst_audio_play_new      	(const gchar *uri);
-
-void          gst_audio_play_start    	(GstAudioPlay *audio_play);
-void          gst_audio_play_stop     	(GstAudioPlay *audio_play);
-
-GstAudioPlay *gst_audio_play_file      	(const gchar *filename,
-                                         GError **error);
-
-G_END_DECLS
-
-#endif /* __GST_AUDIO_PLAY_H__ */
diff --git a/src/wscript_build b/src/wscript_build
index 698a068..489fccc 100644
--- a/src/wscript_build
+++ b/src/wscript_build
@@ -15,7 +15,7 @@ obj.find_sources_in_dirs('.') # take the sources in the current folder
 obj.includes='.'
 obj.uselib='''GLIB GOBJECT GIO GTK GDK
               LIBGNOMEDESKTOP GCONF GSTREAMER
-              GSTREAMER_PLUGINS_BASE LIBEBOOK
+              GSTREAMER_PLUGINS_BASE LIBEBOOK LIBCANBERRA_GTK
               CAIRO DBUS DBUSGLIB HAL PANGOCAIRO LIBRSVG'''
 
 obj.target='cheese'
diff --git a/wscript b/wscript
index 33e1519..e21dc7e 100644
--- a/wscript
+++ b/wscript
@@ -43,6 +43,7 @@ def configure(conf):
 	conf.check_pkg('gstreamer-0.10', destvar='GSTREAMER', vnum='0.10.20', mandatory=True)
 	conf.check_pkg('gstreamer-plugins-base-0.10', destvar='GSTREAMER_PLUGINS_BASE', vnum='0.10.20', mandatory=True)
 	conf.check_pkg('libebook-1.2', destvar='LIBEBOOK', vnum='1.12.0', mandatory=True)
+	conf.check_pkg('libcanberra-gtk', destvar='LIBCANBERRA_GTK', vnum='0.4', mandatory=True)
 	conf.check_pkg('cairo', destvar='CAIRO', vnum='1.4.0', mandatory=True)
 	conf.check_pkg('dbus-1', destvar='DBUS', vnum='1.0', mandatory=True)
 	conf.check_pkg('dbus-glib-1', destvar='DBUSGLIB', vnum='0.7', mandatory=True)
