diff --git a/src/Backends/Banshee.Gio/Banshee.Hardware.Gio/UsbDevice.cs b/src/Backends/Banshee.Gio/Banshee.Hardware.Gio/UsbDevice.cs
index b067459..d0da858 100644
--- a/src/Backends/Banshee.Gio/Banshee.Hardware.Gio/UsbDevice.cs
+++ b/src/Backends/Banshee.Gio/Banshee.Hardware.Gio/UsbDevice.cs
@@ -43,21 +43,16 @@ namespace Banshee.Hardware.Gio
 
         internal static UsbDevice ResolveRootDevice (IDevice device)
         {
-            // First check if the supplied device is an IUsbDevice itself
-            var result = Resolve (device);
-            if (result != null) {
-                return result;
-            }
-
             // Now walk up the device tree to see if we can find one.
             IRawDevice raw = device as IRawDevice;
             if (raw != null) {
-                var parent = raw.Device.UdevMetadata.Parent;
-                while (parent != null) {
-                    if (parent.PropertyExists (UdevUsbBusNumber) && parent.PropertyExists (UdevUsbDeviceNumber)) {
-                        return new UsbDevice (new RawUsbDevice (raw.Device.Manager, raw.Device.GioMetadata, parent));
+                var metadata = raw.Device.UdevMetadata;
+                while (metadata != null) {
+                    if (IsUsbDevice (metadata)) {
+                        Console.WriteLine ("IT was usb");
+                        return new UsbDevice (new RawUsbDevice (raw.Device.Manager, raw.Device.GioMetadata, metadata));
                     }
-                    parent = parent.Parent;
+                    metadata = metadata.Parent;
                 }
             }
             return null;
@@ -110,14 +105,24 @@ namespace Banshee.Hardware.Gio
         public static UsbDevice Resolve (IDevice device)
         {
             IRawDevice raw = device as IRawDevice;
-            if (raw != null) {
-                var metadata = raw.Device.UdevMetadata;
-                if (metadata.PropertyExists (UdevUsbBusNumber) && metadata.PropertyExists (UdevUsbDeviceNumber))
-                    return new UsbDevice (raw.Device);
+            if (raw != null && IsUsbDevice (raw.Device.UdevMetadata)) {
+                return new UsbDevice (raw.Device);
             }
             return null;
         }
 
+        static bool IsUsbDevice (UdevMetadataSource metadata)
+        {
+//            if (metadata.PropertyExists (UdevUsbBusNumber) && metadata.PropertyExists (UdevUsbDeviceNumber))
+//                return true;
+
+            var comparer = StringComparer.OrdinalIgnoreCase;
+            if (metadata.PropertyExists ("ID_BUS") && comparer.Equals ("usb", metadata.GetPropertyString ("ID_BUS")))
+                return true;
+
+            return false;
+        }
+
         public RawDevice Device {
             get; set;
         }
