Index: uspace/app/fontedit/fontedit.c
===================================================================
--- uspace/app/fontedit/fontedit.c	(revision d53af3c8e49cf53bc3b0b68fb0fcadb78291e77f)
+++ uspace/app/fontedit/fontedit.c	(revision 16357ec5aa427de771a1594454a86fbe93cebbb8)
@@ -148,5 +148,5 @@
 		printf("Save!\n");
 		(void) gfx_glyph_bmp_save(fedit->gbmp);
-		rc = gfx_typeface_save(fedit->typeface, "/test.tpf");
+		rc = gfx_typeface_save(fedit->typeface, fedit->fname);
 		if (rc != EOK)
 			printf("Error saving typeface.\n");
@@ -426,8 +426,10 @@
  *
  * @param display_svc Display service
+ * @param fname Font file to open or @c NULL to create new font
  * @param rfedit Place to store pointer to new font editor
  * @return EOK on success or an error code
  */
-static errno_t font_edit_create(const char *display_svc, font_edit_t **rfedit)
+static errno_t font_edit_create(const char *display_svc, const char *fname,
+    font_edit_t **rfedit)
 {
 	canvas_gc_t *cgc = NULL;
@@ -439,4 +441,5 @@
 	gfx_typeface_t *tface = NULL;
 	gfx_font_t *font = NULL;
+	gfx_font_info_t *finfo;
 	gfx_font_props_t props;
 	gfx_font_metrics_t metrics;
@@ -504,31 +507,49 @@
 	gc = canvas_gc_get_ctx(cgc);
 
-	rc = gfx_typeface_create(gc, &tface);
-	if (rc != EOK) {
-		printf("Error creating typeface.\n");
-		goto error;
-	}
-
-	gfx_font_props_init(&props);
-	gfx_font_metrics_init(&metrics);
-
-	rc = gfx_font_create(tface, &props, &metrics, &font);
-	if (rc != EOK) {
-		printf("Error creating font.\n");
-		goto error;
-	}
-
-	gfx_glyph_metrics_init(&gmetrics);
-
-	rc = gfx_glyph_create(font, &gmetrics, &glyph);
-	if (rc != EOK) {
-		printf("Error creating glyph.\n");
-		goto error;
-	}
-
-	rc = gfx_glyph_set_pattern(glyph, "A");
-	if (rc != EOK) {
-		printf("Error setting glyph pattern.\n");
-		goto error;
+	if (fname == NULL) {
+		rc = gfx_typeface_create(gc, &tface);
+		if (rc != EOK) {
+			printf("Error creating typeface.\n");
+			goto error;
+		}
+
+		gfx_font_props_init(&props);
+		gfx_font_metrics_init(&metrics);
+
+		rc = gfx_font_create(tface, &props, &metrics, &font);
+		if (rc != EOK) {
+			printf("Error creating font.\n");
+		    	goto error;
+		}
+
+		gfx_glyph_metrics_init(&gmetrics);
+
+		rc = gfx_glyph_create(font, &gmetrics, &glyph);
+		if (rc != EOK) {
+			printf("Error creating glyph.\n");
+			goto error;
+		}
+
+		rc = gfx_glyph_set_pattern(glyph, "A");
+		if (rc != EOK) {
+			printf("Error setting glyph pattern.\n");
+			goto error;
+		}
+	} else {
+		rc = gfx_typeface_open(gc, fname, &tface);
+		if (rc != EOK) {
+			printf("Error opening typeface '%s.\n",
+			    fname);
+			goto error;
+		}
+
+		finfo = gfx_typeface_first_font(tface);
+		rc = gfx_font_open(finfo, &font);
+		if (rc != EOK) {
+			printf("Error opening font.\n");
+			goto error;
+		}
+
+		glyph = gfx_font_first_glyph(font);
 	}
 
@@ -543,4 +564,7 @@
 	sig_connect(&canvas->keyboard_event, &canvas->widget,
 	    font_edit_kbd_event);
+
+	if (fname == NULL)
+		fname = "new.tpf";
 
 	fedit->cgc = cgc;
@@ -549,4 +573,5 @@
 	fedit->height = vh;
 	fedit->pen_color = 1;
+	fedit->fname = fname;
 	fedit->typeface = tface;
 	fedit->font = font;
@@ -583,5 +608,5 @@
 static void print_syntax(void)
 {
-	printf("Syntax: fontedit [-d <display>]\n");
+	printf("Syntax: fontedit [-d <display>] [<file.tpf>]\n");
 }
 
@@ -590,4 +615,5 @@
 	errno_t rc;
 	const char *display_svc = DISPLAY_DEFAULT;
+	const char *fname = NULL;
 	font_edit_t *fedit;
 	int i;
@@ -611,5 +637,18 @@
 	}
 
-	rc = font_edit_create(display_svc, &fedit);
+	/* File name argument? */
+	if (i < argc) {
+		fname = argv[i];
+		++i;
+	}
+
+	/* Extra arguments? */
+	if (i < argc) {
+		printf("Unexpected argument '%s'.\n", argv[i]);
+		print_syntax();
+		return 1;
+	}
+
+	rc = font_edit_create(display_svc, fname, &fedit);
 	if (rc != EOK)
 		return 1;
Index: uspace/app/fontedit/fontedit.h
===================================================================
--- uspace/app/fontedit/fontedit.h	(revision d53af3c8e49cf53bc3b0b68fb0fcadb78291e77f)
+++ uspace/app/fontedit/fontedit.h	(revision 16357ec5aa427de771a1594454a86fbe93cebbb8)
@@ -54,4 +54,6 @@
 	/** Pen color (1 = set, 0 = reset) */
 	int pen_color;
+	/** File name */
+	const char *fname;
 	/** Typeface */
 	gfx_typeface_t *typeface;
