Index: uspace/lib/memgfx/src/memgc.c
===================================================================
--- uspace/lib/memgfx/src/memgc.c	(revision 5271e4ce7c269901a92de4f2e7b3ed4926eec5f2)
+++ uspace/lib/memgfx/src/memgc.c	(revision 8ef48ece717476a9d162affd18ffa54f6f946249)
@@ -225,5 +225,6 @@
 
 	/* Check that we support all requested flags */
-	if ((params->flags & ~(bmpf_color_key | bmpf_direct_output)) != 0)
+	if ((params->flags & ~(bmpf_color_key | bmpf_colorize |
+	    bmpf_direct_output)) != 0)
 		return ENOTSUP;
 
@@ -367,4 +368,5 @@
 		/* Nothing to do */
 	} else if ((mbm->flags & bmpf_color_key) == 0) {
+		/* Simple copy */
 		for (y = drect.p0.y; y < drect.p1.y; y++) {
 			for (x = drect.p0.x; x < drect.p1.x; x++) {
@@ -375,5 +377,6 @@
 			}
 		}
-	} else {
+	} else if ((mbm->flags & bmpf_colorize) == 0) {
+		/* Color key */
 		for (y = drect.p0.y; y < drect.p1.y; y++) {
 			for (x = drect.p0.x; x < drect.p1.x; x++) {
@@ -385,4 +388,16 @@
 			}
 		}
+	} else {
+		/* Color key & colorization */
+		for (y = drect.p0.y; y < drect.p1.y; y++) {
+			for (x = drect.p0.x; x < drect.p1.x; x++) {
+				pixel = pixelmap_get_pixel(&smap,
+				    x - mbm->rect.p0.x - offs.x,
+				    y - mbm->rect.p0.y - offs.y);
+				if (pixel != mbm->key_color)
+					pixelmap_put_pixel(&dmap, x, y,
+					    mbm->mgc->color);
+			}
+		}
 	}
 
