Index: uspace/app/gfxdemo/gfxdemo.c
===================================================================
--- uspace/app/gfxdemo/gfxdemo.c	(revision 74f59b7f1d9b6865e01ad9b69b65c4f2ac711997)
+++ uspace/app/gfxdemo/gfxdemo.c	(revision 8bf9058f09dced75aac624984f173f5571c2084c)
@@ -502,5 +502,5 @@
 
 	rect.p0.x = w / 20;
-	rect.p0.y = 3 * h / 15;
+	rect.p0.y = 2 * h / 15;
 	rect.p1.x = w - w / 20;
 	rect.p1.y = 5 * h / 15;
@@ -530,5 +530,5 @@
 	}
 
-	pos.x = (rect.p0.x + rect.p1.x) / 2;
+	pos.x = (rect.p0.x + rect.p1.x - 1) / 2;
 	pos.y = rect.p0.y;
 	fmt.halign = gfx_halign_center;
@@ -537,5 +537,5 @@
 		goto error;
 
-	pos.x = rect.p1.x;
+	pos.x = rect.p1.x - 1;
 	pos.y = rect.p0.y;
 	fmt.halign = gfx_halign_right;
@@ -547,5 +547,5 @@
 
 	pos.x = rect.p0.x;
-	pos.y = (rect.p0.y + rect.p1.y) / 2;
+	pos.y = (rect.p0.y + rect.p1.y - 1) / 2;
 	fmt.halign = gfx_halign_left;
 	rc = gfx_puttext(font, &pos, &fmt, "Center left");
@@ -553,6 +553,6 @@
 		goto error;
 
-	pos.x = (rect.p0.x + rect.p1.x) / 2;
-	pos.y = (rect.p0.y + rect.p1.y) / 2;
+	pos.x = (rect.p0.x + rect.p1.x - 1) / 2;
+	pos.y = (rect.p0.y + rect.p1.y - 1) / 2;
 	fmt.halign = gfx_halign_center;
 	rc = gfx_puttext(font, &pos, &fmt, "Center");
@@ -560,6 +560,6 @@
 		goto error;
 
-	pos.x = rect.p1.x;
-	pos.y = (rect.p0.y + rect.p1.y) / 2;
+	pos.x = rect.p1.x - 1;
+	pos.y = (rect.p0.y + rect.p1.y - 1) / 2;
 	fmt.halign = gfx_halign_right;
 	rc = gfx_puttext(font, &pos, &fmt, "Center right");
@@ -570,5 +570,5 @@
 
 	pos.x = rect.p0.x;
-	pos.y = rect.p1.y;
+	pos.y = rect.p1.y - 1;
 	fmt.halign = gfx_halign_left;
 	rc = gfx_puttext(font, &pos, &fmt, "Bottom left");
@@ -576,6 +576,6 @@
 		goto error;
 
-	pos.x = (rect.p0.x + rect.p1.x) / 2;
-	pos.y = rect.p1.y;
+	pos.x = (rect.p0.x + rect.p1.x - 1) / 2;
+	pos.y = rect.p1.y - 1;
 	fmt.halign = gfx_halign_center;
 	rc = gfx_puttext(font, &pos, &fmt, "Bottom center");
@@ -583,6 +583,6 @@
 		goto error;
 
-	pos.x = rect.p1.x;
-	pos.y = rect.p1.y;
+	pos.x = rect.p1.x - 1;
+	pos.y = rect.p1.y - 1;
 	fmt.halign = gfx_halign_right;
 	rc = gfx_puttext(font, &pos, &fmt, "Bottom right");
Index: uspace/lib/gfxfont/include/types/gfx/text.h
===================================================================
--- uspace/lib/gfxfont/include/types/gfx/text.h	(revision 74f59b7f1d9b6865e01ad9b69b65c4f2ac711997)
+++ uspace/lib/gfxfont/include/types/gfx/text.h	(revision 8bf9058f09dced75aac624984f173f5571c2084c)
@@ -58,5 +58,7 @@
 	gfx_valign_center,
 	/** Align bottom */
-	gfx_valign_bottom
+	gfx_valign_bottom,
+	/** Align to baseline */
+	gfx_valign_baseline
 } gfx_valign_t;
 
Index: uspace/lib/gfxfont/src/text.c
===================================================================
--- uspace/lib/gfxfont/src/text.c	(revision 74f59b7f1d9b6865e01ad9b69b65c4f2ac711997)
+++ uspace/lib/gfxfont/src/text.c	(revision 8bf9058f09dced75aac624984f173f5571c2084c)
@@ -123,7 +123,7 @@
 
 	/* Adjust position for vertical alignment */
-	if (fmt->valign != gfx_valign_bottom) {
-		gfx_font_get_metrics(font, &fmetrics);
+	gfx_font_get_metrics(font, &fmetrics);
 
+	if (fmt->valign != gfx_valign_baseline) {
 		switch (fmt->valign) {
 		case gfx_valign_top:
@@ -133,4 +133,7 @@
 			cpos.y += fmetrics.ascent / 2;
 			break;
+		case gfx_valign_bottom:
+			cpos.y -= fmetrics.descent;
+		    	break;
 		default:
 			break;
