Index: uspace/app/taskbar/wndlist.c
===================================================================
--- uspace/app/taskbar/wndlist.c	(revision fc00f0de04b9593122fa431e3a1c99574d299f16)
+++ uspace/app/taskbar/wndlist.c	(revision f1f433d10ab8dfdc792a9cdc8807b76dbcfac663)
@@ -48,8 +48,10 @@
 static void wndlist_wm_window_added(void *, sysarg_t);
 static void wndlist_wm_window_removed(void *, sysarg_t);
+static void wndlist_wm_window_changed(void *, sysarg_t);
 
 static wndmgt_cb_t wndlist_wndmgt_cb = {
 	.window_added = wndlist_wm_window_added,
-	.window_removed = wndlist_wm_window_removed
+	.window_removed = wndlist_wm_window_removed,
+	.window_changed = wndlist_wm_window_changed
 };
 
@@ -233,4 +235,27 @@
 	if (!paint)
 		return EOK;
+
+	return wndlist_repaint(wndlist);
+}
+
+/** Update window list entry.
+ *
+ * @param wndlist Window list
+ * @param entry Window list entry
+ * @return @c EOK on success or an error code
+ */
+errno_t wndlist_update(wndlist_t *wndlist, wndlist_entry_t *entry,
+    const char *caption)
+{
+	errno_t rc;
+	assert(entry->wndlist == wndlist);
+
+	rc = ui_pbutton_set_caption(entry->button, caption);
+	if (rc != EOK)
+		return rc;
+
+	rc = ui_pbutton_paint(entry->button);
+	if (rc != EOK)
+		return rc;
 
 	return wndlist_repaint(wndlist);
@@ -325,4 +350,31 @@
 }
 
+/** Handle WM window changed event.
+ *
+ * @param arg Argument (wndlist_t *)
+ * @param wnd_id Window ID
+ */
+static void wndlist_wm_window_changed(void *arg, sysarg_t wnd_id)
+{
+	wndlist_t *wndlist = (wndlist_t *)arg;
+	wndmgt_window_info_t *winfo = NULL;
+	wndlist_entry_t *entry;
+	errno_t rc;
+
+	printf("wm_window_changed: wndlist=%p wnd_id=%zu\n",
+	    (void *)wndlist, wnd_id);
+
+	entry = wndlist_entry_by_id(wndlist, wnd_id);
+	if (entry == NULL)
+		return;
+
+	rc = wndmgt_get_window_info(wndlist->wndmgt, wnd_id, &winfo);
+	if (rc != EOK)
+		return;
+
+	(void) wndlist_update(wndlist, entry, winfo->caption);
+	wndmgt_free_window_info(winfo);
+}
+
 /** Find window list entry by ID.
  *
Index: uspace/app/taskbar/wndlist.h
===================================================================
--- uspace/app/taskbar/wndlist.h	(revision fc00f0de04b9593122fa431e3a1c99574d299f16)
+++ uspace/app/taskbar/wndlist.h	(revision f1f433d10ab8dfdc792a9cdc8807b76dbcfac663)
@@ -49,4 +49,5 @@
 extern errno_t wndlist_append(wndlist_t *, sysarg_t, const char *, bool);
 extern errno_t wndlist_remove(wndlist_t *, wndlist_entry_t *, bool);
+extern errno_t wndlist_update(wndlist_t *, wndlist_entry_t *, const char *);
 extern void wndlist_set_entry_rect(wndlist_t *, wndlist_entry_t *);
 extern wndlist_entry_t *wndlist_entry_by_id(wndlist_t *, sysarg_t);
