Index: class/Managed.Windows.Forms/System.Windows.Forms/InternalWindowManager.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/InternalWindowManager.cs	(revision 105133)
+++ class/Managed.Windows.Forms/System.Windows.Forms/InternalWindowManager.cs	(working copy)
@@ -422,10 +422,29 @@
 
 		public bool IconRectangleContains (int x, int y)
 		{
+			if (!ShowIcon)
+				return false;
+
 			Rectangle icon = ThemeEngine.Current.ManagedWindowGetTitleBarIconArea (this);
 			return icon.Contains (x, y);
 		}
 
+		public bool ShowIcon {
+			get {
+#if NET_2_0
+				if (!Form.ShowIcon)
+					return false;
+#endif
+				if (!HasBorders)
+					return false;
+				if (IsMinimized)
+					return true;
+				if (IsToolWindow || Form.FormBorderStyle == FormBorderStyle.FixedDialog)
+					return false;
+				return true;
+			}
+		}
+
 		protected virtual void Activate ()
 		{
 			form.Refresh ();
Index: class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(revision 105133)
+++ class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs	(working copy)
@@ -6078,13 +6078,7 @@
 						tb, format);
 			}
 
-			bool draw_icon = false;
-#if NET_2_0
-			draw_icon = !wm.IsToolWindow && form.ShowIcon;
-#else
-			draw_icon = !wm.IsToolWindow;
-#endif
-			if (draw_icon) {
+			if (wm.ShowIcon) {
 				Rectangle icon = ManagedWindowGetTitleBarIconArea (wm);
 				if (icon.IntersectsWith (clip))
 					dc.DrawIcon (form.Icon, icon);
