Index: uspace/lib/draw/font/bitmap_backend.c
===================================================================
--- uspace/lib/draw/font/bitmap_backend.c	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
+++ uspace/lib/draw/font/bitmap_backend.c	(revision 794e368715ec380ebe888af673c8db3fae585d9f)
@@ -136,5 +136,5 @@
 	surface_get_resolution(raw_surface, &w, &h);
 	
-	if (h == data->points) {
+	if (!data->scale) {
 		*result = raw_surface;
 		return EOK;
@@ -147,13 +147,13 @@
 	transform_t transform;
 	transform_identity(&transform);
-	double ratio = ((double) data->points) / ((double) h);
-	transform_scale(&transform, ratio, ratio);
+	transform_translate(&transform, 0.5, 0.5);
+	transform_scale(&transform, data->scale_ratio, data->scale_ratio);
 	source_set_transform(&source, transform);
 
-	double width = w;
-	double height = h;
-	transform_apply_linear(&transform, &width, &height);
-	surface_t *scaled_surface =
-	    surface_create((sysarg_t) (width + 0.5), (sysarg_t) (height + 0.5), NULL, 0);
+	surface_coord_t scaled_width = (data->scale_ratio * ((double) w) + 0.5);
+	surface_coord_t scaled_height = (data->scale_ratio * ((double) h) + 0.5);
+
+	surface_t *scaled_surface = surface_create(scaled_width, scaled_height,
+	    NULL, 0);
 	if (!scaled_surface) {
 		surface_destroy(raw_surface);
@@ -164,6 +164,5 @@
 	drawctx_init(&context, scaled_surface);
 	drawctx_set_source(&context, &source);
-	drawctx_transfer(&context, 0, 0,
-	    (sysarg_t) (width + 0.5), (sysarg_t) (height + 0.5));
+	drawctx_transfer(&context, 0, 0, scaled_width, scaled_height);
 
 	surface_destroy(raw_surface);
@@ -249,8 +248,9 @@
 		data->scale = true;
 		data->scale_ratio = ((double) points) / ((double) line_height);
+		line_height = (data->scale_ratio * ((double) line_height));
 		data->font_metrics.ascender = (metric_t)
 		    (data->scale_ratio * data->font_metrics.ascender + 0.5);
-		data->font_metrics.descender = (metric_t)
-		    (data->scale_ratio * data->font_metrics.descender - 0.5);
+		data->font_metrics.descender =
+		    line_height - data->font_metrics.ascender;
 		data->font_metrics.leading = (metric_t)
 		    (data->scale_ratio * data->font_metrics.leading + 0.5);
