Index: class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs	(revision 104201)
+++ class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs	(working copy)
@@ -34,6 +34,7 @@
 	class VisualStyleElement
 	{
 		#region Private Variables
+		#region Class name/part/state constants
 		private const string BUTTON = "BUTTON";
 		private const string CLOCK = "CLOCK";
 		private const string COMBOBOX = "COMBOBOX";
@@ -46,7 +47,20 @@
 		private const string PAGE = "PAGE";
 		private const string PROGRESS = "PROGRESS";
 		private const string REBAR = "REBAR";
+		#region SCROLLBAR
 		private const string SCROLLBAR = "SCROLLBAR";
+		enum SCROLLBARPARTS
+		{
+			SBP_ARROWBTN = 1
+		}
+		enum ARROWBTNSTATES
+		{
+			ABS_UPHOVER = 17,
+			ABS_DOWNHOVER = 18,
+			ABS_LEFTHOVER = 19,
+			ABS_RIGHTHOVER = 20,
+		}
+		#endregion
 		private const string SPIN = "SPIN";
 		private const string STARTPANEL = "STARTPANEL";
 		private const string STATUS = "STATUS";
@@ -59,6 +73,7 @@
 		private const string TRAYNOTIFY = "TRAYNOTIFY";
 		private const string TREEVIEW = "TREEVIEW";
 		private const string WINDOW = "WINDOW";
+		#endregion
 
 		private string class_name;
 		private int part;
@@ -428,6 +443,38 @@
 				public static VisualStyleElement UpHot { get { return VisualStyleElement.CreateElement (VisualStyleElement.SCROLLBAR, 1, 2); } }
 				public static VisualStyleElement UpNormal { get { return VisualStyleElement.CreateElement (VisualStyleElement.SCROLLBAR, 1, 1); } }
 				public static VisualStyleElement UpPressed { get { return VisualStyleElement.CreateElement (VisualStyleElement.SCROLLBAR, 1, 3); } }
+				internal static VisualStyleElement DownHover {
+					get {
+						return new VisualStyleElement (
+							SCROLLBAR,
+							(int)SCROLLBARPARTS.SBP_ARROWBTN,
+							(int)ARROWBTNSTATES.ABS_DOWNHOVER);
+					}
+				}
+				internal static VisualStyleElement LeftHover {
+					get {
+						return new VisualStyleElement (
+							SCROLLBAR,
+							(int)SCROLLBARPARTS.SBP_ARROWBTN,
+							(int)ARROWBTNSTATES.ABS_LEFTHOVER);
+					}
+				}
+				internal static VisualStyleElement RightHover {
+					get {
+						return new VisualStyleElement (
+							SCROLLBAR,
+							(int)SCROLLBARPARTS.SBP_ARROWBTN,
+							(int)ARROWBTNSTATES.ABS_RIGHTHOVER);
+					}
+				}
+				internal static VisualStyleElement UpHover {
+					get {
+						return new VisualStyleElement (
+							SCROLLBAR,
+							(int)SCROLLBARPARTS.SBP_ARROWBTN,
+							(int)ARROWBTNSTATES.ABS_UPHOVER);
+					}
+				}
 			}
 			public static class GripperHorizontal
 			{
Index: class/Managed.Windows.Forms/System.Windows.Forms/ScrollBar.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ScrollBar.cs	(revision 104201)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ScrollBar.cs	(working copy)
@@ -237,6 +237,7 @@
 			small_change = 1;
 
 			timer.Tick += new EventHandler (OnTimer);
+			MouseEnter += new EventHandler (OnMouseEnter);
 			MouseLeave += new EventHandler (OnMouseLeave);
 			base.KeyDown += new KeyEventHandler (OnKeyDownSB);
 			base.MouseDown += new MouseEventHandler (OnMouseDownSB);
@@ -1486,11 +1487,44 @@
 			dirty = Rectangle.Empty;
 		}
 
+		void OnMouseEnter (object sender, EventArgs e)
+		{
+			if (ThemeEngine.Current.ScrollBarHasHoverArrowButtonStyle) {
+				Region region_to_invalidate = new Region (first_arrow_area);
+				region_to_invalidate.Union (second_arrow_area);
+				Invalidate (region_to_invalidate);
+			}
+		}
+
 		void OnMouseLeave (object sender, EventArgs e)
 		{
-			FirstButtonEntered = false;
-			SecondButtonEntered = false;
-			ThumbEntered = false;
+			Region region_to_invalidate = new Region ();
+			region_to_invalidate.MakeEmpty ();
+			bool dirty = false;
+			if (ThemeEngine.Current.ScrollBarHasHoverArrowButtonStyle) {
+				region_to_invalidate.Union (first_arrow_area);
+				region_to_invalidate.Union (second_arrow_area);
+				dirty = true;
+			} else
+				if (ThemeEngine.Current.ScrollBarHasHotElementStyles)
+					if (first_button_entered) {
+						region_to_invalidate.Union (first_arrow_area);
+						dirty = true;
+					} else if (second_button_entered) {
+						region_to_invalidate.Union (second_arrow_area);
+						dirty = true;
+					}
+			if (ThemeEngine.Current.ScrollBarHasHotElementStyles)
+				if (thumb_entered) {
+					region_to_invalidate.Union (thumb_pos);
+					dirty = true;
+				}
+			first_button_entered = false;
+			second_button_entered = false;
+			thumb_entered = false;
+			if (dirty)
+				Invalidate (region_to_invalidate);
+			region_to_invalidate.Dispose ();
 		}
 		#endregion //Private Methods
 #if NET_2_0
Index: class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(revision 104201)
+++ class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(working copy)
@@ -893,6 +893,8 @@
 		public abstract bool ScrollBarHasHotElementStyles { get; }
 
 		public abstract bool ScrollBarHasPressedThumbStyle { get; }
+
+		public abstract bool ScrollBarHasHoverArrowButtonStyle { get; }
 		#endregion	// ScrollBar
 
 		#region StatusBar
Index: class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(revision 104201)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(working copy)
@@ -4511,6 +4511,12 @@
 				return false;
 			}
 		}
+
+		public override bool ScrollBarHasHoverArrowButtonStyle {
+			get {
+				return false;
+			}
+		}
 		#endregion	// ScrollBar
 
 		#region StatusBar
