Index: uspace/srv/hid/display/ddev.c
===================================================================
--- uspace/srv/hid/display/ddev.c	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/ddev.c	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -94,4 +94,8 @@
 	ds_display_add_ddev(display, ddev);
 
+	rc = ds_display_paint_bg(display, NULL);
+	if (rc != EOK)
+		return rc;
+
 	*rddev = ddev;
 	return EOK;
Index: uspace/srv/hid/display/display.c
===================================================================
--- uspace/srv/hid/display/display.c	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/display.c	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -36,4 +36,5 @@
 #include <errno.h>
 #include <gfx/context.h>
+#include <gfx/render.h>
 #include <io/log.h>
 #include <stdlib.h>
@@ -52,8 +53,15 @@
 {
 	ds_display_t *disp;
+	errno_t rc;
 
 	disp = calloc(1, sizeof(ds_display_t));
 	if (disp == NULL)
 		return ENOMEM;
+
+	rc = gfx_color_new_rgb_i16(0x8000, 0xc800, 0xffff, &disp->bg_color);
+	if (rc != EOK) {
+		free(disp);
+		return ENOMEM;
+	}
 
 	list_initialize(&disp->clients);
@@ -74,4 +82,5 @@
 	assert(list_empty(&disp->clients));
 	assert(list_empty(&disp->seats));
+	gfx_color_delete(disp->bg_color);
 	free(disp);
 }
@@ -401,4 +410,35 @@
 }
 
+/** Paint display background.
+ *
+ * @param display Display
+ * @param rect Bounding rectangle or @c NULL to repaint entire display
+ */
+errno_t ds_display_paint_bg(ds_display_t *disp, gfx_rect_t *rect)
+{
+	gfx_rect_t dsrect;
+	gfx_rect_t crect;
+	gfx_context_t *gc;
+	errno_t rc;
+
+	dsrect.p0.x = 0;
+	dsrect.p0.y = 0;
+	dsrect.p1.x = 1024;
+	dsrect.p1.y = 768;
+
+	if (rect != NULL)
+		gfx_rect_clip(&dsrect, rect, &crect);
+	else
+		crect = dsrect;
+
+	gc = ds_display_get_gc(disp); // XXX
+
+	rc = gfx_set_color(gc, disp->bg_color);
+	if (rc != EOK)
+		return rc;
+
+	return gfx_fill_rect(gc, &crect);
+}
+
 /** @}
  */
Index: uspace/srv/hid/display/display.h
===================================================================
--- uspace/srv/hid/display/display.h	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/display.h	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -39,4 +39,5 @@
 #include <errno.h>
 #include <gfx/context.h>
+#include <gfx/coord.h>
 #include <io/kbd_event.h>
 #include "types/display/client.h"
@@ -69,4 +70,5 @@
 extern ds_ddev_t *ds_display_next_ddev(ds_ddev_t *);
 extern gfx_context_t *ds_display_get_gc(ds_display_t *);
+extern errno_t ds_display_paint_bg(ds_display_t *, gfx_rect_t *);
 
 #endif
Index: uspace/srv/hid/display/seat.c
===================================================================
--- uspace/srv/hid/display/seat.c	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/seat.c	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -139,12 +139,11 @@
  * @param len Cross length
  * @param w Cross extra width
- * @param br Brightness (0 to 65535)
+ * @param color Color
  *
  * @return EOK on success or an error code
  */
 static errno_t ds_seat_draw_cross(ds_seat_t *seat, gfx_coord_t len,
-    gfx_coord_t w, uint16_t br)
-{
-	gfx_color_t *color = NULL;
+    gfx_coord_t w, gfx_color_t *color)
+{
 	gfx_context_t *gc;
 	gfx_rect_t rect, r0;
@@ -154,8 +153,4 @@
 	if (gc == NULL)
 		return EOK;
-
-	rc = gfx_color_new_rgb_i16(br, br, br, &color);
-	if (rc != EOK)
-		goto error;
 
 	rc = gfx_set_color(gc, color);
@@ -183,9 +178,6 @@
 		goto error;
 
-	gfx_color_delete(color);
 	return EOK;
 error:
-	if (color != NULL)
-		gfx_color_delete(color);
 	return rc;
 }
@@ -201,14 +193,30 @@
 {
 	errno_t rc;
-
-	rc = ds_seat_draw_cross(seat, 8, 1, 0);
+	gfx_color_t *black = NULL;
+	gfx_color_t *white;
+
+	rc = gfx_color_new_rgb_i16(0, 0, 0, &black);
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &white);
+	if (rc != EOK)
+		goto error;
+
+	rc = ds_seat_draw_cross(seat, 8, 1, shown ? black :
+	    seat->display->bg_color);
 	if (rc != EOK)
 		return rc;
 
-	rc = ds_seat_draw_cross(seat, 8, 0, shown ? 65535 : 0);
+	rc = ds_seat_draw_cross(seat, 8, 0, shown ? white :
+	    seat->display->bg_color);
 	if (rc != EOK)
 		return rc;
 
 	return EOK;
+error:
+	if (black != NULL)
+		gfx_color_delete(black);
+	return rc;
 }
 
Index: uspace/srv/hid/display/types/display/display.h
===================================================================
--- uspace/srv/hid/display/types/display/display.h	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/types/display/display.h	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -38,4 +38,5 @@
 
 #include <adt/list.h>
+#include <gfx/color.h>
 #include <io/input.h>
 #include "window.h"
@@ -65,4 +66,7 @@
 	/** Display devices (of ds_ddev_t) */
 	list_t ddevs;
+
+	/** Background color */
+	gfx_color_t *bg_color;
 } ds_display_t;
 
Index: uspace/srv/hid/display/window.c
===================================================================
--- uspace/srv/hid/display/window.c	(revision 946a6664e1498063d4e0b88a4020e290191684b2)
+++ uspace/srv/hid/display/window.c	(revision c79545edbb52f9f5ef2247e219415bf2a71c3b5d)
@@ -420,4 +420,12 @@
 	    (int) event->hpos, (int) event->vpos);
 
+	gfx_rect_translate(&wnd->dpos, &wnd->rect, &drect);
+
+	gc = ds_display_get_gc(wnd->display); // XXX
+	if (gc != NULL) {
+		gfx_set_color(gc, wnd->display->bg_color);
+		gfx_fill_rect(gc, &drect);
+	}
+
 	assert(wnd->state == dsw_moving);
 	pos.x = event->hpos;
@@ -428,4 +436,7 @@
 	gfx_rect_translate(&nwpos, &wnd->rect, &drect);
 
+	wnd->orig_pos = pos;
+	wnd->dpos = nwpos;
+
 	rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &color);
 	if (rc != EOK)
