=== modified file 'daemon/gvfsbackenddav.c'
--- daemon/gvfsbackenddav.c	2009-07-14 11:49:21 +0000
+++ daemon/gvfsbackenddav.c	2010-12-03 17:05:40 +0000
@@ -221,27 +221,35 @@
 path_equal (const char *a, const char *b, gboolean relax)
 {
   gboolean res;
-  size_t a_len, b_len;
+  char *a_decoded, *b_decoded;
+  size_t a_decoded_len, b_decoded_len;
+  
+  if (a == NULL || b == NULL)
+      return a == b;
+
+  a_decoded = soup_uri_decode(a);
+  b_decoded = soup_uri_decode(b);
 
   if (relax == FALSE)
-    return str_equal (a, b, FALSE);
-
-  if (a == NULL || b == NULL)
-      return a == b;
-
-  a_len = strlen (a);
-  b_len = strlen (b);
-
-  while (a_len > 0 && a[a_len - 1] == '/')
-    a_len--;
-
-  while (b_len > 0 && b[b_len - 1] == '/')
-    b_len--;
-
-  if (a_len == b_len)
-    res = ! strncmp (a, b, a_len);
-  else
-    res = FALSE;
+    res = str_equal (a_decoded, b_decoded, FALSE);
+  else {
+    a_decoded_len = strlen (a_decoded);
+    b_decoded_len = strlen (b_decoded);
+
+    while (a_decoded_len > 0 && a_decoded[a_decoded_len - 1] == '/')
+	a_decoded_len--;
+
+    while (b_decoded_len > 0 && b_decoded[b_decoded_len - 1] == '/')
+	b_decoded_len--;
+
+    if (a_decoded_len == b_decoded_len)
+	res = ! strncmp (a_decoded, b_decoded, a_decoded_len);
+    else
+	res = FALSE;
+  }
+
+  free(a_decoded);
+  free(b_decoded);
 
   return res;
 }

