diff --git a/gdk/gdkoffscreenwindow.c b/gdk/gdkoffscreenwindow.c
index 23d92af..facde43 100644
--- a/gdk/gdkoffscreenwindow.c
+++ b/gdk/gdkoffscreenwindow.c
@@ -260,6 +260,7 @@ add_damage (GdkOffscreenWindow *offscreen,
 	    int w, int h,
 	    gboolean is_line)
 {
+#if 0
   GdkRectangle rect;
   GdkRegion *damage;
 
@@ -291,6 +292,7 @@ add_damage (GdkOffscreenWindow *offscreen,
   damage = gdk_region_rectangle (&rect);
   _gdk_window_add_damage (offscreen->wrapper, damage);
   gdk_region_destroy (damage);
+#endif
 }
 
 static GdkDrawable *
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 00811f3..f68738c 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -5262,6 +5262,10 @@ _gdk_window_process_updates_recurse (GdkWindow *window,
       if (private->event_mask & GDK_EXPOSURE_MASK)
 	{
 	  GdkEvent event;
+          GdkRegion *offscreen_damage = NULL;
+
+          if (gdk_window_is_offscreen (private->impl_window))
+            offscreen_damage = gdk_region_copy (expose_region);
 
 	  event.expose.type = GDK_EXPOSE;
 	  event.expose.window = g_object_ref (window);
@@ -5272,6 +5276,15 @@ _gdk_window_process_updates_recurse (GdkWindow *window,
 
 	  (*_gdk_event_func) (&event, _gdk_event_data);
 
+          if (offscreen_damage)
+            {
+              gdk_region_offset (offscreen_damage,
+                                 private->abs_x, private->abs_y);
+              _gdk_window_add_damage ((GdkWindow *) private->impl_window,
+                                      offscreen_damage);
+              gdk_region_destroy (offscreen_damage);
+            }
+
 	  g_object_unref (window);
 	}
       else if (private->bg_pixmap != GDK_NO_BG &&
