Index: uspace/lib/ui/src/menu.c
===================================================================
--- uspace/lib/ui/src/menu.c	(revision 62223ec4ecd7ed2de2744dc2b41d1183c548223c)
+++ uspace/lib/ui/src/menu.c	(revision f251883f4ffaf99f002df5a67349e8a76a368bad)
@@ -163,10 +163,7 @@
     ui_menu_geom_t *geom)
 {
-	ui_menu_entry_t *mentry;
 	gfx_coord2_t edim;
 	gfx_coord_t frame_w;
 	gfx_coord_t frame_h;
-	gfx_coord_t w;
-	gfx_coord_t h;
 
 	if (menu->mbar->res->textmode) {
@@ -178,18 +175,6 @@
 	}
 
-	edim.x = 0;
-	edim.y = 0;
-
-	mentry = ui_menu_entry_first(menu);
-	while (mentry != NULL) {
-		w = ui_menu_entry_width(mentry);
-		h = ui_menu_entry_height(mentry);
-
-		if (w > edim.x)
-			edim.x = w;
-		edim.y += h;
-
-		mentry = ui_menu_entry_next(mentry);
-	}
+	edim.x = menu->max_w;
+	edim.y = menu->total_h;
 
 	geom->outer_rect.p0 = *spos;
Index: uspace/lib/ui/src/menuentry.c
===================================================================
--- uspace/lib/ui/src/menuentry.c	(revision 62223ec4ecd7ed2de2744dc2b41d1183c548223c)
+++ uspace/lib/ui/src/menuentry.c	(revision f251883f4ffaf99f002df5a67349e8a76a368bad)
@@ -69,4 +69,5 @@
 {
 	ui_menu_entry_t *mentry;
+	gfx_coord_t width;
 
 	mentry = calloc(1, sizeof(ui_menu_entry_t));
@@ -82,4 +83,10 @@
 	mentry->menu = menu;
 	list_append(&mentry->lentries, &menu->entries);
+
+	/* Update accumulated menu entry dimensions */
+	width = ui_menu_entry_width(mentry);
+	if (width > menu->max_w)
+		menu->max_w = width;
+	menu->total_h += ui_menu_entry_height(mentry);
 
 	*rmentry = mentry;
@@ -372,5 +379,4 @@
 	gfx_coord_t hpad;
 	gfx_coord_t vpad;
-	const char *caption;
 	gfx_coord_t width;
 
@@ -385,6 +391,5 @@
 	}
 
-	caption = mentry->caption;
-	width = gfx_text_width(res->font, caption) + 2 * hpad;
+	width = mentry->menu->max_w;
 	geom->text_pos.x = pos->x + hpad;
 	geom->text_pos.y = pos->y + vpad;
