Index: kernel/generic/include/console/kconsole.h
===================================================================
--- kernel/generic/include/console/kconsole.h	(revision 83b2e73cff9600732dbb3989f0c4ace16146a3ff)
+++ kernel/generic/include/console/kconsole.h	(revision 6a75c1348f4cecc4045deb137aaa5b67b4adf133)
@@ -88,4 +88,6 @@
 	/** Function for printing detailed help. */
 	void (* help)(void);
+	/** Function for enumerating hints for arguments. */
+	hints_enum_func_t hints_enum;
 } cmd_info_t;
 
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision 83b2e73cff9600732dbb3989f0c4ace16146a3ff)
+++ kernel/generic/src/console/kconsole.c	(revision 6a75c1348f4cecc4045deb137aaa5b67b4adf133)
@@ -286,4 +286,41 @@
 }
 
+NO_TRACE static cmd_info_t *parse_cmd(const wchar_t *cmdline)
+{
+	size_t start = 0;
+	size_t end;
+	char *tmp;
+	
+	while (isspace(cmdline[start]))
+		start++;
+	end = start + 1;
+	while (!isspace(cmdline[end]))
+		end++;
+	
+	tmp = malloc(STR_BOUNDS(end - start + 1), 0);
+	
+	wstr_to_str(tmp, end - start + 1, &cmdline[start]);
+	
+	spinlock_lock(&cmd_lock);
+	
+	list_foreach(cmd_list, link, cmd_info_t, hlp) {
+		spinlock_lock(&hlp->lock);
+		
+		if (str_cmp(hlp->name, tmp) == 0) {
+			spinlock_unlock(&hlp->lock);
+			spinlock_unlock(&cmd_lock);
+			free(tmp);
+			return hlp;
+		}
+		
+		spinlock_unlock(&hlp->lock);
+	}
+	
+	free(tmp);
+	spinlock_unlock(&cmd_lock);
+	
+	return NULL;
+}
+
 NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev)
 {
@@ -345,8 +382,13 @@
 			if (beg == 0) {
 				/* Command completion */
-				found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev, cmdtab_enum);
+				found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev,
+				    cmdtab_enum);
 			} else {
-				/* Symbol completion */
-				found = symtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev);
+				/* Arguments completion */
+				cmd_info_t *cmd = parse_cmd(current);
+				if (!cmd || !cmd->hints_enum)
+					continue;
+				found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev,
+				    cmd->hints_enum);
 			}
 			
