Index: src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs	(revision 5135)
+++ src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs	(working copy)
@@ -58,28 +58,32 @@
         public void TestUnwanted ()
         {
             // Part of the in-progress media art storage spec
-            AssertEscaped ("!", "");
-            AssertEscaped ("@", "");
-            AssertEscaped ("#", "");
-            AssertEscaped ("$", "");
-            AssertEscaped ("^", "");
-            AssertEscaped ("&", "");
-            AssertEscaped ("*", "");
-            AssertEscaped ("_", "");
-            AssertEscaped ("+", "");
-            AssertEscaped ("=", "");
-            AssertEscaped ("|", "");
-            AssertEscaped ("\\", "");
-            AssertEscaped ("/", "");
-            AssertEscaped ("?", "");
-            AssertEscaped ("~", "");
-            AssertEscaped ("`", "");
-            AssertEscaped ("'", "");
-            AssertEscaped ("\"", "");
+            AssertEscaped ("a!", "a");
+            AssertEscaped ("a@", "a");
+            AssertEscaped ("a#", "a");
+            AssertEscaped ("a$", "a");
+            AssertEscaped ("a^", "a");
+            AssertEscaped ("a&", "a");
+            AssertEscaped ("a*", "a");
+            AssertEscaped ("a_", "a");
+            AssertEscaped ("a+", "a");
+            AssertEscaped ("a=", "a");
+            AssertEscaped ("a|", "a");
+            AssertEscaped ("a\\", "a");
+            AssertEscaped ("a/", "a");
+            AssertEscaped ("a?", "a");
+            AssertEscaped ("a~", "a");
+            AssertEscaped ("a`", "a");
+            AssertEscaped ("a'", "a");
+            AssertEscaped ("a\"", "a");
             
             // Banshee-specific: strip *everything* non-ASCII
             AssertEscaped ("\u00e9toile", "toile");
             AssertEscaped ("e\u0301", "e");
+            
+            // If the entire string would be stripped, return the original
+            AssertEscaped ("!", "!");
+            AssertEscaped ("!(a)", "!(a)");
         }
         
         [Test]
Index: src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs	(revision 5134)
+++ src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs	(working copy)
@@ -93,13 +93,18 @@
                 return null;
             }
             
+            string original = part;
             int lp_index = part.LastIndexOf ('(');
             if (lp_index > 0) {
                 part = part.Substring (0, lp_index);
             }
             
             // TODO compile regex
-            return Regex.Replace (part, @"[^A-Za-z0-9]*", "").ToLower ();
+            string stripped = Regex.Replace (part, @"[^A-Za-z0-9]*", "").ToLower ();
+            if (String.IsNullOrEmpty (stripped)) {
+                return original;
+            }
+            return stripped;
         }
         
         private static string root_path = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory (
