Index: uspace/app/taskbar/clock.c
===================================================================
--- uspace/app/taskbar/clock.c	(revision 50a16d9442247a3cb031c563acb875d37309385e)
+++ uspace/app/taskbar/clock.c	(revision 3fd38b24aad2f700c8aee5299ddf03c82dd4a2c7)
@@ -44,4 +44,5 @@
 #include <ui/paint.h>
 #include <ui/resource.h>
+#include <ui/ui.h>
 #include "clock.h"
 
@@ -135,4 +136,5 @@
 	gfx_context_t *gc = ui_window_get_gc(clock->window);
 	ui_resource_t *res = ui_window_get_res(clock->window);
+	ui_t *ui = ui_window_get_ui(clock->window);
 	char buf[10];
 	gfx_text_fmt_t fmt;
@@ -141,14 +143,18 @@
 	errno_t rc;
 
+	if (!ui_is_textmode(ui)) {
+		/* Paint frame */
+		rc = ui_paint_inset_frame(res, &clock->rect, &irect);
+		if (rc != EOK)
+			goto error;
+	} else {
+		irect = clock->rect;
+	}
+
+	rc = gfx_set_color(gc, ui_resource_get_wnd_face_color(res));
+	if (rc != EOK)
+		goto error;
+
 	/* Fill background */
-
-	rc = ui_paint_inset_frame(res, &clock->rect, &irect);
-	if (rc != EOK)
-		goto error;
-
-	rc = gfx_set_color(gc, ui_resource_get_wnd_face_color(res));
-	if (rc != EOK)
-		goto error;
-
 	rc = gfx_fill_rect(gc, &irect);
 	if (rc != EOK)
Index: uspace/app/taskbar/taskbar.c
===================================================================
--- uspace/app/taskbar/taskbar.c	(revision 50a16d9442247a3cb031c563acb875d37309385e)
+++ uspace/app/taskbar/taskbar.c	(revision 3fd38b24aad2f700c8aee5299ddf03c82dd4a2c7)
@@ -73,4 +73,5 @@
 	ui_wnd_params_t params;
 	taskbar_t *taskbar = NULL;
+	gfx_rect_t scr_rect;
 	gfx_rect_t rect;
 	ui_resource_t *ui_res;
@@ -86,4 +87,10 @@
 	if (rc != EOK) {
 		printf("Error creating UI on display %s.\n", display_spec);
+		goto error;
+	}
+
+	rc = ui_get_rect(taskbar->ui, &scr_rect);
+	if (rc != EOK) {
+		printf("Error getting screen dimensions.\n");
 		goto error;
 	}
@@ -94,14 +101,12 @@
 	params.style &= ~ui_wds_titlebar;
 
+	params.rect.p0.x = 0;
+	params.rect.p0.y = 0;
+	params.rect.p1.x = scr_rect.p1.x - scr_rect.p0.x;
+
 	if (ui_is_textmode(taskbar->ui)) {
-		params.rect.p0.x = 0;
-		params.rect.p0.y = 0;
-		params.rect.p1.x = 80;
 		params.rect.p1.y = 1;
 		params.style &= ~ui_wds_frame;
 	} else {
-		params.rect.p0.x = 0;
-		params.rect.p0.y = 0;
-		params.rect.p1.x = 1024;
 		params.rect.p1.y = 32;
 	}
@@ -144,8 +149,16 @@
 		goto error;
 
-	rect.p0.x = 1024 - 80;
-	rect.p0.y = 4;
-	rect.p1.x = 1024 - 4;
-	rect.p1.y = 32 - 4;
+	if (ui_is_textmode(taskbar->ui)) {
+		rect.p0.x = params.rect.p1.x - 10;
+		rect.p0.y = 0;
+		rect.p1.x = params.rect.p1.x;
+		rect.p1.y = 1;
+	} else {
+		rect.p0.x = params.rect.p1.x - 80;
+		rect.p0.y = 4;
+		rect.p1.x = params.rect.p1.x - 4;
+		rect.p1.y = 32 - 4;
+	}
+
 	taskbar_clock_set_rect(taskbar->clock, &rect);
 
Index: uspace/lib/ui/include/ui/ui.h
===================================================================
--- uspace/lib/ui/include/ui/ui.h	(revision 50a16d9442247a3cb031c563acb875d37309385e)
+++ uspace/lib/ui/include/ui/ui.h	(revision 3fd38b24aad2f700c8aee5299ddf03c82dd4a2c7)
@@ -39,4 +39,5 @@
 #include <display.h>
 #include <errno.h>
+#include <gfx/coord.h>
 #include <io/console.h>
 #include <stdbool.h>
@@ -53,4 +54,5 @@
 extern bool ui_is_textmode(ui_t *);
 extern bool ui_is_fullscreen(ui_t *);
+extern errno_t ui_get_rect(ui_t *, gfx_rect_t *);
 extern errno_t ui_suspend(ui_t *);
 extern errno_t ui_resume(ui_t *);
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision 50a16d9442247a3cb031c563acb875d37309385e)
+++ uspace/lib/ui/src/ui.c	(revision 3fd38b24aad2f700c8aee5299ddf03c82dd4a2c7)
@@ -524,4 +524,37 @@
 }
 
+/** Get UI screen rectangle.
+ *
+ * @param ui User interface
+ * @param rect Place to store bounding rectangle
+ */
+errno_t ui_get_rect(ui_t *ui, gfx_rect_t *rect)
+{
+	display_info_t info;
+	sysarg_t cols, rows;
+	errno_t rc;
+
+	if (ui->display != NULL) {
+		rc = display_get_info(ui->display, &info);
+		if (rc != EOK)
+			return rc;
+
+		*rect = info.rect;
+	} else if (ui->console != NULL) {
+		rc = console_get_size(ui->console, &cols, &rows);
+		if (rc != EOK)
+			return rc;
+
+		rect->p0.x = 0;
+		rect->p0.y = 0;
+		rect->p1.x = cols;
+		rect->p1.y = rows;
+	} else {
+		return ENOTSUP;
+	}
+
+	return EOK;
+}
+
 /** Get clickmatic from UI.
  *
Index: uspace/lib/ui/test/ui.c
===================================================================
--- uspace/lib/ui/test/ui.c	(revision 50a16d9442247a3cb031c563acb875d37309385e)
+++ uspace/lib/ui/test/ui.c	(revision 3fd38b24aad2f700c8aee5299ddf03c82dd4a2c7)
@@ -169,4 +169,22 @@
 }
 
+/** ui_is_get_rect() */
+PCUT_TEST(get_rect)
+{
+	ui_t *ui = NULL;
+	gfx_rect_t rect;
+	errno_t rc;
+
+	rc = ui_create_disp(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	/* This won't work without a display service */
+	rc = ui_get_rect(ui, &rect);
+	PCUT_ASSERT_ERRNO_VAL(ENOTSUP, rc);
+
+	ui_destroy(ui);
+}
+
 /** ui_lock(), ui_unlock() */
 PCUT_TEST(lock_unlock)
