--- mythtv/configure.orig	2009-11-08 16:51:24.000000000 -0800
+++ mythtv/configure	2010-03-01 21:21:17.000000000 -0800
@@ -1199,6 +1199,7 @@
     ivtv
     joystick_menu
     libfftw3
+    libudev
     lirc
     mheg
     opengl_video
@@ -1611,6 +1612,7 @@
 enable ivtv
 enable lamemp3
 enable lirc
+enable libudev
 enable mheg
 enable opengl
 enable opengl_vsync
@@ -3036,6 +3038,11 @@
 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
 
+# Attempt to use libudev for mediamonitor
+if test $target_os = linux; then
+    check_lib2 libudev.h udev_new || enable libudev
+fi
+
 enabled ffmpeg_pthreads && enable pthreads
 
 # check for some common methods of building with pthread support
@@ -4223,6 +4230,10 @@
   echo "CONFIG_OPENGL_LIBS=-lGL -lGLU" >> $MYTH_CONFIG_MAK
 fi
 
+if enabled libudev; then
+  echo "CONFIG_LIBUDEV_LIBS=-ludev" >> $MYTH_CONFIG_MAK
+fi
+
 if test x"$CCONFIG" != x"" ; then
   echo "CCONFIG=$CCONFIG" >> $MYTH_CONFIG_MAK
   echo "#define MYTH_BUILD_CONFIG \"$CCONFIG\"" >>$TMPH
@@ -4244,6 +4255,7 @@
   echo "GCC_MINOR=$GCC_MINOR" >> $MYTH_CONFIG_MAK
 fi
 
+
 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
 
 cat <<EOF >> $MYTH_CONFIG_MAK
--- mythtv/libs/libmyth/libmyth.pro.orig	2010-03-01 15:12:02.000000000 -0800
+++ mythtv/libs/libmyth/libmyth.pro	2010-03-01 21:25:39.000000000 -0800
@@ -75,6 +75,7 @@
 LIBS += -L../libavcodec          -lmythavcodec-$${LIBVERSION}
 LIBS += -L../libavutil           -lmythavutil-$${LIBVERSION}
 unix:LIBS += -ldl
+using_libudev:LIBS += $${CONFIG_LIBUDEV_LIBS}
 
 TARGETDEPS += ../libmythsamplerate/libmythsamplerate-$${MYTH_LIB_EXT}
 TARGETDEPS += ../libmythsoundtouch/libmythsoundtouch-$${MYTH_LIB_EXT}
--- mythtv/libs/libmyth/mediamonitor-unix.cpp.orig	2010-02-28 12:09:48.000000000 -0800
+++ mythtv/libs/libmyth/mediamonitor-unix.cpp	2010-03-02 09:33:36.000000000 -0800
@@ -39,6 +39,15 @@
 #include "mythhdd.h"
 #include "mythverbose.h"
 
+// Linux headers
+#ifdef linux
+#if CONFIG_LIBUDEV == 1
+extern "C" {
+#include <libudev.h>
+}
+#endif
+#endif
+
 #ifndef MNTTYPE_ISO9660
 #ifdef linux
 #define MNTTYPE_ISO9660 "iso9660"
@@ -219,6 +228,27 @@
     ret.replace(QRegExp(".*/"), "/dev/");
 
 #ifdef linux
+#if CONFIG_LIBUDEV == 1
+    // Use libudev to determine the name
+    ret = "";
+    struct udev	*udev = udev_new();
+    if (udev != NULL)
+    {
+	struct udev_device *device =
+	    udev_device_new_from_syspath(udev, sysfs.toAscii().constData());
+	if (device != NULL)
+	{
+	    const char *name = udev_device_get_devnode(device);
+
+	    if (name != NULL)
+		ret = tr(name);
+
+	    udev_device_unref(device);
+	}
+	udev_unref(udev);
+    }
+#else	// CONFIG_LIBUDEV
+    // Use udevinfo to determine the name
     QProcess    *udevinfo = new QProcess();
     QTextStream  stream(udevinfo);
     QStringList  args;
@@ -263,6 +293,7 @@
         return ret;
 
     udevinfo->deleteLater();
+#endif	// CONFIG_LIBUDEV
 #endif // linux
 
     VERBOSE(VB_MEDIA, msg + "->'" + ret + "'");
