Index: uspace/lib/congfx/src/console.c
===================================================================
--- uspace/lib/congfx/src/console.c	(revision afcf7049d7f35c862988f3e47d752144e2c6aaac)
+++ uspace/lib/congfx/src/console.c	(revision de9992c5dcfe392011d18f6d641c7151c514607a)
@@ -207,5 +207,5 @@
 
 	/* Check that we support all requested flags */
-	if ((params->flags & ~bmpf_color_key) != 0)
+	if ((params->flags & ~(bmpf_color_key | bmpf_colorize)) != 0)
 		return ENOTSUP;
 
@@ -296,4 +296,5 @@
 
 	if ((cbm->flags & bmpf_color_key) == 0) {
+		/* Simple copy */
 		for (y = crect.p0.y; y < crect.p1.y; y++) {
 			console_set_pos(cbm->cgc->con, crect.p0.x, y);
@@ -312,5 +313,6 @@
 			}
 		}
-	} else {
+	} else if ((cbm->flags & bmpf_colorize) == 0) {
+		/* Color key */
 		for (y = crect.p0.y; y < crect.p1.y; y++) {
 			for (x = crect.p0.x; x < crect.p1.x; x++) {
@@ -332,4 +334,27 @@
 			}
 		}
+	} else {
+		/* Color key & colorize */
+		console_set_rgb_color(cbm->cgc->con, cbm->cgc->clr,
+		    cbm->cgc->clr);
+
+		for (y = crect.p0.y; y < crect.p1.y; y++) {
+			for (x = crect.p0.x; x < crect.p1.x; x++) {
+
+				clr = pixelmap_get_pixel(&pixelmap,
+				    x - offs.x - cbm->rect.p0.x,
+				    y - offs.y - cbm->rect.p0.y);
+
+				if (clr != cbm->key_color) {
+					console_set_pos(cbm->cgc->con, x, y);
+					rv = fputc('X', cbm->cgc->fout);
+					if (rv < 0)
+						return EIO;
+
+					console_flush(cbm->cgc->con);
+				}
+
+			}
+		}
 	}
 
