Index: uspace/app/uidemo/uidemo.c
===================================================================
--- uspace/app/uidemo/uidemo.c	(revision ce0a5afc22f9b1442f778c5cae3e4bbfb65c0973)
+++ uspace/app/uidemo/uidemo.c	(revision 943f032bca13744ba4e76927adfbff79febc57e4)
@@ -835,8 +835,17 @@
 	ui_slider_set_cb(demo.slider, &slider_cb, (void *) &demo);
 
-	rect.p0.x = 15;
-	rect.p0.y = 310;
-	rect.p1.x = 130;
-	rect.p1.y = 330;
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		rect.p0.x = 20;
+		rect.p0.y = 18;
+		rect.p1.x = 40;
+		rect.p1.y = 19;
+	} else {
+		rect.p0.x = 15;
+		rect.p0.y = 310;
+		rect.p1.x = 130;
+		rect.p1.y = 330;
+	}
+
 	ui_slider_set_rect(demo.slider, &rect);
 
Index: uspace/lib/ui/private/slider.h
===================================================================
--- uspace/lib/ui/private/slider.h	(revision ce0a5afc22f9b1442f778c5cae3e4bbfb65c0973)
+++ uspace/lib/ui/private/slider.h	(revision 943f032bca13744ba4e76927adfbff79febc57e4)
@@ -66,4 +66,7 @@
 };
 
+extern errno_t ui_slider_paint_gfx(ui_slider_t *);
+extern errno_t ui_slider_paint_text(ui_slider_t *);
+
 #endif
 
Index: uspace/lib/ui/src/slider.c
===================================================================
--- uspace/lib/ui/src/slider.c	(revision ce0a5afc22f9b1442f778c5cae3e4bbfb65c0973)
+++ uspace/lib/ui/src/slider.c	(revision 943f032bca13744ba4e76927adfbff79febc57e4)
@@ -38,4 +38,5 @@
 #include <gfx/context.h>
 #include <gfx/render.h>
+#include <gfx/text.h>
 #include <io/pos_event.h>
 #include <stdlib.h>
@@ -57,4 +58,6 @@
 	/** Slider button height */
 	ui_slider_btn_h = 23,
+	/** Slider button width in text mode */
+	ui_slider_btn_w_text = 3,
 	/** Slider button frame thickness */
 	ui_slider_btn_frame_thickness = 1,
@@ -251,15 +254,18 @@
 {
 	gfx_coord2_t dims;
+	gfx_coord_t w;
 
 	gfx_rect_dims(&slider->rect, &dims);
-	return dims.x - ui_slider_btn_w;
-}
-
-/** Paint slider.
- *
- * @param slider Slider
- * @return EOK on success or an error code
- */
-errno_t ui_slider_paint(ui_slider_t *slider)
+	w = slider->res->textmode ? ui_slider_btn_w_text :
+	    ui_slider_btn_w;
+	return dims.x - w;
+}
+
+/** Paint slider in graphics mode.
+ *
+ * @param slider Slider
+ * @return EOK on success or an error code
+ */
+errno_t ui_slider_paint_gfx(ui_slider_t *slider)
 {
 	gfx_coord2_t pos;
@@ -315,4 +321,71 @@
 }
 
+/** Paint slider in text mode.
+ *
+ * @param slider Slider
+ * @return EOK on success or an error code
+ */
+errno_t ui_slider_paint_text(ui_slider_t *slider)
+{
+	gfx_coord2_t pos;
+	gfx_text_fmt_t fmt;
+	gfx_coord_t w, i;
+	char *buf;
+	errno_t rc;
+
+	/* Paint slider groove */
+
+	pos = slider->rect.p0;
+
+	gfx_text_fmt_init(&fmt);
+	fmt.color = slider->res->wnd_text_color;
+	fmt.halign = gfx_halign_left;
+	fmt.valign = gfx_valign_top;
+
+	w = slider->rect.p1.x - slider->rect.p0.x;
+	buf = malloc(w + 1);
+	if (buf == NULL)
+		return ENOMEM;
+
+	for (i = 0; i < w; i++)
+		buf[i] = '=';
+	buf[w] = '\0';
+
+	rc = gfx_puttext(slider->res->font, &pos, &fmt, buf);
+	free(buf);
+	if (rc != EOK)
+		goto error;
+
+	/* Paint slider button */
+
+	pos.x += slider->pos;
+
+	rc = gfx_puttext(slider->res->font, &pos, &fmt,
+	    "[O]");
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_update(slider->res->gc);
+	if (rc != EOK)
+		goto error;
+
+	return EOK;
+error:
+	return rc;
+}
+
+/** Paint slider.
+ *
+ * @param slider Slider
+ * @return EOK on success or an error code
+ */
+errno_t ui_slider_paint(ui_slider_t *slider)
+{
+	if (slider->res->textmode)
+		return ui_slider_paint_text(slider);
+	else
+		return ui_slider_paint_gfx(slider);
+}
+
 /** Clear slider button.
  *
@@ -324,4 +397,8 @@
 	gfx_rect_t rect;
 	errno_t rc;
+
+	/* No need to clear button in text mode */
+	if (slider->res->textmode)
+		return EOK;
 
 	ui_slider_btn_rect(slider, &rect);
Index: uspace/lib/ui/test/slider.c
===================================================================
--- uspace/lib/ui/test/slider.c	(revision ce0a5afc22f9b1442f778c5cae3e4bbfb65c0973)
+++ uspace/lib/ui/test/slider.c	(revision 943f032bca13744ba4e76927adfbff79febc57e4)
@@ -152,6 +152,6 @@
 }
 
-/** Paint slider */
-PCUT_TEST(paint)
+/** Paint slider in graphics mode */
+PCUT_TEST(paint_gfx)
 {
 	errno_t rc;
@@ -172,5 +172,35 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ui_slider_paint(slider);
+	rc = ui_slider_paint_gfx(slider);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_slider_destroy(slider);
+	ui_resource_destroy(resource);
+
+	rc = gfx_context_delete(gc);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+}
+
+/** Paint slider in text mode */
+PCUT_TEST(paint_text)
+{
+	errno_t rc;
+	gfx_context_t *gc = NULL;
+	test_gc_t tgc;
+	ui_resource_t *resource = NULL;
+	ui_slider_t *slider;
+
+	memset(&tgc, 0, sizeof(tgc));
+	rc = gfx_context_new(&ops, &tgc, &gc);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ui_resource_create(gc, false, &resource);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(resource);
+
+	rc = ui_slider_create(resource, "Hello", &slider);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ui_slider_paint_text(slider);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
