Index: uspace/lib/gui/button.c
===================================================================
--- uspace/lib/gui/button.c	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/button.c	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -38,4 +38,6 @@
 #include <drawctx.h>
 #include <surface.h>
+#include <font/embedded.h>
+#include <errno.h>
 #include "common.h"
 #include "window.h"
@@ -76,5 +78,5 @@
 	sysarg_t cpt_width;
 	sysarg_t cpt_height;
-	font_get_box(&btn->font, btn->caption, &cpt_width, &cpt_height);
+	font_get_box(btn->font, btn->caption, &cpt_width, &cpt_height);
 	
 	if ((widget->width >= cpt_width) && (widget->height >= cpt_height)) {
@@ -83,5 +85,5 @@
 		
 		drawctx_set_source(&drawctx, &btn->text);
-		drawctx_set_font(&drawctx, &btn->font);
+		drawctx_set_font(&drawctx, btn->font);
 		
 		if (btn->caption)
@@ -96,5 +98,5 @@
 	widget_deinit(&btn->widget);
 	free(btn->caption);
-	font_release(&btn->font);
+	font_release(btn->font);
 }
 
@@ -171,9 +173,14 @@
 		btn->caption = str_dup(caption);
 	
-	font_init(&btn->font, FONT_DECODER_EMBEDDED, NULL, points);
+	int rc = embedded_font_create(&btn->font, points);
+	if (rc != EOK) {
+		free(btn->caption);
+		btn->caption = NULL;
+		return false;
+	}
 	
 	sysarg_t cpt_width;
 	sysarg_t cpt_height;
-	font_get_box(&btn->font, btn->caption, &cpt_width, &cpt_height);
+	font_get_box(btn->font, btn->caption, &cpt_width, &cpt_height);
 	btn->widget.width_min = cpt_width + 10;
 	btn->widget.height_min = cpt_height + 10;
Index: uspace/lib/gui/button.h
===================================================================
--- uspace/lib/gui/button.h	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/button.h	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -52,5 +52,5 @@
 	source_t text;
 	char *caption;
-	font_t font;
+	font_t *font;
 	signal_t clicked;
 } button_t;
Index: uspace/lib/gui/label.c
===================================================================
--- uspace/lib/gui/label.c	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/label.c	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -38,4 +38,6 @@
 #include <drawctx.h>
 #include <surface.h>
+#include <font/embedded.h>
+#include <errno.h>
 #include "window.h"
 #include "label.h"
@@ -58,5 +60,5 @@
 	sysarg_t cpt_width;
 	sysarg_t cpt_height;
-	font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
+	font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
 	
 	if ((widget->width >= cpt_width) && (widget->height >= cpt_height)) {
@@ -65,5 +67,5 @@
 		
 		drawctx_set_source(&drawctx, &lbl->text);
-		drawctx_set_font(&drawctx, &lbl->font);
+		drawctx_set_font(&drawctx, lbl->font);
 		
 		if (lbl->caption)
@@ -84,5 +86,5 @@
 		sysarg_t cpt_width;
 		sysarg_t cpt_height;
-		font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
+		font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
 		
 		lbl->widget.width_min = cpt_width + 4;
@@ -99,5 +101,5 @@
 	widget_deinit(&lbl->widget);
 	free(lbl->caption);
-	font_release(&lbl->font);
+	font_release(lbl->font);
 }
 
@@ -161,9 +163,14 @@
 		lbl->caption = str_dup(caption);
 	
-	font_init(&lbl->font, FONT_DECODER_EMBEDDED, NULL, points);
+	int rc = embedded_font_create(&lbl->font, points);
+	if (rc != EOK) {
+		free(lbl->caption);
+		lbl->caption = NULL;
+		return false;
+	}
 	
 	sysarg_t cpt_width;
 	sysarg_t cpt_height;
-	font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
+	font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
 	
 	lbl->widget.width_min = cpt_width + 4;
Index: uspace/lib/gui/label.h
===================================================================
--- uspace/lib/gui/label.h	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/label.h	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -51,5 +51,5 @@
 	source_t text;
 	char *caption;
-	font_t font;
+	font_t *font;
 	slot_t rewrite;
 } label_t;
Index: uspace/lib/gui/terminal.c
===================================================================
--- uspace/lib/gui/terminal.c	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/terminal.c	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -186,5 +186,5 @@
 	//        for full UTF-32 coverage.
 	
-	uint16_t glyph = fb_font_glyph(field->ch);
+	uint16_t glyph = fb_font_glyph(field->ch, NULL);
 	
 	for (unsigned int y = 0; y < FONT_SCANLINES; y++) {
Index: uspace/lib/gui/window.c
===================================================================
--- uspace/lib/gui/window.c	(revision 1c635d6076d5ecbddc9b9e9a97d69324a6d97b18)
+++ uspace/lib/gui/window.c	(revision a9763c666a17a9e61eed93a67919ee613c7f32a9)
@@ -55,4 +55,5 @@
 #include <drawctx.h>
 #include <surface.h>
+#include <font/embedded.h>
 
 #include "common.h"
@@ -160,8 +161,12 @@
 	/* Window caption */
 	
-	font_t font;
-	font_init(&font, FONT_DECODER_EMBEDDED, NULL, 16);
-	
-	drawctx_set_font(&drawctx, &font);
+	font_t *font;
+	int rc = embedded_font_create(&font, 16);
+	if (rc != EOK) {
+		window_yield(widget->window);
+		return;
+	}
+	
+	drawctx_set_font(&drawctx, font);
 	source_set_color(&source, widget->window->is_focused ?
 	    color_caption_focus : color_caption_unfocus);
@@ -169,5 +174,5 @@
 	sysarg_t cpt_width;
 	sysarg_t cpt_height;
-	font_get_box(&font, widget->window->caption, &cpt_width, &cpt_height);
+	font_get_box(font, widget->window->caption, &cpt_width, &cpt_height);
 	
 	bool draw_title =
@@ -183,5 +188,5 @@
 	}
 	
-	font_release(&font);
+	font_release(font);
 	window_yield(widget->window);
 }
