More updates to the docs, and fixes to sync things with the docs.
 -Erik
diff --git a/Changelog b/Changelog
index 9496d5f..e26a850 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,5 @@
 0.43
+	* Major update to the provided documentation.
 	* Busybox now includes a shell!  It currently costs 7.5 k (plus an
 	    additional 2.5 k if you compile in command line editing).  Handles
 	    job control, has the usual set of builtins, and does everything
diff --git a/coreutils/tty.c b/coreutils/tty.c
index 8ac1c1f..6f98d1b 100644
--- a/coreutils/tty.c
+++ b/coreutils/tty.c
@@ -25,8 +25,8 @@
 #include <sys/types.h>
 
 static const char tty_usage[] = "tty\n\n"
-	"Print the file name of the terminal connected to standard input.\n"
-
+	"Print the file name of the terminal connected to standard input.\n\n"
+	"Options:\n"
 	"\t-s\tprint nothing, only return an exit status\n";
 
 extern int tty_main(int argc, char **argv)
diff --git a/coreutils/uniq.c b/coreutils/uniq.c
index 2eedb88..0324856 100644
--- a/coreutils/uniq.c
+++ b/coreutils/uniq.c
@@ -28,15 +28,9 @@
 #include <errno.h>
 
 static const char uniq_usage[] =
-	"uniq [OPTION]... [INPUT [OUTPUT]]\n"
-	"Discard all but one of successive identical lines from INPUT (or\n"
-	"standard input), writing to OUTPUT (or standard output).\n"
-	"\n"
-	"\t-h\tdisplay this help and exit\n"
-
-	"\n"
-	"A field is a run of whitespace, then non-whitespace characters.\n"
-	"Fields are skipped before chars.\n";
+	"uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
+	"Discard all but one of successive identical lines from INPUT\n"
+	"(or standard input), writing to OUTPUT (or standard output).\n";
 
 /* max chars in line */
 #define UNIQ_MAX 4096
@@ -190,4 +184,4 @@
 	exit(0);
 }
 
