Index: class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs	(revision 105189)
+++ class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs	(working copy)
@@ -38,6 +38,28 @@
 		private const string BUTTON = "BUTTON";
 		private const string CLOCK = "CLOCK";
 		private const string COMBOBOX = "COMBOBOX";
+		#region DATEPICKER
+		const string DATEPICKER = "DATEPICKER";
+		enum DATEPICKERPARTS
+		{
+			DP_DATEBORDER = 2,
+			DP_SHOWCALENDARBUTTONRIGHT
+		}
+		enum DATEBORDERSTATES
+		{
+			DPDB_NORMAL = 1,
+			DPDB_HOT,
+			DPDB_FOCUSED,
+			DPDB_DISABLED
+		}
+		enum SHOWCALENDARBUTTONRIGHTSTATES
+		{
+			DPSCBR_NORMAL = 1,
+			DPSCBR_HOT,
+			DPSCBR_PRESSED,
+			DPSCBR_DISABLED
+		}
+		#endregion
 		private const string EDIT = "EDIT";
 		private const string EXPLORERBAR = "EXPLORERBAR";
 		private const string HEADER = "HEADER";
@@ -163,6 +185,81 @@
 			}
 		}
 		#endregion
+		#region DatePicker
+		internal static class DatePicker
+		{
+			public static class DateBorder
+			{
+				public static VisualStyleElement Normal {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_DATEBORDER,
+							(int)DATEBORDERSTATES.DPDB_NORMAL);
+					}
+				}
+				public static VisualStyleElement Hot {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_DATEBORDER,
+							(int)DATEBORDERSTATES.DPDB_HOT);
+					}
+				}
+				public static VisualStyleElement Focused {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_DATEBORDER,
+							(int)DATEBORDERSTATES.DPDB_FOCUSED);
+					}
+				}
+				public static VisualStyleElement Disabled {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_DATEBORDER,
+							(int)DATEBORDERSTATES.DPDB_DISABLED);
+					}
+				}
+			}
+			public static class ShowCalendarButtonRight
+			{
+				public static VisualStyleElement Normal {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_SHOWCALENDARBUTTONRIGHT,
+							(int)SHOWCALENDARBUTTONRIGHTSTATES.DPSCBR_NORMAL);
+					}
+				}
+				public static VisualStyleElement Hot {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_SHOWCALENDARBUTTONRIGHT,
+							(int)SHOWCALENDARBUTTONRIGHTSTATES.DPSCBR_HOT);
+					}
+				}
+				public static VisualStyleElement Pressed {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_SHOWCALENDARBUTTONRIGHT,
+							(int)SHOWCALENDARBUTTONRIGHTSTATES.DPSCBR_PRESSED);
+					}
+				}
+				public static VisualStyleElement Disabled {
+					get {
+						return new VisualStyleElement (
+							DATEPICKER,
+							(int)DATEPICKERPARTS.DP_SHOWCALENDARBUTTONRIGHT,
+							(int)SHOWCALENDARBUTTONRIGHTSTATES.DPSCBR_DISABLED);
+					}
+				}
+			}
+		}
+		#endregion
 		#region ExplorerBar
 		public static class ExplorerBar
 		{
Index: class/Managed.Windows.Forms/System.Windows.Forms/DateTimePicker.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/DateTimePicker.cs	(revision 105189)
+++ class/Managed.Windows.Forms/System.Windows.Forms/DateTimePicker.cs	(working copy)
@@ -98,6 +98,7 @@
 		// variables for determining how to format the string
 		internal PartData[]					part_data;
 
+		bool drop_down_button_entered;
 		#endregion	// Local variables
 		
 		#region DateTimePickerAccessibleObject Subclass
@@ -194,6 +195,9 @@
 			LostFocus += new EventHandler (LostFocusHandler);
 			MouseDown += new MouseEventHandler (MouseDownHandler);			
 			MouseUp += new MouseEventHandler (MouseUpHandler);
+			MouseEnter += new EventHandler (OnMouseEnter);
+			MouseLeave += new EventHandler (OnMouseLeave);
+			MouseMove += new MouseEventHandler (OnMouseMove);
 			Paint += new PaintEventHandler (PaintHandler);
 			Resize += new EventHandler (ResizeHandler);
 			SetStyle (ControlStyles.UserPaint | ControlStyles.StandardClick, false);
@@ -949,26 +953,7 @@
 		// this is the region that the date and the check box is drawn on
 		internal Rectangle date_area_rect {
 			get {
-				Rectangle rect = this.ClientRectangle;
-				if (ShowUpDown) {
-					// set the space to the left of the up/down button
-					if (rect.Width > (up_down_width + 4)) {
-						rect.Width -= (up_down_width + 4);
-					} else {
-						rect.Width = 0;
-					}
-				} else {
-					// set the space to the left of the up/down button
-					// TODO make this use up down button
-					if (rect.Width > (SystemInformation.VerticalScrollBarWidth + 4)) {
-						rect.Width -= SystemInformation.VerticalScrollBarWidth;
-					} else {
-						rect.Width = 0;
-					}
-				}
-				
-				rect.Inflate (-2, -2);
-				return rect;
+				return ThemeEngine.Current.DateTimePickerGetDateArea (this);
 			}
 		}
 
@@ -983,16 +968,7 @@
 		// the rectangle for the drop down arrow
 		internal Rectangle drop_down_arrow_rect {
 			get {
-				Rectangle rect = this.ClientRectangle;
-				rect.X = rect.Right - SystemInformation.VerticalScrollBarWidth - 2;
-				if (rect.Width > (SystemInformation.VerticalScrollBarWidth + 2)) {
-					rect.Width = SystemInformation.VerticalScrollBarWidth;
-				} else {
-					rect.Width = Math.Max (rect.Width - 2, 0);
-				}
-				
-				rect.Inflate (0, -2);
-				return rect;
+				return ThemeEngine.Current.DateTimePickerGetDropDownButtonArea (this);
 			}
 		}
 		
@@ -1003,6 +979,10 @@
 				return Rectangle.Empty;
 			}
 		}	
