Index: uspace/app/shutdown-dlg/shutdown-dlg.c
===================================================================
--- uspace/app/shutdown-dlg/shutdown-dlg.c	(revision 797ab957fc37b27462c54f0c3a7520af8a33e233)
+++ uspace/app/shutdown-dlg/shutdown-dlg.c	(revision 0ae9e18465809a5520c51c76be2866b19c48bd0e)
@@ -41,6 +41,8 @@
 #include <ui/fixed.h>
 #include <ui/label.h>
+#include <ui/list.h>
 #include <ui/msgdialog.h>
 #include <ui/resource.h>
+#include <ui/selectdialog.h>
 #include <ui/ui.h>
 #include <ui/window.h>
@@ -50,7 +52,7 @@
 static errno_t bg_wnd_paint(ui_window_t *, void *);
 static void shutdown_progress_destroy(shutdown_progress_t *);
-static errno_t shutdown_confirm_msg_create(shutdown_dlg_t *);
+static errno_t shutdown_confirm_create(shutdown_dlg_t *);
 static errno_t shutdown_failed_msg_create(shutdown_dlg_t *);
-static errno_t shutdown_start(shutdown_dlg_t *);
+static errno_t shutdown_start(shutdown_dlg_t *, sd_action_t);
 
 static ui_window_cb_t bg_window_cb = {
@@ -71,10 +73,12 @@
 };
 
-static void shutdown_confirm_msg_button(ui_msg_dialog_t *, void *, unsigned);
-static void shutdown_confirm_msg_close(ui_msg_dialog_t *, void *);
-
-static ui_msg_dialog_cb_t shutdown_confirm_msg_cb = {
-	.button = shutdown_confirm_msg_button,
-	.close = shutdown_confirm_msg_close
+static void shutdown_confirm_bok(ui_select_dialog_t *, void *, void *);
+static void shutdown_confirm_bcancel(ui_select_dialog_t *, void *);
+static void shutdown_confirm_close(ui_select_dialog_t *, void *);
+
+static ui_select_dialog_cb_t shutdown_confirm_cb = {
+	.bok = shutdown_confirm_bok,
+	.bcancel = shutdown_confirm_bcancel,
+	.close = shutdown_confirm_close
 };
 
@@ -166,23 +170,43 @@
  * @return EOK on success or an error code
  */
-static errno_t shutdown_confirm_msg_create(shutdown_dlg_t *sddlg)
-{
-	ui_msg_dialog_params_t params;
-	ui_msg_dialog_t *dialog;
-	errno_t rc;
-
-	ui_msg_dialog_params_init(&params);
+static errno_t shutdown_confirm_create(shutdown_dlg_t *sddlg)
+{
+	ui_select_dialog_params_t params;
+	ui_select_dialog_t *dialog;
+	ui_list_entry_attr_t attr;
+	errno_t rc;
+
+	ui_select_dialog_params_init(&params);
 	params.caption = "Shutdown";
-	params.text = "Do you want to shut the system down?";
-	params.choice = umdc_ok_cancel;
-	params.flags |= umdf_topmost | umdf_center;
-
-	rc = ui_msg_dialog_create(sddlg->ui, &params, &dialog);
+	params.prompt = "Do you want to shut the system down?";
+	params.flags |= usdf_topmost | usdf_center;
+
+	rc = ui_select_dialog_create(sddlg->ui, &params, &dialog);
 	if (rc != EOK)
 		return rc;
 
-	ui_msg_dialog_set_cb(dialog, &shutdown_confirm_msg_cb, sddlg);
+	/* Need an entry to select */
+	ui_list_entry_attr_init(&attr);
+
+	attr.caption = "Power off";
+	attr.arg = (void *)sd_poweroff;
+	rc = ui_select_dialog_append(dialog, &attr);
+	if (rc != EOK)
+		goto error;
+
+	attr.caption = "Restart";
+	attr.arg = (void *)sd_restart;
+	rc = ui_select_dialog_append(dialog, &attr);
+	if (rc != EOK)
+		goto error;
+
+	ui_select_dialog_set_cb(dialog, &shutdown_confirm_cb, sddlg);
+
+	(void)ui_select_dialog_paint(dialog);
 
 	return EOK;
+error:
+	ui_select_dialog_destroy(dialog);
+	return rc;
 }
 
@@ -211,33 +235,43 @@
 }
 
-/** Shutdown confirm message dialog button press.
+/** Shutdown confirm dialog OK button press.
  *
  * @param dialog Message dialog
  * @param arg Argument (ui_demo_t *)
- * @param bnum Button number
- */
-static void shutdown_confirm_msg_button(ui_msg_dialog_t *dialog,
-    void *arg, unsigned bnum)
+ * @param earg Entry argument
+ */
+static void shutdown_confirm_bok(ui_select_dialog_t *dialog, void *arg,
+    void *earg)
 {
 	shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;
 
-	ui_msg_dialog_destroy(dialog);
-
-	if (bnum == 0)
-		shutdown_start(sddlg);
-	else
-		ui_quit(sddlg->ui);
-}
-
-/** Shutdown confirm message dialog close request.
+	ui_select_dialog_destroy(dialog);
+
+	shutdown_start(sddlg, (sd_action_t)earg);
+}
+
+/** Shutdown confirm dialog Cancel button press.
  *
  * @param dialog Message dialog
  * @param arg Argument (ui_demo_t *)
  */
-static void shutdown_confirm_msg_close(ui_msg_dialog_t *dialog, void *arg)
+static void shutdown_confirm_bcancel(ui_select_dialog_t *dialog, void *arg)
 {
 	shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;
 
-	ui_msg_dialog_destroy(dialog);
+	ui_select_dialog_destroy(dialog);
+	ui_quit(sddlg->ui);
+}
+
+/** Shutdown confirm message dialog close request.
+ *
+ * @param dialog Message dialog
+ * @param arg Argument (ui_demo_t *)
+ */
+static void shutdown_confirm_close(ui_select_dialog_t *dialog, void *arg)
+{
+	shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;
+
+	ui_select_dialog_destroy(dialog);
 	ui_quit(sddlg->ui);
 }
@@ -386,5 +420,11 @@
 }
 