-/* $Id: uniq.c,v 1.8 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
diff --git a/coreutils/wc.c b/coreutils/wc.c
index 8004e62..030afa9 100644
--- a/coreutils/wc.c
+++ b/coreutils/wc.c
@@ -25,7 +25,8 @@
 
 static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
 	"Print line, word, and byte counts for each FILE, and a total line if\n"
-	"more than one FILE is specified.  With no FILE, read standard input.\n"
+	"more than one FILE is specified.  With no FILE, read standard input.\n\n"
+	"Options:\n"
 	"\t-c\tprint the byte counts\n"
 	"\t-l\tprint the newline counts\n"
 
diff --git a/coreutils/whoami.c b/coreutils/whoami.c
index 3677c2f..5c3fea1 100644
--- a/coreutils/whoami.c
+++ b/coreutils/whoami.c
@@ -25,9 +25,7 @@
 #include <pwd.h>
 
 static const char whoami_usage[] = "whoami\n\n"
-	"Print the user name associated with the current effective user id.\n"
-
-	"Same as id -un.\n";
+	"Prints the user name associated with the current effective user id.\n";
 
 extern int whoami_main(int argc, char **argv)
 {
diff --git a/coreutils/yes.c b/coreutils/yes.c
index ac67845..a822ebc 100644
--- a/coreutils/yes.c
+++ b/coreutils/yes.c
@@ -27,12 +27,18 @@
 {
 	int i;
 
-	if (argc == 1)
+	if (argc >=1 && *argv[1]=='-') {
+		usage("yes [OPTION]... [STRING]...\n\n"
+				"Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+	}
+
+	if (argc == 1) {
 		while (1)
 			if (puts("y") == EOF) {
 				perror("yes");
 				exit(FALSE);
 			}
+	}
 
 	while (1)
 		for (i = 1; i < argc; i++)
diff --git a/docs/busybox.pod b/docs/busybox.pod
index e1d2f48..9926cff 100644
--- a/docs/busybox.pod
+++ b/docs/busybox.pod
@@ -1290,6 +1290,10 @@
 
 =item sh
 
+Usage: sh
+
+lash -- the BusyBox LAme SHell (command interpreter)
+
 FIXME
 
 -------------------------------
@@ -1528,12 +1532,10 @@
 
 =item tr
 
-Usage:  
-
-  tr [-csu] string1 string2
-  tr [-cu] -d string1
-  tr [-cu] -s string1
-  tr [-cu] -ds string1 string2
+Usage:  tr [-csu] string1 string2
+        tr [-cu] -d string1
+        tr [-cu] -s string1
+        tr [-cu] -ds string1 string2
 
 Translate, squeeze, and/or delete characters from standard
 input, writing to standard output.
@@ -1559,67 +1561,162 @@
 
 =item tty
 
-FIXME
+Usage: tty
+
+Print the file name of the terminal connected to standard input.
+
+Options:
+
+        -s      print nothing, only return an exit status
+
+Example:
+
+	$ tty
+	/dev/tty2
 
 -------------------------------
 
 =item umount
 
-FIXME
+Usage: umount [flags] filesystem|directory
+
+Flags:
+
+        -a:     Unmount all file systems
+        -r:     Try to remount devices as read-only if mount is busy
+        -f:     Do not free loop device (if a loop device has been used)
+
+Example:
+
+	$ umount /dev/hdc1 
 
 -------------------------------
 
 =item uname
 
-FIXME
+Usage: uname [OPTION]...
+
+Print certain system information.  With no OPTION, same as -s.
+
+Options:
+
+        -a      print all information
+        -m      the machine (hardware) type
+        -n      print the machine's network node hostname
+        -r      print the operating system release
+        -s      print the operating system name
+        -p      print the host processor type
+        -v      print the operating system version
+
+Example:
+
+	$ uname -a
+	Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown
 
 -------------------------------
 
 =item uniq
 
-FIXME
+Usage: uniq [OPTION]... [INPUT [OUTPUT]]
+
+Discard all but one of successive identical lines from INPUT
+(or standard input), writing to OUTPUT (or standard output).
+
+Example:
+
+	$ echo -e "a\na\nb\nc\nc\na" | sort | uniq
+	a
+	b
+	c
 
 -------------------------------
 
 =item update
 
-FIXME
+Usage: update [options]
+
+Periodically flushes filesystem buffers.
+
+Options:
+
+        -S      force use of sync(2) instead of flushing
+        -s SECS call sync this often (default 30)
+        -f SECS flush some buffers this often (default 5)
 
 -------------------------------
 
 =item uptime
 
-FIXME
+Usage: uptime
+
+Tells how long the system has been running since boot.
+
+Example:
+
+	$ uptime
+	  1:55pm  up  2:30, load average: 0.09, 0.04, 0.00
 
 -------------------------------
 
 =item usleep
 
-FIXME
+Usage: usleep N
+
+Pauses for N microseconds.
+
+Example:
+
+	$ usleep 1000000
+	[pauses for 1 second]
 
 -------------------------------
 
 =item wc
 
-FIXME
+Usage: wc [OPTION]... [FILE]...
+
+Print line, word, and byte counts for each FILE, and a total line if
+more than one FILE is specified.  With no FILE, read standard input.
+
+Options:
+
+        -c      print the byte counts
+        -l      print the newline counts
+        -L      print the length of the longest line
+        -w      print the word counts
+
+Example:
+
+	$ wc /etc/passwd
+	     31      46    1365 /etc/passwd
 
 -------------------------------
 
 =item whoami
 
-FIXME
+Usage: whoami
+
+Prints the user name associated with the current effective user id.
+
+Example:
+
+	$ whoami
+	andersen
 
 -------------------------------
 
 =item yes
 
-FIXME
+Usage: yes [OPTION]... [STRING]...
+
+Repeatedly outputs a line with all specified STRING(s), or `y'.
 
 -------------------------------
 
 =item zcat
 
-FIXME
+This is essentially an alias for invoking "gunzip -c", where 
+it decompresses the file inquestion and send the output to stdout. 
 
 -------------------------------
 
@@ -1684,4 +1781,4 @@
 
 =cut
 
-# $Id: busybox.pod,v 1.12 2000/04/17 05:13:59 beppu Exp $
+# $Id: busybox.pod,v 1.13 2000/04/17 16:16:10 erik Exp $
diff --git a/lash.c b/lash.c
index 44ffe96..bd95ba7 100644
--- a/lash.c
+++ b/lash.c
@@ -961,9 +961,12 @@
 		fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
 		fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
 	} else {
+		if (*argv[1]=='-') {
+			usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+		}
 		input = fopen(argv[1], "r");
 		if (!input) {
-			fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+			fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
 					   strerror(errno));
 		}
 	}
diff --git a/miscutils/update.c b/miscutils/update.c
index bb77c5f..1e3e032 100644
--- a/miscutils/update.c
+++ b/miscutils/update.c
@@ -35,10 +35,12 @@
 #endif							/* __GLIBC__ */
 
 static char update_usage[] =
