Index: class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs	(revision 103696)
+++ class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs	(working copy)
@@ -1151,14 +1151,7 @@
 		{
 			Graphics dc = Graphics.FromImage (bitmap);
 
-			if (backcolor_set || (Enabled && !read_only)) {
-				dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (BackColor), targetBounds);
-			} else {
-				dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ThemeEngine.Current.ColorControl), targetBounds);
-			}
-			
-			// Draw the viewable document
-			document.Draw (dc, targetBounds);
+			Draw (dc, targetBounds);
 		}
 #endif
 
Index: class/Managed.Windows.Forms/System.Windows.Forms/TextBoxBase.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/TextBoxBase.cs	(revision 103696)
+++ class/Managed.Windows.Forms/System.Windows.Forms/TextBoxBase.cs	(working copy)
@@ -204,6 +204,12 @@
 				SetStyle (ControlStyles.StandardDoubleClick, false);
 		}
 
+		internal override void PaintControlBackground (PaintEventArgs pevent)
+		{
+			if (!ThemeEngine.Current.TextBoxBaseShouldPaintBackground (this))
+				return;
+			base.PaintControlBackground (pevent);
+		}
 		#endregion	// Private and Internal Methods
 
 		#region Public Instance Properties
@@ -1590,6 +1596,11 @@
 				document.CaretLostFocus ();
 				break;
 
+			case Msg.WM_NCPAINT:
+				if (!ThemeEngine.Current.TextBoxBaseHandleWmNcPaint (this, ref m))
+					base.WndProc(ref m);
+				break;
+
 			default:
 				base.WndProc(ref m);
 				return;
@@ -1758,15 +1769,7 @@
 
 		internal override void OnPaintInternal (PaintEventArgs pevent)
 		{
-			// Fill background
-			if (backcolor_set || (Enabled && !read_only)) {
-				pevent.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(BackColor), pevent.ClipRectangle);
-			} else {
-				pevent.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(ThemeEngine.Current.ColorControl), pevent.ClipRectangle);
-			}
-			
-			// Draw the viewable document
-			document.Draw(pevent.Graphics, pevent.ClipRectangle);
+			Draw (pevent.Graphics, pevent.ClipRectangle);
 
 			//
 			// OnPaint does not get raised on MS (see bug #80639)
@@ -1774,6 +1777,14 @@
 			pevent.Handled = true;
 		}
 
+		internal void Draw (Graphics g, Rectangle clippingArea)
+		{
+			ThemeEngine.Current.TextBoxBaseFillBackground (this, g, clippingArea);
+			
+			// Draw the viewable document
+			document.Draw(g, clippingArea);
+		}
+
 		private void FixupHeight ()
 		{
 			if (!richtext) {
Index: class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(revision 103696)
+++ class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs	(working copy)
@@ -922,6 +922,12 @@
 		public abstract void DrawTabControl (Graphics dc, Rectangle area, TabControl tab);
 		#endregion
 
+		#region TextBoxBase
+		public abstract void TextBoxBaseFillBackground (TextBoxBase textBoxBase, Graphics g, Rectangle clippingArea);
+		public abstract bool TextBoxBaseHandleWmNcPaint (TextBoxBase textBoxBase, ref Message m);
+		public abstract bool TextBoxBaseShouldPaintBackground (TextBoxBase textBoxBase);
+		#endregion
+
 		#region	ToolBar
 		// Drawing
 		public abstract void DrawToolBar (Graphics dc, Rectangle clip_rectangle, ToolBar control);
Index: class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(revision 103696)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(working copy)
@@ -4766,6 +4766,27 @@
 
 		#endregion
 
+		#region TextBox
+		public override void TextBoxBaseFillBackground (TextBoxBase textBoxBase, Graphics g, Rectangle clippingArea)
+		{
+			if (textBoxBase.backcolor_set || (textBoxBase.Enabled && !textBoxBase.read_only)) {
+				g.FillRectangle(ResPool.GetSolidBrush(textBoxBase.BackColor), clippingArea);
+			} else {
+				g.FillRectangle(ResPool.GetSolidBrush(ColorControl), clippingArea);
+			}
+		}
+
+		public override bool TextBoxBaseHandleWmNcPaint (TextBoxBase textBoxBase, ref Message m)
+		{
+			return false;
+		}
+
+		public override bool TextBoxBaseShouldPaintBackground (TextBoxBase textBoxBase)
+		{
+			return true;
+		}
+		#endregion
+
 		#region ToolBar
 		public  override void DrawToolBar (Graphics dc, Rectangle clip_rectangle, ToolBar control) 
 		{
