Index: configure.in
===================================================================
--- configure.in	(revision 1734)
+++ configure.in	(working copy)
@@ -56,7 +56,6 @@ AC_SUBST(GSTREAMER_CFLAGS)
 AC_SUBST(GSTREAMER_LIBS)
 
 # Find the GStreamer elements we use, and warn if they are not present.
-AM_GST_ELEMENT_CHECK(cdparanoiasrc,,AC_MSG_WARN([The 'cdparanoia' element was not found. This will cause Sound Juicer to fail at runtime.]))
 AM_GST_ELEMENT_CHECK(vorbisenc,,AC_MSG_WARN([The 'vorbisenc' element was not found. This will cause encoding to Ogg Vorbis to fail.]))
 AM_GST_ELEMENT_CHECK(flacenc,,AC_MSG_WARN([The 'flacenc' element was not found. This will cause encoding to FLAC to fail.]))
 AM_GST_ELEMENT_CHECK(wavenc,,AC_MSG_WARN([The 'wavenc' element was not found. This will cause encoding to Wave to fail.]))
Index: src/sj-play.c
===================================================================
--- src/sj-play.c	(revision 1734)
+++ src/sj-play.c	(working copy)
@@ -357,7 +357,7 @@ setup (GError **err)
     g_signal_connect (bus, "message::error", G_CALLBACK (cb_error), NULL);
     g_signal_connect (bus, "message::state-changed", G_CALLBACK (cb_state), NULL);
 
-    cdp = gst_element_factory_make (CD_SRC, "cd-source");
+    cdp = gst_element_make_from_uri (GST_URI_SRC, "cdda://1", "cd-source");
     if (!cdp) {
       gst_object_unref (GST_OBJECT (pipeline));
       pipeline = NULL;
@@ -367,8 +367,12 @@ setup (GError **err)
     /* do not set to 1, that messes up buffering. 2 is enough to keep
      * noise from the drive down. */
     /* TODO: will not notice drive changes, should monitor */
+    if (g_object_class_find_property (G_OBJECT_GET_CLASS (cdp), "read-speed") != NULL) {
+    	g_object_set (G_OBJECT (cdp),
+    	              "read-speed", 2,
+                      NULL);
+    }
     g_object_set (G_OBJECT (cdp),
-                  "read-speed", 2,
                   "device", nautilus_burn_drive_get_device (drive),
                   NULL);
 
Index: libjuicer/sj-extractor.c
===================================================================
--- libjuicer/sj-extractor.c	(revision 1734)
+++ libjuicer/sj-extractor.c	(working copy)
@@ -271,7 +271,7 @@ static void build_pipeline (SjExtractor 
   g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb), extractor);
 
   /* Read from CD */
-  priv->cdsrc = gst_element_factory_make (CD_SRC, "cd_src");
+  priv->cdsrc = gst_element_make_from_uri (GST_URI_SRC, "cdda://1", "cd_src");
   if (priv->cdsrc == NULL) {
     g_set_error (&priv->construct_error,
                  SJ_ERROR, SJ_ERROR_INTERNAL_ERROR,
@@ -280,7 +280,9 @@ static void build_pipeline (SjExtractor 
   }
 
   g_object_set (G_OBJECT (priv->cdsrc), "device", priv->device_path, NULL);
-  g_object_set (G_OBJECT (priv->cdsrc), "paranoia-mode", priv->paranoia_mode, NULL);
+  if (g_object_class_find_property (G_OBJECT_GET_CLASS (priv->cdsrc), "paranoia-mode")) {
+	  g_object_set (G_OBJECT (priv->cdsrc), "paranoia-mode", priv->paranoia_mode, NULL);
+  }
 
   /* Get the track format for seeking later */
   priv->track_format = gst_format_get_by_nick ("track");
@@ -557,7 +559,7 @@ gboolean sj_extractor_supports_encoding 
 {
   GstElement *element = NULL;
 
-  element = gst_element_factory_make (CD_SRC, "test");
+  element = gst_element_make_from_uri (GST_URI_SRC, "cdda://1", "test");
   if (element == NULL) {
     g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR,
                  _("The plugin necessary for CD access was not found"));
Index: libjuicer/sj-extractor.h
===================================================================
--- libjuicer/sj-extractor.h	(revision 1734)
+++ libjuicer/sj-extractor.h	(working copy)
@@ -30,10 +30,6 @@
 
 G_BEGIN_DECLS
 
-/**
- * What CD source to use.
- */
-#define CD_SRC "cdparanoiasrc"
 
 #define SJ_TYPE_EXTRACTOR              (sj_extractor_get_type ())
 #define SJ_EXTRACTOR(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), SJ_TYPE_EXTRACTOR, SjExtractor))