-	"update [options]\n"
-	"  -S\tforce use of sync(2) instead of flushing\n"
-	"  -s SECS\tcall sync this often (default 30)\n"
-	"  -f SECS\tflush some buffers this often (default 5)\n";
+	"update [options]\n\n"
+	"Periodically flushes filesystem buffers.\n\n"
+	"Options:\n"
+	"\t-S\tforce use of sync(2) instead of flushing\n"
+	"\t-s SECS\tcall sync this often (default 30)\n"
+	"\t-f SECS\tflush some buffers this often (default 5)\n";
 
 static unsigned int sync_duration = 30;
 static unsigned int flush_duration = 5;
@@ -48,6 +50,8 @@
 {
 	int pid;
 
+	argc--;
+	argv++;
 	while (**argv == '-') {
 		while (*++(*argv)) {
 			switch (**argv) {
@@ -62,6 +66,8 @@
 				if (--argc < 1) usage(update_usage);
 				flush_duration = atoi(*(++argv));
 				break;
+			default:
+				usage(update_usage);
 			}
 		}
 		argc--;
@@ -100,7 +106,7 @@
 			}
 		}
 	}
-	return TRUE;
+	exit( TRUE);
 }
 
 /*
diff --git a/sh.c b/sh.c
index 44ffe96..bd95ba7 100644
--- a/sh.c
+++ b/sh.c
@@ -961,9 +961,12 @@
 		fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
 		fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
 	} else {
+		if (*argv[1]=='-') {
+			usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+		}
 		input = fopen(argv[1], "r");
 		if (!input) {
-			fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+			fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
 					   strerror(errno));
 		}
 	}
diff --git a/shell/lash.c b/shell/lash.c
index 44ffe96..bd95ba7 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -961,9 +961,12 @@
 		fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
 		fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
 	} else {
+		if (*argv[1]=='-') {
+			usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+		}
 		input = fopen(argv[1], "r");
 		if (!input) {
-			fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+			fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
 					   strerror(errno));
 		}
 	}
diff --git a/tty.c b/tty.c
index 8ac1c1f..6f98d1b 100644
--- a/tty.c
+++ b/tty.c
@@ -25,8 +25,8 @@
 #include <sys/types.h>
 
 static const char tty_usage[] = "tty\n\n"
-	"Print the file name of the terminal connected to standard input.\n"
-
+	"Print the file name of the terminal connected to standard input.\n\n"
+	"Options:\n"
 	"\t-s\tprint nothing, only return an exit status\n";
 
 extern int tty_main(int argc, char **argv)
diff --git a/uniq.c b/uniq.c
index 2eedb88..0324856 100644
--- a/uniq.c
+++ b/uniq.c
@@ -28,15 +28,9 @@
 #include <errno.h>
 
 static const char uniq_usage[] =
-	"uniq [OPTION]... [INPUT [OUTPUT]]\n"
-	"Discard all but one of successive identical lines from INPUT (or\n"
-	"standard input), writing to OUTPUT (or standard output).\n"
-	"\n"
-	"\t-h\tdisplay this help and exit\n"
-
-	"\n"
-	"A field is a run of whitespace, then non-whitespace characters.\n"
-	"Fields are skipped before chars.\n";
+	"uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
+	"Discard all but one of successive identical lines from INPUT\n"
+	"(or standard input), writing to OUTPUT (or standard output).\n";
 
 /* max chars in line */
 #define UNIQ_MAX 4096
