Index: uspace/srv/hid/rfb/main.c
===================================================================
--- uspace/srv/hid/rfb/main.c	(revision e1f2079eea6e0ce553d66ced5b7ca0b64e0b4929)
+++ uspace/srv/hid/rfb/main.c	(revision b3b00b6e8d1f9ba532a8f595d974b4eaa1d16913)
@@ -72,4 +72,6 @@
 	gfx_bitmap_alloc_t alloc;
 	gfx_rect_t rect;
+	gfx_bitmap_flags_t flags;
+	pixel_t key_color;
 	bool myalloc;
 } rfb_bitmap_t;
@@ -199,4 +201,6 @@
 	gfx_coord2_subtract(&params->rect.p1, &params->rect.p0, &dim);
 	rfbbm->rect = params->rect;
+	rfbbm->flags = params->flags;
+	rfbbm->key_color = params->key_color;
 
 	if (alloc == NULL) {
@@ -278,9 +282,21 @@
 	pbm.data = rfbbm->alloc.pixels;
 
-	for (y = srect.p0.y; y < srect.p1.y; y++) {
-		for (x = srect.p0.x; x < srect.p1.x; x++) {
-			color = pixelmap_get_pixel(&pbm, x, y);
-			pixelmap_put_pixel(&rfbbm->rfb->rfb.framebuffer,
-			    x + offs.x, y + offs.y, color);
+	if ((rfbbm->flags & bmpf_color_key) == 0) {
+		for (y = srect.p0.y; y < srect.p1.y; y++) {
+			for (x = srect.p0.x; x < srect.p1.x; x++) {
+				color = pixelmap_get_pixel(&pbm, x, y);
+				pixelmap_put_pixel(&rfbbm->rfb->rfb.framebuffer,
+				    x + offs.x, y + offs.y, color);
+			}
+		}
+	} else {
+		for (y = srect.p0.y; y < srect.p1.y; y++) {
+			for (x = srect.p0.x; x < srect.p1.x; x++) {
+				color = pixelmap_get_pixel(&pbm, x, y);
+				if (color != rfbbm->key_color) {
+					pixelmap_put_pixel(&rfbbm->rfb->rfb.framebuffer,
+					    x + offs.x, y + offs.y, color);
+				}
+			}
 		}
 	}
