Index: src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs	(revision 4856)
+++ src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs	(working copy)
@@ -40,7 +40,10 @@
         
         int TrackNumber { get; }
         int TrackCount { get; }
+        int DiscNumber { get; }
+        int DiscCount { get; }
         int Year { get; }
         int Rating { get; }
+        bool IsCompilation { get; }
     }
 }
Index: src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs	(revision 4856)
+++ src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs	(working copy)
@@ -89,6 +89,11 @@
                     return Escape (t == null ? (string)r : t.DisplayArtistName);
             });
                         
+            AddConversion ("album_artist", Catalog.GetString ("Album-Artist"),  
+                delegate (ITrackInfo t, object r) {
+                    return Escape (t == null ? (string)r : t.AlbumArtist);
+            });
+                        
             AddConversion ("genre", Catalog.GetString ("Genre"),  
                 delegate (ITrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.DisplayGenre);
@@ -109,6 +114,11 @@
                     return String.Format ("{0}", t == null ? (int)r : t.Year);
             });
              
+            AddConversion ("year_string", Catalog.GetString (" (Year)"),  
+                delegate (ITrackInfo t, object r) {
+                    return ( t.IsCompilation ? "" : " (" + String.Format ("{0}", t == null ? (int)r : t.Year ) +")" );
+            });
+             
             AddConversion ("track_count", Catalog.GetString ("Count"),  
                 delegate (ITrackInfo t, object r) {
                     return String.Format ("{0:00}", t == null ? (int)r : t.TrackCount);
@@ -119,6 +129,18 @@
                     return String.Format ("{0:00}", t == null ? (int)r : t.TrackNumber);
             });
              
+            AddConversion ("disc_string", Catalog.GetString ("Disc-String"),  
+                delegate (ITrackInfo t, object r) {
+                    if ( t.DiscCount > 1 ) {
+                        return "Disc " + 
+                               String.Format ("{0}", t == null ? (int)r : t.DiscNumber) + 
+                               " of " + 
+                               String.Format ("{0}", t == null ? (int)r : t.DiscCount);
+                    } else {
+                        return "";
+                    }
+            });
+             
             AddConversion ("track_count_nz", Catalog.GetString ("Count (unsorted)"),  
                 delegate (ITrackInfo t, object r) {
                     return String.Format ("{0}", t == null ? (int)r : t.TrackCount);
@@ -157,7 +179,8 @@
             "%artist%%path_sep%%album% (%year%)",
             "%artist% - %album%",
             "%album%",
-            "%artist%"
+            "%artist%",
+            "%album% - %album_artist%%year_string%%path_sep%%disc_string%"
         };
         
         public static string [] SuggestedFolders {