@@ -190,4 +184,4 @@
 	exit(0);
 }
 
-/* $Id: uniq.c,v 1.8 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
diff --git a/update.c b/update.c
index bb77c5f..1e3e032 100644
--- a/update.c
+++ b/update.c
@@ -35,10 +35,12 @@
 #endif							/* __GLIBC__ */
 
 static char update_usage[] =
-	"update [options]\n"
-	"  -S\tforce use of sync(2) instead of flushing\n"
-	"  -s SECS\tcall sync this often (default 30)\n"
-	"  -f SECS\tflush some buffers this often (default 5)\n";
+	"update [options]\n\n"
+	"Periodically flushes filesystem buffers.\n\n"
+	"Options:\n"
+	"\t-S\tforce use of sync(2) instead of flushing\n"
+	"\t-s SECS\tcall sync this often (default 30)\n"
+	"\t-f SECS\tflush some buffers this often (default 5)\n";
 
 static unsigned int sync_duration = 30;
 static unsigned int flush_duration = 5;
@@ -48,6 +50,8 @@
 {
 	int pid;
 
+	argc--;
+	argv++;
 	while (**argv == '-') {
 		while (*++(*argv)) {
 			switch (**argv) {
@@ -62,6 +66,8 @@
 				if (--argc < 1) usage(update_usage);
 				flush_duration = atoi(*(++argv));
 				break;
+			default:
+				usage(update_usage);
 			}
 		}
 		argc--;
@@ -100,7 +106,7 @@
 			}
 		}
 	}
-	return TRUE;
+	exit( TRUE);
 }
 
 /*
diff --git a/wc.c b/wc.c
index 8004e62..030afa9 100644
--- a/wc.c
+++ b/wc.c
@@ -25,7 +25,8 @@
 
 static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
 	"Print line, word, and byte counts for each FILE, and a total line if\n"
-	"more than one FILE is specified.  With no FILE, read standard input.\n"
+	"more than one FILE is specified.  With no FILE, read standard input.\n\n"
+	"Options:\n"
 	"\t-c\tprint the byte counts\n"
 	"\t-l\tprint the newline counts\n"
 
diff --git a/whoami.c b/whoami.c
index 3677c2f..5c3fea1 100644
--- a/whoami.c
+++ b/whoami.c
@@ -25,9 +25,7 @@
 #include <pwd.h>
 
 static const char whoami_usage[] = "whoami\n\n"
-	"Print the user name associated with the current effective user id.\n"
-
-	"Same as id -un.\n";
+	"Prints the user name associated with the current effective user id.\n";
 
 extern int whoami_main(int argc, char **argv)
 {
diff --git a/yes.c b/yes.c
index ac67845..a822ebc 100644
--- a/yes.c
+++ b/yes.c
@@ -27,12 +27,18 @@
 {
 	int i;
 
-	if (argc == 1)
+	if (argc >=1 && *argv[1]=='-') {
+		usage("yes [OPTION]... [STRING]...\n\n"
+				"Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+	}
+
+	if (argc == 1) {
 		while (1)
 			if (puts("y") == EOF) {
 				perror("yes");
 				exit(FALSE);
 			}
+	}
 
 	while (1)
 		for (i = 1; i < argc; i++)