Index: uspace/lib/clui/nchoice.c
===================================================================
--- uspace/lib/clui/nchoice.c	(revision e96047c95e2e340c70836a813474717696c06c3e)
+++ uspace/lib/clui/nchoice.c	(revision 9854a8faee04ea815f8612666a6e4dac63db2748)
@@ -35,4 +35,5 @@
 #include <errno.h>
 #include <nchoice.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <str.h>
@@ -94,7 +95,7 @@
 }
 
-#include <stdio.h>
 /** Add option to numerical choice */
-int nchoice_add(nchoice_t *choice, const char *opttext, void *arg)
+int nchoice_add(nchoice_t *choice, const char *opttext, void *arg,
+    nchoice_flag_t flags)
 {
 	nchoice_opt_t *opt;
@@ -114,4 +115,12 @@
 	opt->arg = arg;
 	list_append(&opt->lchoice, &choice->opts);
+
+	if ((flags & ncf_default) != 0) {
+		/* Set this option as the default */
+		assert(choice->def_opt == NULL);
+
+		choice->def_opt = opt;
+	}
+
 	return EOK;
 }
@@ -125,15 +134,33 @@
 	unsigned long c;
 	char *eptr;
+	char *istr;
+	int def_i;
 
 again:
 	printf("%s\n", choice->prompt);
 
+	def_i = 0;
 	i = 1;
 	list_foreach(choice->opts, lchoice, nchoice_opt_t, opt) {
-		printf("%d: %s\n", i, opt->text);
+		printf("%d: %s%s\n", i, opt->text, opt == choice->def_opt ?
+		    " [default]" : "");
+		if (opt == choice->def_opt)
+			def_i = i;
 		++i;
 	}
 
-	rc = tinput_read(choice->tinput, &str);
+	if (def_i > 0) {
+		rc = asprintf(&istr, "%d", def_i);
+		if (rc < 0)
+			return ENOMEM;
+	} else {
+		istr = str_dup("");
+		if (istr == NULL)
+			return ENOMEM;
+	}
+
+	rc = tinput_read_i(choice->tinput, istr, &str);
+	free(istr);
+
 	if (rc != EOK) {
 		assert(rc == EIO || rc == ENOENT);
Index: uspace/lib/clui/nchoice.h
===================================================================
--- uspace/lib/clui/nchoice.h	(revision e96047c95e2e340c70836a813474717696c06c3e)
+++ uspace/lib/clui/nchoice.h	(revision 9854a8faee04ea815f8612666a6e4dac63db2748)
@@ -40,4 +40,9 @@
 #include <tinput.h>
 
+typedef enum {
+	/** This is the default option */
+	ncf_default = 1
+} nchoice_flag_t;
+
 typedef struct {
 	/** Link to nchoice_t.opts */
@@ -56,4 +61,6 @@
 	/** Text input */
 	tinput_t *tinput;
+	/** Default option */
+	nchoice_opt_t *def_opt;
 } nchoice_t;
 
@@ -61,5 +68,5 @@
 extern void nchoice_destroy(nchoice_t *);
 extern int nchoice_set_prompt(nchoice_t *, const char *);
-extern int nchoice_add(nchoice_t *, const char *, void *);
+extern int nchoice_add(nchoice_t *, const char *, void *, nchoice_flag_t);
 extern int nchoice_get(nchoice_t *, void **);
 
Index: uspace/lib/clui/tinput.c
===================================================================
--- uspace/lib/clui/tinput.c	(revision e96047c95e2e340c70836a813474717696c06c3e)
+++ uspace/lib/clui/tinput.c	(revision 9854a8faee04ea815f8612666a6e4dac63db2748)
@@ -457,5 +457,5 @@
 }
 
-static void tinput_set_str(tinput_t *ti, char *str)
+static void tinput_set_str(tinput_t *ti, const char *str)
 {
 	str_to_wstr(ti->buffer, INPUT_MAX_SIZE, str);
@@ -853,8 +853,9 @@
 }
 
-/** Read in one line of input.
- *
- * @param ti   Text input.
- * @param dstr Place to save pointer to new string.
+/** Read in one line of input with initial text provided.
+ *
+ * @param ti   Text input
+ * @param istr Initial string
+ * @param dstr Place to save pointer to new string
  *
  * @return EOK on success
@@ -863,5 +864,5 @@
  *
  */
-int tinput_read(tinput_t *ti, char **dstr)
+int tinput_read_i(tinput_t *ti, const char *istr, char **dstr)
 {
 	console_flush(ti->console);
@@ -869,8 +870,7 @@
 		return EIO;
 	
-	ti->pos = 0;
+	tinput_set_str(ti, istr);
+
 	ti->sel_start = 0;
-	ti->nc = 0;
-	ti->buffer[0] = '\0';
 	ti->done = false;
 	ti->exit_clui = false;
@@ -916,4 +916,19 @@
 }
 
+/** Read in one line of input.
+ *
+ * @param ti   Text input
+ * @param dstr Place to save pointer to new string.
+ *
+ * @return EOK on success
+ * @return ENOENT if user requested abort
+ * @return EIO if communication with console failed
+ *
+ */
+int tinput_read(tinput_t *ti, char **dstr)
+{
+	return tinput_read_i(ti, "", dstr);
+}
+
 static void tinput_key_ctrl(tinput_t *ti, kbd_event_t *ev)
 {
Index: uspace/lib/clui/tinput.h
===================================================================
--- uspace/lib/clui/tinput.h	(revision e96047c95e2e340c70836a813474717696c06c3e)
+++ uspace/lib/clui/tinput.h	(revision 9854a8faee04ea815f8612666a6e4dac63db2748)
@@ -159,4 +159,5 @@
 extern void tinput_destroy(tinput_t *);
 extern int tinput_read(tinput_t *, char **);
+extern int tinput_read_i(tinput_t *, const char *, char **);
 
 #endif
