Index: uspace/app/uidemo/uidemo.c
===================================================================
--- uspace/app/uidemo/uidemo.c	(revision 2f1be23019121ef252e253d50391d830bc095887)
+++ uspace/app/uidemo/uidemo.c	(revision 08499f0283960964fcdfedd1773372d7e3a697ee)
@@ -33,4 +33,5 @@
  */
 
+#include <fibril_synch.h>
 #include <gfx/bitmap.h>
 #include <gfx/coord.h>
@@ -60,4 +61,9 @@
 #include "uidemo.h"
 
+enum {
+	scrollbar_update_interval_ms = 1000,
+	ui_demo_progress_step = 17
+};
+
 static errno_t bitmap_moire(gfx_bitmap_t *, gfx_coord_t, gfx_coord_t);
 
@@ -714,4 +720,28 @@
 	(void) demo;
 	ui_msg_dialog_destroy(dialog);
+}
+
+static void ui_demo_timer_fun(void *arg)
+{
+	ui_demo_t *demo = (ui_demo_t *) arg;
+
+	if (demo->progress_value < 100) {
+		demo->progress_value += ui_demo_progress_step;
+		if (demo->progress_value > 100)
+			demo->progress_value = 100;
+	} else {
+		demo->progress_value = 0;
+	}
+
+	ui_progress_set_value(demo->progress, demo->progress_value);
+
+	if (ui_tab_is_selected(demo->tbars)) {
+		ui_lock(demo->ui);
+		ui_progress_paint(demo->progress);
+		ui_unlock(demo->ui);
+	}
+
+	fibril_timer_set(demo->timer, 1000 * scrollbar_update_interval_ms,
+	    ui_demo_timer_fun, (void *)demo);
 }
 
@@ -1472,4 +1502,13 @@
 	ui_window_add(window, ui_fixed_ctl(demo.fixed));
 
+	demo.timer = fibril_timer_create(NULL);
+	if (demo.timer == NULL) {
+		printf("Error creating timer.\n");
+		return ENOMEM;
+	}
+
+	fibril_timer_set(demo.timer, 1000 * scrollbar_update_interval_ms,
+	    ui_demo_timer_fun, (void *)&demo);
+
 	rc = ui_window_paint(window);
 	if (rc != EOK) {
@@ -1479,4 +1518,7 @@
 
 	ui_run(ui);
+
+	fibril_timer_clear(demo.timer);
+	fibril_timer_destroy(demo.timer);
 
 	ui_window_destroy(window);
