Index: src/widget/webinfo/lyrics.py
===================================================================
--- src/widget/webinfo/lyrics.py	(revision 911)
+++ src/widget/webinfo/lyrics.py	(working copy)
@@ -251,7 +251,7 @@
                 os.unlink(song.lyric_uri)
             vfs.makedirs( song.lyric_uri[:self.song.lyric_uri.rfind("/")] )
             try:
-                f = file(vfs.get_local_path_from_uri(song.lyric_uri),"w")
+                f = file(vfs.get_path_from_uri(song.lyric_uri),"w")
             except:pass
             else:
                 f.write( html )
Index: src/song.py
===================================================================
--- src/song.py	(revision 911)
+++ src/song.py	(working copy)
@@ -773,7 +773,7 @@
     Some filename manipulation
     """
     def get_path(self):
-        try: return vfs.get_local_path_from_uri(self.get("uri"))
+        try: return vfs.get_path_from_uri(self.get("uri"))
         except : return ""
 
     def get_scheme(self):
Index: src/vfs/vfsutils.py
===================================================================
--- src/vfs/vfsutils.py	(revision 911)
+++ src/vfs/vfsutils.py	(working copy)
@@ -51,7 +51,7 @@
 
 def islocaldir(uri):
     if not get_scheme(uri) == "file": return False
-    else: return os.path.isdir(get_local_path_from_uri(uri))
+    else: return os.path.isdir(get_path_from_uri(uri))
 
 def get_mime_type(uri):
     # Minimum mime_type support for webradio
@@ -65,7 +65,7 @@
 def read_entire_file(uri):
     data = ""
     if get_scheme(uri) == "file":
-        f = file(get_local_path_from_uri(uri),"r")
+        f = file(get_path_from_uri(uri),"r")
         data = f.read()
         f.close()
     else:
@@ -86,11 +86,12 @@
         return "file://"+pathname2url(os.path.abspath(os.path.expanduser(arg)))
 
 def get_name(value):
-    value = re.sub("^([A-Za-z]+):///+", "\\1:///", value)
-    return urlparse(value)[2].split("/")[-1]
+    return get_path_from_uri(value).split("/")[-1]
 
-def get_local_path_from_uri(value):
-    value = re.sub("^([A-Za-z]+):///+", "\\1:///", value)
+def get_path_from_uri(value):
+    if get_scheme(value) == "file":
+        # escape "#" otherwise it will be interpreted as a url fragment by urlparse
+        value = value.replace("#", "%23")
     return unquote(urlparse(value)[2])
 
 def unescape_string_for_display(value):
@@ -99,13 +100,13 @@
 def unlink(uri):
     if get_scheme(uri) != "file": return True
     else:
-        path = get_local_path_from_uri(uri)
+        path = get_path_from_uri(uri)
         return os.unlink(path)
 
 def exists(uri):
     if get_scheme(uri) != "file": return True
     else:
-        path = get_local_path_from_uri(uri)
+        path = get_path_from_uri(uri)
         return os.path.exists(path)
 
 def makedirs(uri,mode=0755):
@@ -162,7 +163,7 @@
 """ Return all folder in a folder excepted hidden one """
 def get_folder_in_folder(dir):
     dirs = set()
-    alldirs = [ get_local_path_from_uri(dir) ]
+    alldirs = [ get_path_from_uri(dir) ]
     for mdir in alldirs:
         for dirpath, dirs, names in os.walk(mdir):
             [ dirs.remove(dir) for dir in dirs if dir[0] == "." ]
@@ -173,7 +174,7 @@
 
 """ Return all uri in a folder excepted hidden one """
 def parse_folder(dir):
-    dir = get_local_path_from_uri(dir)
+    dir = get_path_from_uri(dir)
     uris = [ "file://"+os.path.join(dir,name) for name in os.listdir(dir) if name[0] != "." and os.path.isfile(os.path.join(dir,name)) ]
     print "W:Utils:ParseFolder:",len(uris),"founds"
     return uris
@@ -287,7 +288,7 @@
     return parse_uris(uris,True,True,func_cb,*param)
 
 def move_to_trash(uri):
-    path = get_local_path_from_uri(uri)
+    path = get_path_from_uri(uri)
     path = os.path.realpath(os.path.expanduser(path))
     if not os.path.exists(path): return False
     #find the trash folder
Index: src/source/local.py
===================================================================
--- src/source/local.py	(revision 911)
+++ src/source/local.py	(working copy)
@@ -167,7 +167,7 @@
         added = []
         db_uris = set(ListenDB.get_all_uris())
 
-        alldirs = [ vfs.get_local_path_from_uri(dir) for dir in dirs ]
+        alldirs = [ vfs.get_path_from_uri(dir) for dir in dirs ]
         last_estimated = estimated = 0 
         total_dirs = len(alldirs)
         parsed_dirs = 0
Index: src/source/ipod.py
===================================================================
--- src/source/ipod.py	(revision 911)
+++ src/source/ipod.py	(working copy)
@@ -142,7 +142,7 @@
                 track.remember_playback_position = 0x00
                 track.flag4 = 0x00 # Show Title/Album/Artist on the 'Now Playing' page
 
-            filename = str(vfs.get_local_path_from_uri(tmp_uri))
+            filename = str(vfs.get_path_from_uri(tmp_uri))
 
             for ltag,itag in IPOD_IDS.iteritems():
                 real_itag = itag.replace("@","").replace("#","")
@@ -205,7 +205,7 @@
             self.__current_transcode.stop()
         self.__current_transcode = None
         if self.uri_convert:
-            try: os.unlink(vfs.get_local_path_from_uri(self.uri_convert))
+            try: os.unlink(vfs.get_path_from_uri(self.uri_convert))
             except: pass
         self.cond.acquire()
         self.loginfo("%d song deleted from queue",len(self.__transfer_list))
Index: src/source/podcast.py
===================================================================
--- src/source/podcast.py	(revision 911)
+++ src/source/podcast.py	(working copy)
@@ -360,7 +360,7 @@
                 if self.debug: print "I:PodcastDownloadJob:Start download:",uri
                 proxy = discover_http_proxy()
                 handle_read = urllib.urlopen(uri,None,proxy)
-                handle_write = file(vfs.get_local_path_from_uri(new_uri),"w")
+                handle_write = file(vfs.get_path_from_uri(new_uri),"w")
                 info = handle_read.info()
             
                 try: totalsize = int(info.getheader("content-length"))
