Index: uspace/app/gfxdemo/gfxdemo.c
===================================================================
--- uspace/app/gfxdemo/gfxdemo.c	(revision 23e86c6dcff346ffc7f0237d512aa2e499b47244)
+++ uspace/app/gfxdemo/gfxdemo.c	(revision 5fae1237429d6d7f6e5c59d4a0b9c9e56446a466)
@@ -490,5 +490,6 @@
 {
 	printf("Keyboard event type=%d key=%d\n", event->type, event->key);
-	quit = true;
+	if (event->type == KEY_PRESS)
+		quit = true;
 }
 
Index: uspace/drv/fb/kfb/port.c
===================================================================
--- uspace/drv/fb/kfb/port.c	(revision 23e86c6dcff346ffc7f0237d512aa2e499b47244)
+++ uspace/drv/fb/kfb/port.c	(revision 5fae1237429d6d7f6e5c59d4a0b9c9e56446a466)
@@ -245,5 +245,7 @@
 	gfx_coord2_t bmdim;
 	gfx_coord2_t dim;
-	gfx_coord_t x, y;
+	gfx_coord2_t sp;
+	gfx_coord2_t dp;
+	gfx_coord2_t pos;
 	pixelmap_t pbm;
 	pixel_t color;
@@ -270,9 +272,12 @@
 	pbm.data = kfbbm->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);
+	for (pos.y = srect.p0.y; pos.y < srect.p1.y; pos.y++) {
+		for (pos.x = srect.p0.x; pos.x < srect.p1.x; pos.x++) {
+			gfx_coord2_subtract(&pos, &kfbbm->rect.p0, &sp);
+			gfx_coord2_add(&pos, &offs, &dp);
+
+			color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
 			kfb->pixel2visual(kfb->addr +
-			    FB_POS(kfb, x, y), color);
+			    FB_POS(kfb, dp.x, dp.y), color);
 		}
 	}
