Index: class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(revision 103581)
+++ class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(working copy)
@@ -960,7 +960,8 @@
 		#endregion	// TrackBar
 
 		#region UpDownBase
-		public abstract void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, bool pressed);
+		public abstract void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, VisualStyles.PushButtonState state);
+		public abstract bool UpDownBaseHasHotButtonStyle { get; }
 		#endregion
 
 		#region VScrollBar
Index: class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(revision 103581)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(working copy)
@@ -5734,10 +5734,16 @@
 		#endregion	// TrackBar
 
 		#region UpDownBase
-		public override void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, bool pressed)
+		public override void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, VisualStyles.PushButtonState state)
 		{
-			ControlPaint.DrawScrollButton (g, bounds, top ? ScrollButton.Up : ScrollButton.Down, pressed ? ButtonState.Pushed : ButtonState.Normal);
+			ControlPaint.DrawScrollButton (g, bounds, top ? ScrollButton.Up : ScrollButton.Down, state == VisualStyles.PushButtonState.Pressed ? ButtonState.Pushed : ButtonState.Normal);
 		}
+
+		public override bool UpDownBaseHasHotButtonStyle {
+			get {
+				return false;
+			}
+		}
 		#endregion
 
 		#region	VScrollBar
Index: class/Managed.Windows.Forms/System.Windows.Forms/UpDownBase.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/UpDownBase.cs	(revision 103581)
+++ class/Managed.Windows.Forms/System.Windows.Forms/UpDownBase.cs	(working copy)
@@ -54,6 +54,8 @@
 			private int		mouse_y;
 			private int		repeat_delay;
 			private int		repeat_counter;
+			bool top_button_entered;
+			bool bottom_button_entered;
 			#endregion	// Local Variables
 
 			#region Constructors
@@ -96,19 +98,28 @@
 
 			private void redraw (Graphics graphics)
 			{
-				bool top_button_pressed = false;
-				bool bottom_button_pressed = false;
+				VisualStyles.PushButtonState top_button_state = VisualStyles.PushButtonState.Normal;
+				VisualStyles.PushButtonState bottom_button_state = VisualStyles.PushButtonState.Normal;
 
+				if (owner.Enabled) {
+					if (mouse_pressed != 0) {
+						if (mouse_pressed == 1 && top_button_rect.Contains(mouse_x, mouse_y))
+							top_button_state = VisualStyles.PushButtonState.Pressed;
 
-				if (mouse_pressed != 0) {
-					if (mouse_pressed == 1 && top_button_rect.Contains(mouse_x, mouse_y))
-						top_button_pressed = true;
-
-					if (mouse_pressed == 2 && bottom_button_rect.Contains(mouse_x, mouse_y))
-						bottom_button_pressed = true;
+						if (mouse_pressed == 2 && bottom_button_rect.Contains(mouse_x, mouse_y))
+							bottom_button_state = VisualStyles.PushButtonState.Pressed;
+					} else {
+						if (top_button_entered)
+							top_button_state = VisualStyles.PushButtonState.Hot;
+						if (bottom_button_entered)
+							bottom_button_state = VisualStyles.PushButtonState.Hot;
+					}
+				} else {
+					top_button_state = VisualStyles.PushButtonState.Disabled;
+					bottom_button_state = VisualStyles.PushButtonState.Disabled;
 				}
-				ThemeEngine.Current.UpDownBaseDrawButton (graphics, top_button_rect, true, top_button_pressed);
-				ThemeEngine.Current.UpDownBaseDrawButton (graphics, bottom_button_rect, false, bottom_button_pressed);
+				ThemeEngine.Current.UpDownBaseDrawButton (graphics, top_button_rect, true, top_button_state);
+				ThemeEngine.Current.UpDownBaseDrawButton (graphics, bottom_button_rect, false, bottom_button_state);
 			}
 
 			private void tmrRepeat_Tick (object sender, EventArgs e)
@@ -183,6 +194,9 @@
 				if ((mouse_pressed == 2) && bottom_button_rect.Contains(mouse_x, mouse_y))
 					after = ButtonState.Pushed;
 
+				bool new_top_button_entered = top_button_rect.Contains (e.Location);
+				bool new_bottom_button_entered = bottom_button_rect.Contains (e.Location);
+				
 				if (before != after) {
 					if (after == ButtonState.Pushed) {
 						tmrRepeat.Enabled = true;
@@ -198,7 +212,32 @@
 					else
 						tmrRepeat.Enabled = false;
 
+					top_button_entered = new_top_button_entered;
+					bottom_button_entered = new_bottom_button_entered;
+
 					Refresh ();
+				} else {
+					if (ThemeEngine.Current.UpDownBaseHasHotButtonStyle) {
+						Region area_to_invalidate = new Region ();
+						bool dirty = false;
+						area_to_invalidate.MakeEmpty ();
+						if (top_button_entered != new_top_button_entered) {
+							top_button_entered = new_top_button_entered;
+							area_to_invalidate.Union (top_button_rect);
+							dirty = true;
+						}
+						if (bottom_button_entered != new_bottom_button_entered) {
+							bottom_button_entered = new_bottom_button_entered;
+							area_to_invalidate.Union (bottom_button_rect);
+							dirty = true;
+						}
+						if (dirty)
+							Invalidate (area_to_invalidate);
+						area_to_invalidate.Dispose ();
+					} else {
+						top_button_entered = new_top_button_entered;
+						bottom_button_entered = new_bottom_button_entered;
+					}
 				}
 			}
 
@@ -218,6 +257,20 @@
 					owner.DownButton();
 			}
 
+			protected override void OnMouseLeave (EventArgs e)
+			{
+				if (top_button_entered) {
+					top_button_entered = false;
+					if (ThemeEngine.Current.UpDownBaseHasHotButtonStyle)
+						Invalidate (top_button_rect);
+				}
+				if (bottom_button_entered) {
+					bottom_button_entered = false;
+					if (ThemeEngine.Current.UpDownBaseHasHotButtonStyle)
+						Invalidate (bottom_button_rect);
+				}
+			}
+
 			protected override void OnPaint(PaintEventArgs e)
 			{
 				redraw(e.Graphics);
