Index: uspace/app/shutdown-dlg/shutdown-dlg.c
===================================================================
--- uspace/app/shutdown-dlg/shutdown-dlg.c	(revision 41dcabcdd3a7892618b028c8b2f82d2768500453)
+++ uspace/app/shutdown-dlg/shutdown-dlg.c	(revision afb4025d4713e789ff8d0f4543e68d297744e702)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -41,4 +41,5 @@
 #include <ui/fixed.h>
 #include <ui/label.h>
+#include <ui/msgdialog.h>
 #include <ui/resource.h>
 #include <ui/ui.h>
@@ -48,4 +49,6 @@
 static void wnd_close(ui_window_t *, void *);
 static errno_t bg_wnd_paint(ui_window_t *, void *);
+static void shutdown_progress_destroy(shutdown_progress_t *);
+static errno_t shutdown_failed_msg_create(shutdown_dlg_t *);
 
 static ui_window_cb_t bg_window_cb = {
@@ -64,4 +67,12 @@
 	.shutdown_complete = sd_shutdown_complete,
 	.shutdown_failed = sd_shutdown_failed
+};
+
+static void shutdown_failed_msg_button(ui_msg_dialog_t *, void *, unsigned);
+static void shutdown_failed_msg_close(ui_msg_dialog_t *, void *);
+
+static ui_msg_dialog_cb_t shutdown_failed_msg_cb = {
+	.button = shutdown_failed_msg_button,
+	.close = shutdown_failed_msg_close
 };
 
@@ -90,6 +101,9 @@
 
 	ui_lock(sddlg->ui);
-	(void)ui_label_set_text(sddlg->progress->label, "Shutdown failed.");
-	(void)ui_window_paint(sddlg->progress->window);
+	shutdown_progress_destroy(sddlg->progress);
+	sddlg->progress = NULL;
+	ui_window_destroy(sddlg->bgwindow);
+	sddlg->bgwindow = NULL;
+	(void)shutdown_failed_msg_create(sddlg);
 	ui_unlock(sddlg->ui);
 }
@@ -135,4 +149,56 @@
 
 	return EOK;
+}
+
+/** Create 'shutdown failed' message dialog.
+ *
+ * @param sddlg Shutdown dialog
+ * @return EOK on success or an error code
+ */
+static errno_t shutdown_failed_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);
+	params.caption = "Shutdown failed";
+	params.text = "The system failed to shut down properly.";
+
+	rc = ui_msg_dialog_create(sddlg->ui, &params, &dialog);
+	if (rc != EOK)
+		return rc;
+
+	ui_msg_dialog_set_cb(dialog, &shutdown_failed_msg_cb, sddlg);
+
+	return EOK;
+}
+
+/** Shutdown failed message dialog button press.
+ *
+ * @param dialog Message dialog
+ * @param arg Argument (ui_demo_t *)
+ * @param bnum Button number
+ */
+static void shutdown_failed_msg_button(ui_msg_dialog_t *dialog,
+    void *arg, unsigned bnum)
+{
+	shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;
+
+	ui_msg_dialog_destroy(dialog);
+	ui_quit(sddlg->ui);
+}
+
+/** Message dialog close request.
+ *
+ * @param dialog Message dialog
+ * @param arg Argument (ui_demo_t *)
+ */
+static void shutdown_failed_msg_close(ui_msg_dialog_t *dialog, void *arg)
+{
+	shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;
+
+	ui_msg_dialog_destroy(dialog);
+	ui_quit(sddlg->ui);
 }
 
@@ -245,4 +311,7 @@
 static void shutdown_progress_destroy(shutdown_progress_t *progress)
 {
+	if (progress == NULL)
+		return;
+
 	ui_window_destroy(progress->window);
 	free(progress);
@@ -254,5 +323,4 @@
 	ui_t *ui = NULL;
 	ui_wnd_params_t params;
-	ui_window_t *window = NULL;
 	shutdown_dlg_t sddlg;
 	errno_t rc;
@@ -285,5 +353,5 @@
 	sddlg.ui = ui;
 
-	rc = ui_window_create(ui, &params, &window);
+	rc = ui_window_create(ui, &params, &sddlg.bgwindow);
 	if (rc != EOK) {
 		printf("Error creating window.\n");
@@ -291,6 +359,5 @@
 	}
 
-	ui_window_set_cb(window, &bg_window_cb, (void *) &sddlg);
-	sddlg.bgwindow = window;
+	ui_window_set_cb(sddlg.bgwindow, &bg_window_cb, (void *) &sddlg);
 
 	rc = gfx_color_new_rgb_i16(0x8000, 0xc800, 0xffff, &sddlg.bg_color);
@@ -300,5 +367,5 @@
 	}
 
-	rc = ui_window_paint(window);
+	rc = ui_window_paint(sddlg.bgwindow);
 	if (rc != EOK) {
 		printf("Error painting window.\n");
@@ -325,5 +392,6 @@
 
 	shutdown_progress_destroy(sddlg.progress);
-	ui_window_destroy(window);
+	if (sddlg.bgwindow != NULL)
+		ui_window_destroy(sddlg.bgwindow);
 	system_close(sddlg.system);
 	gfx_color_delete(sddlg.bg_color);
@@ -336,6 +404,6 @@
 	if (sddlg.bg_color != NULL)
 		gfx_color_delete(sddlg.bg_color);
-	if (window != NULL)
-		ui_window_destroy(window);
+	if (sddlg.bgwindow != NULL)
+		ui_window_destroy(sddlg.bgwindow);
 	if (ui != NULL)
 		ui_destroy(ui);
