Index: uspace/lib/ui/src/entry.c
===================================================================
--- uspace/lib/ui/src/entry.c	(revision 37d0dd4b9628fc723cdd84d203dd947e317e7007)
+++ uspace/lib/ui/src/entry.c	(revision 65ec18dd0204fe82f5c6cafac5e2fa80b27d3c04)
@@ -60,5 +60,8 @@
 	ui_entry_vpad = 4,
 	ui_entry_hpad_text = 1,
-	ui_entry_vpad_text = 0
+	ui_entry_vpad_text = 0,
+	ui_entry_cursor_overshoot = 1,
+	ui_entry_cursor_width = 2,
+	ui_entry_cursor_width_text = 1
 };
 
@@ -178,4 +181,38 @@
 
 	return EOK;
+}
+
+static errno_t ui_entry_paint_cursor(ui_entry_t *entry, gfx_coord2_t *pos)
+{
+	ui_resource_t *res;
+	gfx_rect_t rect;
+	gfx_font_metrics_t metrics;
+	gfx_coord_t w;
+	errno_t rc;
+
+	res = ui_window_get_res(entry->window);
+
+	gfx_font_get_metrics(res->font, &metrics);
+
+	w = res->textmode ? ui_entry_cursor_width_text :
+	    ui_entry_cursor_width;
+
+	rect.p0.x = pos->x;
+	rect.p0.y = pos->y - ui_entry_cursor_overshoot;
+	rect.p1.x = pos->x + w;
+	rect.p1.y = pos->y + metrics.ascent + metrics.descent + 1 +
+	    ui_entry_cursor_overshoot;
+
+	rc = gfx_set_color(res->gc, res->entry_fg_color);
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_fill_rect(res->gc, &rect);
+	if (rc != EOK)
+		goto error;
+
+	return EOK;
+error:
+	return rc;
 }
 
@@ -261,5 +298,5 @@
 		pos.x += width;
 
-		rc = gfx_puttext(res->font, &pos, &fmt, "_");
+		rc = ui_entry_paint_cursor(entry, &pos);
 		if (rc != EOK) {
 			(void) gfx_set_clip_rect(res->gc, NULL);
