Index: src/Core/Banshee/PlayerInterface.cs
===================================================================
--- src/Core/Banshee/PlayerInterface.cs	(revision 2227)
+++ src/Core/Banshee/PlayerInterface.cs	(working copy)
@@ -1585,6 +1585,7 @@
         private Menu song_popup_menu = null;
         private MenuItem add_to_playlist_menu_item = null;
         private MenuItem rating_menu_item = null;
+        private RatingMenu ratingMenu = null;
         
         private bool PlaylistMenuPopupTimeout(uint time)
         {
@@ -1626,29 +1627,14 @@
                     }
                 }
                 
-                Menu ratingMenu = new Menu();
-                
-                MenuItem clearItem = new MenuItem(Catalog.GetString("Clear"));
-                clearItem.Name = "0";
-                clearItem.Activated += OnItemRatingActivated;
-                
-                ratingMenu.Append(clearItem);
-                ratingMenu.Append(new SeparatorMenuItem());
-                
-                for(int i = 0; i < 5; i++) {
-                    MenuItem item = new MenuItem();
-                    HBox box = new HBox();
-                    box.Spacing = 3;
-                    
-                    for(int j = 0; j < i + 1; j++) {
-                        box.PackStart(new Gtk.Image(Banshee.Gui.CellRendererRating.RatedPixbuf), false, false, 0);
-                    }
-                    
-                    item.Add(box);
-                    item.Name = String.Format("{0}", i + 1);
-                    item.Activated += OnItemRatingActivated;
-                    ratingMenu.Append(item);
+                ratingMenu = new RatingMenu();
+                if (playlistView.Selection.CountSelectedRows() == 1) {
+                    foreach(TreePath path in playlistView.Selection.GetSelectedRows())
+                        ratingMenu.Value = playlistModel.PathTrackInfo(path).Rating;
+                } else {
+                    ratingMenu.MakeAllSensitive();
                 }
+                ratingMenu.Activated += OnRatingActivated;
                 
                 add_to_playlist_menu_item.Submenu = plMenu;
                 rating_menu_item.Submenu = ratingMenu;
@@ -1666,11 +1652,10 @@
             return false;
         }
 
-        private void OnItemRatingActivated(object o, EventArgs args)
+        private void OnRatingActivated(object o, EventArgs args)
         {
-            uint rating = Convert.ToUInt32((o as Widget).Name);
             foreach(TreePath path in playlistView.Selection.GetSelectedRows())
-                playlistModel.PathTrackInfo(path).Rating = rating;
+                playlistModel.PathTrackInfo(path).Rating = ratingMenu.Value;
             playlistView.QueueDraw();
         }
 
Index: src/Core/Banshee.Widgets/Banshee.Widgets.mdp
===================================================================
--- src/Core/Banshee.Widgets/Banshee.Widgets.mdp	(revision 2227)
+++ src/Core/Banshee.Widgets/Banshee.Widgets.mdp	(working copy)
@@ -41,6 +42,7 @@
     <File name="./FadingAlignment.cs" subtype="Code" buildaction="Compile" />
     <File name="./VolumeButton.cs" subtype="Code" buildaction="Compile" />
     <File name="./CoverArtView.cs" subtype="Code" buildaction="Compile" />
+    <File name="./RatingMenu.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
Index: src/Core/Banshee.Widgets/Makefile.am
===================================================================
--- src/Core/Banshee.Widgets/Makefile.am	(revision 2227)
+++ src/Core/Banshee.Widgets/Makefile.am	(working copy)
@@ -38,7 +38,8 @@
 	$(srcdir)/RatingEntry.cs \
 	$(srcdir)/ShadowContainer.cs \
 	$(srcdir)/DictionaryComboBox.cs \
-	$(srcdir)/FadingAlignment.cs 
+	$(srcdir)/FadingAlignment.cs \
+	$(srcdir)/RatingMenu.cs 
 
 Banshee_Widgets_RESOURCES = \
 	data/images/rating-rated.png \
Index: src/Core/Banshee.Widgets/RatingMenu.cs
===================================================================
--- src/Core/Banshee.Widgets/RatingMenu.cs	(revision 0)
+++ src/Core/Banshee.Widgets/RatingMenu.cs	(revision 0)
@@ -0,0 +1,111 @@
+/***************************************************************************
+ *  RatingMenu.cs
+ *
+ *  Copyright (C) 2007 Novell, Inc.
+ *  Written by Pepijn van de Geer <pvandegeer@gmail.com>
+ ****************************************************************************/
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a
+ *  copy of this software and associated documentation files (the "Software"),  
+ *  to deal in the Software without restriction, including without limitation  
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
+ *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  Software is furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in 
+ *  all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  DEALINGS IN THE SOFTWARE.
+ */
+ 
+using System;
+using Gtk;
+using Mono.Unix;
+
+namespace Banshee.Widgets
+{
+	
+	public class RatingMenu : Menu
+	{
+		
+        private uint rating;
+        private MenuItem clearItem;
+        private MenuItem item;
+        public event EventHandler Activated;
+        
+		public RatingMenu()
+		{
+           clearItem = new MenuItem(Catalog.GetString("Clear"));
+           clearItem.Name = "0";
+           clearItem.Activated += OnItemRatingActivated;
+
+           this.Append(clearItem);
+           this.Append(new SeparatorMenuItem());
+            
+
+            for(int i = 0; i < 5; i++) {
+                item = new MenuItem();
+                HBox box = new HBox();
+                box.Spacing = 3;
+
+                for(int j = 0; j < i + 1; j++) {
+                    box.PackStart(new Gtk.Image(Gdk.Pixbuf.LoadFromResource("rating-rated.png")), false, false, 0);
+                }
+
+                item.Add(box);
+                item.Name = String.Format("{0}", i + 1);
+                item.Activated += OnItemRatingActivated;
+                this.Append(item);
+                
+            }
+            
+            ShowHideItems();
+		
+		}
+		
+		public void MakeAllSensitive() 
+		{
+		    foreach (MenuItem child in this.Children)
+                child.Sensitive = true;
+		}
+		
+		private void OnItemRatingActivated(object o, EventArgs args)
+        {
+            rating = Convert.ToUInt32((o as Widget).Name);
+            EventHandler handler = Activated;
+            if(handler != null) {
+                handler(this, new EventArgs());
+            }
+        }
+        
+        private void ShowHideItems() {
+            foreach (MenuItem child in this.Children) {
+                if (rating.ToString() == child.Name) {
+                    child.Sensitive = false;
+                } else {
+                    child.Sensitive = true;
+                }    
+            }
+        }
+
+        public uint Value {
+            get {
+                ShowHideItems();
+                return rating; 
+            }
+            set { 
+                rating = value;
+                ShowHideItems();
+            }
+        }
+
+	}
+}