-static errno_t shutdown_start(shutdown_dlg_t *sddlg)
+/** Start shutdown.
+ *
+ * @param sddlg Shutdown dialog
+ * @param action Shutdown actin
+ * @return EOK on success or an error code
+ */
+static errno_t shutdown_start(shutdown_dlg_t *sddlg, sd_action_t action)
 {
 	errno_t rc;
@@ -400,5 +440,15 @@
 	}
 
-	rc = system_poweroff(sddlg->system);
+	rc = EINVAL;
+
+	switch (action) {
+	case sd_poweroff:
+		rc = system_poweroff(sddlg->system);
+		break;
+	case sd_restart:
+		rc = system_restart(sddlg->system);
+		break;
+	}
+
 	if (rc != EOK) {
 		printf("Failed requesting system shutdown.\n");
@@ -469,5 +519,5 @@
 	}
 
-	(void)shutdown_confirm_msg_create(&sddlg);
+	(void)shutdown_confirm_create(&sddlg);
 
 	ui_run(ui);
Index: uspace/app/shutdown-dlg/shutdown-dlg.h
===================================================================
--- uspace/app/shutdown-dlg/shutdown-dlg.h	(revision 797ab957fc37b27462c54f0c3a7520af8a33e233)
+++ uspace/app/shutdown-dlg/shutdown-dlg.h	(revision 0ae9e18465809a5520c51c76be2866b19c48bd0e)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -60,4 +60,10 @@
 } shutdown_dlg_t;
 
+/** Shutdown action */
+typedef enum {
+	sd_poweroff = 1,
+	sd_restart
+} sd_action_t;
+
 #endif
 
Index: uspace/lib/ui/include/types/ui/selectdialog.h
===================================================================
--- uspace/lib/ui/include/types/ui/selectdialog.h	(revision 797ab957fc37b27462c54f0c3a7520af8a33e233)
+++ uspace/lib/ui/include/types/ui/selectdialog.h	(revision 0ae9e18465809a5520c51c76be2866b19c48bd0e)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -44,4 +44,12 @@
 typedef struct ui_select_dialog ui_select_dialog_t;
 
+/** Select dialog flags */
+typedef enum {
+	/** Topmost window */
+	usdf_topmost = 0x1,
+	/** Place to the center of the screen */
+	usdf_center = 0x2
+} ui_select_dialog_flags_t;
+
 /** Select dialog parameters */
 typedef struct {
@@ -50,4 +58,6 @@
 	/** Prompt text */
 	const char *prompt;
+	/** Flags */
+	ui_select_dialog_flags_t flags;
 } ui_select_dialog_params_t;
 
Index: uspace/lib/ui/src/selectdialog.c
===================================================================
--- uspace/lib/ui/src/selectdialog.c	(revision 797ab957fc37b27462c54f0c3a7520af8a33e233)
+++ uspace/lib/ui/src/selectdialog.c	(revision 0ae9e18465809a5520c51c76be2866b19c48bd0e)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -114,4 +114,9 @@
 	ui_wnd_params_init(&wparams);
 	wparams.caption = params->caption;
+
+	if ((params->flags & usdf_topmost) != 0)
+		wparams.flags |= wndf_topmost;
+	if ((params->flags & usdf_center) != 0)
+		wparams.placement = ui_wnd_place_center;
 
 	/* FIXME: Auto layout */