+
+		internal bool DropDownButtonEntered {
+			get { return drop_down_button_entered; }
+		}
 			
 		#endregion
 		
@@ -1786,6 +1766,28 @@
 			Draw (pe.ClipRectangle, pe.Graphics);
 		}
 		
+		void OnMouseEnter (object sender, EventArgs e)
+		{
+			if (ThemeEngine.Current.DateTimePickerBorderHasHotElementStyle)
+				Invalidate ();
+		}
+
+		void OnMouseLeave (object sender, EventArgs e)
+		{
+			drop_down_button_entered = false;
+			if (ThemeEngine.Current.DateTimePickerBorderHasHotElementStyle)
+				Invalidate ();
+		}
+
+		void OnMouseMove (object sender, MouseEventArgs e)
+		{
+			if (!is_drop_down_visible &&
+				ThemeEngine.Current.DateTimePickerDropDownButtonHasHotElementStyle &&
+				drop_down_button_entered != drop_down_arrow_rect.Contains (e.Location)) {
+				drop_down_button_entered = !drop_down_button_entered;
+				Invalidate (drop_down_arrow_rect);
+			}
+		}
 		#endregion		
 
 		#region internal classes
Index: class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(revision 105189)
+++ class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(working copy)
@@ -805,9 +805,11 @@
 #endif
 
 		#region DateTimePicker
-
 		public abstract void DrawDateTimePicker(Graphics dc, Rectangle clip_rectangle, DateTimePicker dtp);
-
+		public abstract bool DateTimePickerBorderHasHotElementStyle { get; }
+		public abstract Rectangle DateTimePickerGetDropDownButtonArea (DateTimePicker dateTimePicker);
+		public abstract Rectangle DateTimePickerGetDateArea (DateTimePicker dateTimePicker);
+		public abstract bool DateTimePickerDropDownButtonHasHotElementStyle { get; }
 		#endregion 	// DateTimePicker
 
 		#region GroupBox
Index: class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(revision 105189)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(working copy)
@@ -2209,7 +2209,21 @@
 #endif
 
 		#region DateTimePicker
