diff --git a/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs b/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
index 2a9793f..4ca1443 100644
--- a/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
@@ -40,6 +40,7 @@ namespace Banshee.Base
         private static string unknown_artist = "Unknown Artist";
         private static string unknown_album_tr = Catalog.GetString ("Unknown Album");
         private static string unknown_album = "Unknown Album";
+        private static string ilegal_characters = " -.,:/\"'`!@#$%^&*()=+*;<>?[]{}()|~";
 
         public static bool CoverExists (string artist, string album)
         {
@@ -100,7 +101,6 @@ namespace Banshee.Base
                 : String.Format ("{0}{1}{2}", sm_artist, asUriPart ? "/" : "-", sm_album);
         }
 
-        private static Regex filter_regex = new Regex (@"[^A-Za-z0-9]*", RegexOptions.Compiled);
         public static string EscapePart (string part)
         {
             if (String.IsNullOrEmpty (part)) {
@@ -112,8 +112,20 @@ namespace Banshee.Base
                 part = part.Substring (0, lp_index);
             }
 
-            return filter_regex.Replace (part, "").ToLower ();
+            part = RemoveCharacters(part, Path.GetInvalidFileNameChars());
+            part = RemoveCharacters(part, ilegal_characters.ToCharArray());
+
+            return part.ToLower();
+        }
+		
+        private static string RemoveCharacters (string text, char[] chars_to_remove)
+        {
+            foreach (char c in chars_to_remove) {
+	        text = text.Replace(c.ToString(), string.Empty);
+            }
+            return text;
         }
+ 
 
         private static string root_path = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory (
             "XDG_CACHE_HOME", ".cache"),  "album-art");
