diff --git a/modules/engines/ms-windows/xp_theme.c b/modules/engines/ms-windows/xp_theme.c
index 3d11935..720904e 100755
--- a/modules/engines/ms-windows/xp_theme.c
+++ b/modules/engines/ms-windows/xp_theme.c
@@ -860,6 +860,7 @@ xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
   HDC dc;
   GdkDrawable *drawable;
   int part_state;
+  GdkRegion* clip_region = NULL;
 
   if (!xp_theme_is_drawable (element))
     return FALSE;
@@ -880,6 +881,8 @@ xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
   else
     {
       gdk_window_get_internal_paint_info (win, &drawable, &xoff, &yoff);
+      clip_region = gdk_drawable_get_clip_region(win);
+
     }
 
   rect.left = x - xoff;
@@ -901,8 +904,9 @@ xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
       pClip = NULL;
     }
 
-  gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
-  dc = gdk_win32_hdc_get (drawable, style->dark_gc[state_type], 0);
+  gdk_gc_set_clip_region (style->dark_gc[state_type], clip_region);
+
+  dc = gdk_win32_hdc_get (drawable, style->dark_gc[state_type], GDK_GC_CLIP_MASK);
   if (!dc)
     return FALSE;
 
@@ -913,6 +917,8 @@ xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
 
   gdk_win32_hdc_release (drawable, style->dark_gc[state_type], 0);
 
+  gdk_gc_set_clip_region(style->dark_gc[state_type], NULL);
+
   return TRUE;
 }
 
@@ -920,7 +926,7 @@ gboolean
 xp_theme_is_active (void)
 {
   /* Workaround for bug #598299 */
-  return FALSE;
+  //return FALSE;
 
   return use_xp_theme;
 }