+		protected virtual void DateTimePickerDrawBorder (DateTimePicker dateTimePicker, Graphics g, Rectangle clippingArea)
+		{
+			this.CPDrawBorder3D (g, dateTimePicker.ClientRectangle, Border3DStyle.Sunken, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, dateTimePicker.BackColor);
+		}
 
+		protected virtual void DateTimePickerDrawDropDownButton (DateTimePicker dateTimePicker, Graphics g, Rectangle clippingArea)
+		{
+			ButtonState state = dateTimePicker.is_drop_down_visible ? ButtonState.Pushed : ButtonState.Normal;
+			g.FillRectangle (ResPool.GetSolidBrush (ColorControl), dateTimePicker.drop_down_arrow_rect);
+			this.CPDrawComboButton ( 
+			  g, 
+			  dateTimePicker.drop_down_arrow_rect, 
+			  state);
+		}
+
 		public override void DrawDateTimePicker(Graphics dc, Rectangle clip_rectangle, DateTimePicker dtp)
 		{
 
@@ -2218,18 +2232,13 @@
 
 			// draw the outer border
 			Rectangle button_bounds = dtp.ClientRectangle;
-			this.CPDrawBorder3D (dc, button_bounds, Border3DStyle.Sunken, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, dtp.BackColor);
+			DateTimePickerDrawBorder (dtp, dc, clip_rectangle);
 
 			// deflate by the border width
 			if (clip_rectangle.IntersectsWith (dtp.drop_down_arrow_rect)) {
 				button_bounds.Inflate (-2,-2);
 				if (!dtp.ShowUpDown) {
-					ButtonState state = dtp.is_drop_down_visible ? ButtonState.Pushed : ButtonState.Normal;
-					dc.FillRectangle (ResPool.GetSolidBrush (ColorControl), dtp.drop_down_arrow_rect);
-					this.CPDrawComboButton ( 
-					  dc, 
-					  dtp.drop_down_arrow_rect, 
-					  state);
+					DateTimePickerDrawDropDownButton (dtp, dc, clip_rectangle);
 				} else {
 					ButtonState up_state = dtp.is_up_pressed ? ButtonState.Pushed : ButtonState.Normal;
 					ButtonState down_state = dtp.is_down_pressed ? ButtonState.Pushed : ButtonState.Normal;
@@ -2352,7 +2361,55 @@
 				}
 			}
 		}
-		
+
+		public override bool DateTimePickerBorderHasHotElementStyle {
+			get {
+				return false;
+			}
+		}
+
+		public override Rectangle DateTimePickerGetDropDownButtonArea (DateTimePicker dateTimePicker)
+		{
+			Rectangle rect = dateTimePicker.ClientRectangle;
+			rect.X = rect.Right - SystemInformation.VerticalScrollBarWidth - 2;
+			if (rect.Width > (SystemInformation.VerticalScrollBarWidth + 2)) {
+				rect.Width = SystemInformation.VerticalScrollBarWidth;
+			} else {
+				rect.Width = Math.Max (rect.Width - 2, 0);
+			}
+			
+			rect.Inflate (0, -2);
+			return rect;
+		}
+
+		public override Rectangle DateTimePickerGetDateArea (DateTimePicker dateTimePicker)
+		{
+			Rectangle rect = dateTimePicker.ClientRectangle;
+			if (dateTimePicker.ShowUpDown) {
+				// set the space to the left of the up/down button
+				if (rect.Width > (DateTimePicker.up_down_width + 4)) {
+					rect.Width -= (DateTimePicker.up_down_width + 4);
+				} else {
+					rect.Width = 0;
+				}
+			} else {
+				// set the space to the left of the up/down button
+				// TODO make this use up down button
+				if (rect.Width > (SystemInformation.VerticalScrollBarWidth + 4)) {
+					rect.Width -= SystemInformation.VerticalScrollBarWidth;
+				} else {
+					rect.Width = 0;
+				}
+			}
+			
+			rect.Inflate (-2, -2);
+			return rect;
+		}
+		public override bool DateTimePickerDropDownButtonHasHotElementStyle {
+			get {
+				return false;
+			}
+		}
 		#endregion // DateTimePicker
 
 		#region GroupBox
