Index: src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
===================================================================
--- src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs	(revisión: 4621)
+++ src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs	(copia de trabajo)
@@ -450,7 +450,7 @@
                     
                     if (CoverArtSize == 0) {
                         if (CoverArtFileType == "jpg" || CoverArtFileType == "jpeg") {                        
-                            SafeUri local_cover_uri = new SafeUri (Banshee.Base.CoverArtSpec.GetPath (coverart_id));
+                            SafeUri local_cover_uri = new SafeUri (Banshee.Base.CoverArtSpec.GetPreferredPath (coverart_id));
                             Banshee.IO.File.Copy (local_cover_uri, cover_uri, false);
                         } else {
                             pic = artwork_manager.Lookup (coverart_id);
Index: src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs
===================================================================
--- src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs	(revisión: 4621)
+++ src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs	(copia de trabajo)
@@ -93,8 +93,8 @@
                 return null;
             }
             
-            string path = CoverArtSpec.GetPathForSize (id, size);
-            if (File.Exists (path)) {
+            string path = CoverArtSpec.GetValidPathForSize (id, size);
+            if (path!=null) {
                 if (Path.GetExtension (path) == "cover") {
                     try {
                         Pixbuf pixbuf = new Pixbuf (path);
@@ -119,7 +119,8 @@
                 }
             }
             
-            string orig_path = CoverArtSpec.GetPathForSize (id, 0);
+            path = CoverArtSpec.GetPreferredPathForSize(id, size);
+            string orig_path = CoverArtSpec.GetValidPathForSize (id, 0);
             if (File.Exists (orig_path) && size > 1) {
                 try {
                     Pixbuf pixbuf = new Pixbuf (orig_path);
Index: src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs	(revisión: 4621)
+++ src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs	(copia de trabajo)
@@ -156,7 +156,7 @@
         
         protected bool SaveHttpStreamCover (Uri uri, string albumArtistId, string [] ignoreMimeTypes)
         {
-            return SaveHttpStream (uri, CoverArtSpec.GetPath (albumArtistId), ignoreMimeTypes);
+            return SaveHttpStream (uri, CoverArtSpec.GetPreferredPath (albumArtistId), ignoreMimeTypes);
         }
     }
 }
Index: src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs	(revisión: 4621)
+++ src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs	(copia de trabajo)
@@ -74,7 +74,7 @@
             if(pictures != null && pictures.Length > 0) {
                 int preferred_index = GetPictureIndexToUse(pictures);
                 IPicture picture = pictures[preferred_index];
-                string path = CoverArtSpec.GetPath(artist_album_id);
+                string path = CoverArtSpec.GetPreferredPath(artist_album_id);
                 
                 if(SavePicture(picture, path)) {    
                     StreamTag tag = new StreamTag();
@@ -116,9 +116,11 @@
             if (picture == null || picture.Data == null || picture.Data.Count == 0) {
                 return false;
             }
-            
+
+            string mime_type = picture.MimeType;
+            string extension = mime_type.Substring(mime_type.IndexOf('/')+1);
             Banshee.IO.StreamAssist.Save (new MemoryStream (picture.Data.Data), 
-                new FileStream (Path.ChangeExtension (image_path, "cover"), 
+                new FileStream (Path.ChangeExtension (image_path, extension), 
                     FileMode.Create, FileAccess.ReadWrite));
                 
             return true;
Index: src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs	(revisión: 4621)
+++ src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs	(copia de trabajo)
@@ -108,7 +108,9 @@
             if (best_file != null) {
                 try {
                     // Copy the file to the cover art directory
-                    Banshee.IO.File.Copy (new SafeUri (best_file), new SafeUri (CoverArtSpec.GetPath (Track.ArtworkId)), false);
+                    Banshee.IO.File.Copy (new SafeUri (best_file), 
+                                          new SafeUri (CoverArtSpec.GetPreferredPath (Track.ArtworkId)),
+                                          false);
 
                     // Send the new StreamTag
                     StreamTag tag = new StreamTag ();
Index: src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs	(revisión: 4621)
+++ src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs	(copia de trabajo)
@@ -46,21 +46,38 @@
         
         public static bool CoverExistsForSize (string aaid, int size)
         {
-            return File.Exists (GetPathForSize (aaid, size));
+            return GetValidPathForSize (aaid, size) != null;
         }
         
-        public static string GetPath (string aaid)
+        public static string GetPreferredPath (string aaid)
         {
-            return GetPathForSize (aaid, 0);
+            return GetPreferredPathForSize(aaid,0);
         }
     
-        public static string GetPathForSize (string aaid, int size)
+        public static string GetPreferredPathForSize (string aaid, int size)
         {
             return size == 0
                 ? Path.Combine (RootPath, String.Format ("{0}.jpg", aaid))
                 : Path.Combine (RootPath, Path.Combine (size.ToString (), String.Format ("{0}.jpg", aaid))); 
         }
     
+        public static string GetValidPathForSize (string aaid, int size)
+        {
+            string BasePath = (size == 0)
+                ? RootPath
+                : Path.Combine (RootPath, size.ToString());
+            string[] extensions = { "{0}.cover", "{0}.jpg", "{0}.jpeg", "{0}.gif", "{0}.png", "{0}.bmp" };
+
+            foreach (string ext in extensions)
+            {
+                string file_name = Path.Combine (BasePath, String.Format(ext, aaid));
+                if (File.Exists(file_name))
+                    return file_name;
+            }
+
+            return null;
+        }
+    
         public static string CreateArtistAlbumId (string artist, string album)
         {
             return CreateArtistAlbumId (artist, album, false);
