Index: uspace/app/nav/menu.c
===================================================================
--- uspace/app/nav/menu.c	(revision 01cd15bc68c0fc679ee44bbb0771f40b9c6da79d)
+++ uspace/app/nav/menu.c	(revision f6304727e2708f92c9ce8a7ef5ab428b978fae53)
@@ -65,6 +65,4 @@
 	ui_menu_entry_t *mfsep;
 	ui_menu_entry_t *mexit;
-	gfx_rect_t arect;
-	gfx_rect_t rect;
 	errno_t rc;
 
@@ -148,11 +146,5 @@
 
 	ui_menu_entry_set_cb(mexit, nav_menu_file_exit, (void *) menu);
-
-	ui_window_get_app_rect(menu->window, &arect);
-
-	rect.p0 = arect.p0;
-	rect.p1.x = arect.p1.x;
-	rect.p1.y = arect.p0.y + 1;
-	ui_menu_bar_set_rect(menu->menubar, &rect);
+	nav_menu_resize(menu);
 
 	*rmenu = menu;
@@ -163,4 +155,21 @@
 }
 
+/** Resize navigator menu.
+ *
+ * @param menu Menu
+ */
+void nav_menu_resize(nav_menu_t *menu)
+{
+	gfx_rect_t arect;
+	gfx_rect_t rect;
+
+	ui_window_get_app_rect(menu->window, &arect);
+
+	rect.p0 = arect.p0;
+	rect.p1.x = arect.p1.x;
+	rect.p1.y = arect.p0.y + 1;
+	ui_menu_bar_set_rect(menu->menubar, &rect);
+}
+
 /** Set navigator menu callbacks.
  *
Index: uspace/app/nav/menu.h
===================================================================
--- uspace/app/nav/menu.h	(revision 01cd15bc68c0fc679ee44bbb0771f40b9c6da79d)
+++ uspace/app/nav/menu.h	(revision f6304727e2708f92c9ce8a7ef5ab428b978fae53)
@@ -43,4 +43,5 @@
 
 extern errno_t nav_menu_create(ui_window_t *, nav_menu_t **);
+extern void nav_menu_resize(nav_menu_t *);
 extern void nav_menu_set_cb(nav_menu_t *, nav_menu_cb_t *, void *);
 extern void nav_menu_destroy(nav_menu_t *);
Index: uspace/app/nav/nav.c
===================================================================
--- uspace/app/nav/nav.c	(revision 01cd15bc68c0fc679ee44bbb0771f40b9c6da79d)
+++ uspace/app/nav/nav.c	(revision f6304727e2708f92c9ce8a7ef5ab428b978fae53)
@@ -64,8 +64,10 @@
 #define EDITOR_CMD "/app/edit"
 
+static void wnd_resize(ui_window_t *, void *);
 static void wnd_close(ui_window_t *, void *);
 static void wnd_kbd(ui_window_t *, void *, kbd_event_t *);
 
 static ui_window_cb_t window_cb = {
+	.resize = wnd_resize,
 	.close = wnd_close,
 	.kbd = wnd_kbd
@@ -96,4 +98,5 @@
 };
 
+static void navigator_panel_rect(navigator_t *, unsigned, gfx_rect_t *);
 static void navigator_panel_activate_req(void *, panel_t *);
 static void navigator_panel_file_open(void *, panel_t *, const char *);
@@ -133,4 +136,23 @@
 	.close = navigator_exists_close
 };
+
+/** Window size has changed.
+ *
+ * @param window Window
+ * @param arg Argument (navigator)
+ */
+static void wnd_resize(ui_window_t *window, void *arg)
+{
+	navigator_t *navigator = (navigator_t *) arg;
+	unsigned i;
+	gfx_rect_t rect;
+
+	nav_menu_resize(navigator->menu);
+
+	for (i = 0; i < navigator_panels; i++) {
+		navigator_panel_rect(navigator, i, &rect);
+		panel_set_rect(navigator->panel[i], &rect);
+	}
+}
 
 /** Window close button was clicked.
@@ -207,4 +229,21 @@
 }
 
+static void navigator_panel_rect(navigator_t *navigator, unsigned i,
+    gfx_rect_t *rect)
+{
+	gfx_rect_t arect;
+	gfx_coord_t pw;
+
+	ui_window_get_app_rect(navigator->window, &arect);
+
+	/* Panel width */
+	pw = (arect.p1.x - arect.p0.x) / navigator_panels;
+
+	rect->p0.x = arect.p0.x + pw * i;
+	rect->p0.y = arect.p0.y + 1;
+	rect->p1.x = arect.p0.x + pw * (i + 1);
+	rect->p1.y = arect.p1.y - 1;
+}
+
 /** Create navigator.
  *
@@ -220,5 +259,4 @@
 	gfx_rect_t rect;
 	gfx_rect_t arect;
-	gfx_coord_t pw;
 	unsigned i;
 	errno_t rc;
@@ -242,4 +280,5 @@
 	if (rc != EOK) {
 		printf("Error creating window.\n");
+
 		goto error;
 	}
@@ -269,8 +308,6 @@
 	}
 
-	/* Panel width */
-	pw = (arect.p1.x - arect.p0.x) / 2;
-
-	for (i = 0; i < 2; i++) {
+	/* Create panels. */
+	for (i = 0; i < navigator_panels; i++) {
 		rc = panel_create(navigator->window, i == 0,
 		    &navigator->panel[i]);
@@ -278,8 +315,5 @@
 			goto error;
 
-		rect.p0.x = arect.p0.x + pw * i;
-		rect.p0.y = arect.p0.y + 1;
-		rect.p1.x = arect.p0.x + pw * (i + 1);
-		rect.p1.y = arect.p1.y - 1;
+		navigator_panel_rect(navigator, i, &rect);
 		panel_set_rect(navigator->panel[i], &rect);
 
@@ -326,5 +360,5 @@
 	unsigned i;
 
-	for (i = 0; i < 2; i++) {
+	for (i = 0; i < navigator_panels; i++) {
 		if (navigator->panel[i] != NULL) {
 			ui_fixed_remove(navigator->fixed,
@@ -437,5 +471,5 @@
 	/* First refresh inactive panel. */
 
-	for (i = 0; i < 2; i++) {
+	for (i = 0; i < navigator_panels; i++) {
 		if (!panel_is_active(navigator->panel[i])) {
 			rc = panel_refresh(navigator->panel[i]);
@@ -450,5 +484,5 @@
 	 */
 
-	for (i = 0; i < 2; i++) {
+	for (i = 0; i < navigator_panels; i++) {
 		if (panel_is_active(navigator->panel[i])) {
 			rc = panel_refresh(navigator->panel[i]);
Index: uspace/lib/ui/src/list.c
===================================================================
--- uspace/lib/ui/src/list.c	(revision 01cd15bc68c0fc679ee44bbb0771f40b9c6da79d)
+++ uspace/lib/ui/src/list.c	(revision f6304727e2708f92c9ce8a7ef5ab428b978fae53)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2025 Jiri Svoboda
+ * Copyright (c) 2026 Jiri Svoboda
  * All rights reserved.
  *
@@ -471,4 +471,8 @@
 	ui_list_scrollbar_rect(list, &srect);
 	ui_scrollbar_set_rect(list->scrollbar, &srect);
+
+	/* Make sure cursor stays on page after resize. */
+	if (list->cursor != NULL)
+		ui_list_cursor_move(list, list->cursor, list->cursor_idx);
 }
 
