Centralize handling of --help.
diff --git a/applets/busybox.c b/applets/busybox.c
index c7e8ccb..0c291d0 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -37,325 +37,325 @@
 const struct BB_applet applets[] = {
 
 #ifdef BB_AR
-	{"ar", ar_main, _BB_DIR_USR_BIN},
+	{"ar", ar_main, _BB_DIR_USR_BIN, ar_usage},
 #endif
 #ifdef BB_BASENAME
-	{"basename", basename_main, _BB_DIR_USR_BIN},
+	{"basename", basename_main, _BB_DIR_USR_BIN, basename_usage},
 #endif
-	{"busybox", busybox_main, _BB_DIR_BIN},
+	{"busybox", busybox_main, _BB_DIR_BIN, NULL},
 #ifdef BB_CAT
-	{"cat", cat_main, _BB_DIR_BIN},
+	{"cat", cat_main, _BB_DIR_BIN, cat_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN, chgrp_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN, chmod_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN, chown_usage},
 #endif
 #ifdef BB_CHROOT
-	{"chroot", chroot_main, _BB_DIR_SBIN},
+	{"chroot", chroot_main, _BB_DIR_SBIN, chroot_usage},
 #endif
 #ifdef BB_CLEAR
-	{"clear", clear_main, _BB_DIR_USR_BIN},
+	{"clear", clear_main, _BB_DIR_USR_BIN, clear_usage},
 #endif
 #ifdef BB_CHVT
-	{"chvt", chvt_main, _BB_DIR_USR_BIN},
+	{"chvt", chvt_main, _BB_DIR_USR_BIN, chvt_usage},
 #endif
 #ifdef BB_CP_MV
-	{"cp", cp_mv_main, _BB_DIR_BIN},
+	{"cp", cp_mv_main, _BB_DIR_BIN, cp_usage},
 #endif
 #ifdef BB_CUT
-	{"cut", cut_main, _BB_DIR_USR_BIN},
+	{"cut", cut_main, _BB_DIR_USR_BIN, cut_usage},
 #endif
 #ifdef BB_DATE
-	{"date", date_main, _BB_DIR_BIN},
+	{"date", date_main, _BB_DIR_BIN, date_usage},
 #endif
 #ifdef BB_DC
-	{"dc", dc_main, _BB_DIR_USR_BIN},
+	{"dc", dc_main, _BB_DIR_USR_BIN, dc_usage},
 #endif
 #ifdef BB_DD
-	{"dd", dd_main, _BB_DIR_BIN},
+	{"dd", dd_main, _BB_DIR_BIN, dd_usage},
 #endif
 #ifdef BB_DF
-	{"df", df_main, _BB_DIR_BIN},
+	{"df", df_main, _BB_DIR_BIN, df_usage},
 #endif
 #ifdef BB_DIRNAME
-	{"dirname", dirname_main, _BB_DIR_USR_BIN},
+	{"dirname", dirname_main, _BB_DIR_USR_BIN, dirname_usage},
 #endif
 #ifdef BB_DMESG
-	{"dmesg", dmesg_main, _BB_DIR_BIN},
+	{"dmesg", dmesg_main, _BB_DIR_BIN, dmesg_usage},
 #endif
 #ifdef BB_DU
-	{"du", du_main, _BB_DIR_BIN},
+	{"du", du_main, _BB_DIR_BIN, du_usage},
 #endif
 #ifdef BB_DUMPKMAP
-	{"dumpkmap", dumpkmap_main, _BB_DIR_BIN},
+	{"dumpkmap", dumpkmap_main, _BB_DIR_BIN, dumpkmap_usage},
 #endif
 #ifdef BB_DUTMP
-	{"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
+	{"dutmp", dutmp_main, _BB_DIR_USR_SBIN, dutmp_usage},
 #endif
 #ifdef BB_ECHO
-	{"echo", echo_main, _BB_DIR_BIN},
+	{"echo", echo_main, _BB_DIR_BIN, echo_usage},
 #endif
 #ifdef BB_TRUE_FALSE
-	{"false", false_main, _BB_DIR_BIN},
+	{"false", false_main, _BB_DIR_BIN, false_usage},
 #endif
 #ifdef BB_FBSET
-	{"fbset", fbset_main, _BB_DIR_USR_SBIN},
+	{"fbset", fbset_main, _BB_DIR_USR_SBIN, NULL},
 #endif
 #ifdef BB_FDFLUSH
-	{"fdflush", fdflush_main, _BB_DIR_BIN},
+	{"fdflush", fdflush_main, _BB_DIR_BIN, fdflush_usage},
 #endif
 #ifdef BB_FIND
-	{"find", find_main, _BB_DIR_USR_BIN},
+	{"find", find_main, _BB_DIR_USR_BIN, find_usage},
 #endif
 #ifdef BB_FREE
-	{"free", free_main, _BB_DIR_USR_BIN},
+	{"free", free_main, _BB_DIR_USR_BIN, free_usage},
 #endif
 #ifdef BB_FREERAMDISK
-	{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN},
+	{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN, freeramdisk_usage},
 #endif
 #ifdef BB_DEALLOCVT
-	{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN},
+	{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN, deallocvt_usage},
 #endif
 #ifdef BB_FSCK_MINIX
-	{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
+	{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN, fsck_minix_usage},
 #endif
 #ifdef BB_GREP
-	{"grep", grep_main, _BB_DIR_BIN},
+	{"grep", grep_main, _BB_DIR_BIN, grep_usage},
 #endif
 #ifdef BB_GUNZIP
-	{"gunzip", gunzip_main, _BB_DIR_BIN},
+	{"gunzip", gunzip_main, _BB_DIR_BIN, gunzip_usage},
 #endif
 #ifdef BB_GZIP
-	{"gzip", gzip_main, _BB_DIR_BIN},
+	{"gzip", gzip_main, _BB_DIR_BIN, gzip_usage},
 #endif
 #ifdef BB_HALT
-	{"halt", halt_main, _BB_DIR_SBIN},
+	{"halt", halt_main, _BB_DIR_SBIN, halt_usage},
 #endif
 #ifdef BB_HEAD
-	{"head", head_main, _BB_DIR_USR_BIN},
+	{"head", head_main, _BB_DIR_USR_BIN, head_usage},
 #endif
 #ifdef BB_HOSTID
-	{"hostid", hostid_main, _BB_DIR_USR_BIN},
+	{"hostid", hostid_main, _BB_DIR_USR_BIN, hostid_usage},
 #endif
 #ifdef BB_HOSTNAME
-	{"hostname", hostname_main, _BB_DIR_BIN},
+	{"hostname", hostname_main, _BB_DIR_BIN, hostname_usage},
 #endif
 #ifdef BB_ID
-	{"id", id_main, _BB_DIR_USR_BIN},
+	{"id", id_main, _BB_DIR_USR_BIN, id_usage},
 #endif
 #ifdef BB_INIT
-	{"init", init_main, _BB_DIR_SBIN},
+	{"init", init_main, _BB_DIR_SBIN, NULL},
 #endif
 #ifdef BB_INSMOD
-	{"insmod", insmod_main, _BB_DIR_SBIN},
+	{"insmod", insmod_main, _BB_DIR_SBIN, insmod_usage},
 #endif
 #ifdef BB_KILL
-	{"kill", kill_main, _BB_DIR_BIN},
+	{"kill", kill_main, _BB_DIR_BIN, kill_usage},
 #endif
 #ifdef BB_KILLALL
-	{"killall", kill_main, _BB_DIR_USR_BIN},
+	{"killall", kill_main, _BB_DIR_USR_BIN, kill_usage},
 #endif
 #ifdef BB_LENGTH
-	{"length", length_main, _BB_DIR_USR_BIN},
+	{"length", length_main, _BB_DIR_USR_BIN, length_usage},
 #endif
 #ifdef BB_LINUXRC
-	{"linuxrc", init_main, _BB_DIR_ROOT},
+	{"linuxrc", init_main, _BB_DIR_ROOT, init_usage},
 #endif
 #ifdef BB_LN
-	{"ln", ln_main, _BB_DIR_BIN},
+	{"ln", ln_main, _BB_DIR_BIN, ln_usage},
 #endif
 #ifdef BB_LOADACM
-	{"loadacm", loadacm_main, _BB_DIR_USR_BIN},
+	{"loadacm", loadacm_main, _BB_DIR_USR_BIN, loadacm_usage},
 #endif
 #ifdef BB_LOADFONT
-	{"loadfont", loadfont_main, _BB_DIR_USR_BIN},
+	{"loadfont", loadfont_main, _BB_DIR_USR_BIN, loadfont_usage},
 #endif
 #ifdef BB_LOADKMAP
-	{"loadkmap", loadkmap_main, _BB_DIR_SBIN},
+	{"loadkmap", loadkmap_main, _BB_DIR_SBIN, loadkmap_usage},
 #endif
 #ifdef BB_LOGGER
-	{"logger", logger_main, _BB_DIR_USR_BIN},
+	{"logger", logger_main, _BB_DIR_USR_BIN, logger_usage},
 #endif
 #ifdef BB_LOGNAME
-	{"logname", logname_main, _BB_DIR_USR_BIN},
+	{"logname", logname_main, _BB_DIR_USR_BIN, logname_usage},
 #endif
 #ifdef BB_LS
-	{"ls", ls_main, _BB_DIR_BIN},
+	{"ls", ls_main, _BB_DIR_BIN, ls_usage},
 #endif
 #ifdef BB_LSMOD
-	{"lsmod", lsmod_main, _BB_DIR_SBIN},
+	{"lsmod", lsmod_main, _BB_DIR_SBIN, lsmod_usage},
 #endif
 #ifdef BB_MAKEDEVS
-	{"makedevs", makedevs_main, _BB_DIR_SBIN},
+	{"makedevs", makedevs_main, _BB_DIR_SBIN, makedevs_usage},
 #endif
 #ifdef BB_MD5SUM
-	{"md5sum", md5sum_main, _BB_DIR_USR_BIN},
+	{"md5sum", md5sum_main, _BB_DIR_USR_BIN, md5sum_usage},
 #endif
 #ifdef BB_MKDIR
-	{"mkdir", mkdir_main, _BB_DIR_BIN},
+	{"mkdir", mkdir_main, _BB_DIR_BIN, mkdir_usage},
 #endif
 #ifdef BB_MKFIFO
-	{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
+	{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN, mkfifo_usage},
 #endif
 #ifdef BB_MKFS_MINIX
-	{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
+	{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN, mkfs_minix_usage},
 #endif
 #ifdef BB_MKNOD
-	{"mknod", mknod_main, _BB_DIR_BIN},
+	{"mknod", mknod_main, _BB_DIR_BIN, mknod_usage},
 #endif
 #ifdef BB_MKSWAP
-	{"mkswap", mkswap_main, _BB_DIR_SBIN},
+	{"mkswap", mkswap_main, _BB_DIR_SBIN, mkswap_usage},
 #endif
 #ifdef BB_MKTEMP
-	{"mktemp", mktemp_main, _BB_DIR_BIN},
+	{"mktemp", mktemp_main, _BB_DIR_BIN, mktemp_usage},
 #endif
 #ifdef BB_NC
-	{"nc", nc_main, _BB_DIR_USR_BIN},
+	{"nc", nc_main, _BB_DIR_USR_BIN, nc_usage},
 #endif
 #ifdef BB_MORE
-	{"more", more_main, _BB_DIR_BIN},
+	{"more", more_main, _BB_DIR_BIN, more_usage},
 #endif
 #ifdef BB_MOUNT
-	{"mount", mount_main, _BB_DIR_BIN},
+	{"mount", mount_main, _BB_DIR_BIN, mount_usage},
 #endif
 #ifdef BB_MT
-	{"mt", mt_main, _BB_DIR_BIN},
+	{"mt", mt_main, _BB_DIR_BIN, mt_usage},
 #endif
 #ifdef BB_CP_MV
-	{"mv", cp_mv_main, _BB_DIR_BIN},
+	{"mv", cp_mv_main, _BB_DIR_BIN, mv_usage},
 #endif
 #ifdef BB_NSLOOKUP
-	{"nslookup", nslookup_main, _BB_DIR_USR_BIN},
+	{"nslookup", nslookup_main, _BB_DIR_USR_BIN, nslookup_usage},
 #endif
 #ifdef BB_PING
-	{"ping", ping_main, _BB_DIR_BIN},
+	{"ping", ping_main, _BB_DIR_BIN, ping_usage},
 #endif
 #ifdef BB_POWEROFF
-	{"poweroff", poweroff_main, _BB_DIR_SBIN},
+	{"poweroff", poweroff_main, _BB_DIR_SBIN, poweroff_usage},
 #endif
 #ifdef BB_PRINTF
-	{"printf", printf_main, _BB_DIR_USR_BIN},
+	{"printf", printf_main, _BB_DIR_USR_BIN, printf_usage},
 #endif
 #ifdef BB_PS
-	{"ps", ps_main, _BB_DIR_BIN},
+	{"ps", ps_main, _BB_DIR_BIN, ps_usage},
 #endif
 #ifdef BB_PWD
-	{"pwd", pwd_main, _BB_DIR_BIN},
+	{"pwd", pwd_main, _BB_DIR_BIN, pwd_usage},
 #endif
 #ifdef BB_REBOOT
-	{"reboot", reboot_main, _BB_DIR_SBIN},
+	{"reboot", reboot_main, _BB_DIR_SBIN, reboot_usage},
 #endif
 #ifdef BB_RM
-	{"rm", rm_main, _BB_DIR_BIN},
+	{"rm", rm_main, _BB_DIR_BIN, rm_usage},
 #endif
 #ifdef BB_RMDIR
-	{"rmdir", rmdir_main, _BB_DIR_BIN},
+	{"rmdir", rmdir_main, _BB_DIR_BIN, rmdir_usage},
 #endif
 #ifdef BB_RMMOD
-	{"rmmod", rmmod_main, _BB_DIR_SBIN},
+	{"rmmod", rmmod_main, _BB_DIR_SBIN, rmmod_usage},
 #endif
 #ifdef BB_SED
-	{"sed", sed_main, _BB_DIR_BIN},
+	{"sed", sed_main, _BB_DIR_BIN, sed_usage},
 #endif
 #ifdef BB_SETKEYCODES
-	{"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN},
+	{"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN, setkeycodes_usage},
 #endif
 #ifdef BB_SH
-	{"sh", shell_main, _BB_DIR_BIN},
+	{"sh", shell_main, _BB_DIR_BIN, shell_usage},
 #endif
 #ifdef BB_SLEEP
-	{"sleep", sleep_main, _BB_DIR_BIN},
+	{"sleep", sleep_main, _BB_DIR_BIN, sleep_usage},
 #endif
 #ifdef BB_SORT
-	{"sort", sort_main, _BB_DIR_BIN},
+	{"sort", sort_main, _BB_DIR_BIN, sort_usage},
 #endif
 #ifdef BB_SYNC
-	{"sync", sync_main, _BB_DIR_BIN},
+	{"sync", sync_main, _BB_DIR_BIN, sync_usage},
 #endif
 #ifdef BB_SYSLOGD
-	{"syslogd", syslogd_main, _BB_DIR_SBIN},
+	{"syslogd", syslogd_main, _BB_DIR_SBIN, syslogd_usage},
 #endif
 #ifdef BB_SWAPONOFF
-	{"swapon", swap_on_off_main, _BB_DIR_SBIN},
+	{"swapon", swap_on_off_main, _BB_DIR_SBIN, swapon_usage},
 #endif
 #ifdef BB_SWAPONOFF
-	{"swapoff", swap_on_off_main, _BB_DIR_SBIN},
+	{"swapoff", swap_on_off_main, _BB_DIR_SBIN, swapoff_usage},
 #endif
 #ifdef BB_TAIL
-	{"tail", tail_main, _BB_DIR_USR_BIN},
+	{"tail", tail_main, _BB_DIR_USR_BIN, tail_usage},
 #endif
 #ifdef BB_TAR
-	{"tar", tar_main, _BB_DIR_BIN},
+	{"tar", tar_main, _BB_DIR_BIN, tar_usage},
 #endif
 #ifdef BB_TELNET
-	{"telnet", telnet_main, _BB_DIR_USR_BIN},
+	{"telnet", telnet_main, _BB_DIR_USR_BIN, telnet_usage},
 #endif
 #ifdef BB_TEST
-	{"test", test_main, _BB_DIR_USR_BIN},
+	{"test", test_main, _BB_DIR_USR_BIN, test_usage},
 #endif
 #ifdef BB_TEE
-	{"tee", tee_main, _BB_DIR_BIN},
+	{"tee", tee_main, _BB_DIR_BIN, tee_usage},
 #endif
 #ifdef BB_TOUCH
-	{"touch", touch_main, _BB_DIR_USR_BIN},
+	{"touch", touch_main, _BB_DIR_USR_BIN, touch_usage},
 #endif
 #ifdef BB_TR
-	{"tr", tr_main, _BB_DIR_USR_BIN},
+	{"tr", tr_main, _BB_DIR_USR_BIN, tr_usage},
 #endif
 #ifdef BB_TRUE_FALSE
-	{"true", true_main, _BB_DIR_BIN},
+	{"true", true_main, _BB_DIR_BIN, true_usage},
 #endif
 #ifdef BB_TTY
-	{"tty", tty_main, _BB_DIR_USR_BIN},
+	{"tty", tty_main, _BB_DIR_USR_BIN, tty_usage},
 #endif
 #ifdef BB_UMOUNT
-	{"umount", umount_main, _BB_DIR_BIN},
+	{"umount", umount_main, _BB_DIR_BIN, umount_usage},
 #endif
 #ifdef BB_UNAME
-	{"uname", uname_main, _BB_DIR_BIN},
+	{"uname", uname_main, _BB_DIR_BIN, uname_usage},
 #endif
 #ifdef BB_UNIQ
-	{"uniq", uniq_main, _BB_DIR_USR_BIN},
+	{"uniq", uniq_main, _BB_DIR_USR_BIN, uniq_usage},
 #endif
 #ifdef BB_UPDATE
-	{"update", update_main, _BB_DIR_SBIN},
+	{"update", update_main, _BB_DIR_SBIN, update_usage},
 #endif
 #ifdef BB_UPTIME
-	{"uptime", uptime_main, _BB_DIR_USR_BIN},
+	{"uptime", uptime_main, _BB_DIR_USR_BIN, uptime_usage},
 #endif
 #ifdef BB_UUENCODE
-	{"uuencode", uuencode_main, _BB_DIR_USR_BIN},
+	{"uuencode", uuencode_main, _BB_DIR_USR_BIN, uuencode_usage},
 #endif
 #ifdef BB_UUDECODE
-	{"uudecode", uudecode_main, _BB_DIR_USR_BIN},
+	{"uudecode", uudecode_main, _BB_DIR_USR_BIN, uudecode_usage},
 #endif
 #ifdef BB_USLEEP
-	{"usleep", usleep_main, _BB_DIR_BIN},
+	{"usleep", usleep_main, _BB_DIR_BIN, usleep_usage},
 #endif
 #ifdef BB_WC
-	{"wc", wc_main, _BB_DIR_USR_BIN},
+	{"wc", wc_main, _BB_DIR_USR_BIN, wc_usage},
 #endif
 #ifdef BB_WHICH
-	{"which", which_main, _BB_DIR_USR_BIN},
+	{"which", which_main, _BB_DIR_USR_BIN, which_usage},
 #endif
 #ifdef BB_WHOAMI
-	{"whoami", whoami_main, _BB_DIR_USR_BIN},
+	{"whoami", whoami_main, _BB_DIR_USR_BIN, whoami_usage},
 #endif
 #ifdef BB_YES
-	{"yes", yes_main, _BB_DIR_USR_BIN},
+	{"yes", yes_main, _BB_DIR_USR_BIN, yes_usage},
 #endif
 #ifdef BB_GUNZIP
-	{"zcat", gunzip_main, _BB_DIR_BIN},
+	{"zcat", gunzip_main, _BB_DIR_BIN, gunzip_usage},
 #endif
 #ifdef BB_TEST
-	{"[", test_main, _BB_DIR_USR_BIN},
+	{"[", test_main, _BB_DIR_USR_BIN, test_usage},
 #endif
-	{0,NULL,0}
+	{0,NULL,0,NULL}
 };
 
 char *applet_name;
@@ -490,6 +490,8 @@
 
 	while (a->name != 0) {
 		if (strcmp(applet_name, a->name) == 0) {
+			if (a->usage && argv[1] && strcmp(argv[1], "--help") == 0)
+				usage(a->usage);
 			exit(((*(a->main)) (argc, argv)));
 		}
 		a++;
diff --git a/busybox.c b/busybox.c
index c7e8ccb..0c291d0 100644
--- a/busybox.c
+++ b/busybox.c
@@ -37,325 +37,325 @@
 const struct BB_applet applets[] = {
 
 #ifdef BB_AR
-	{"ar", ar_main, _BB_DIR_USR_BIN},
+	{"ar", ar_main, _BB_DIR_USR_BIN, ar_usage},
 #endif
 #ifdef BB_BASENAME
-	{"basename", basename_main, _BB_DIR_USR_BIN},
+	{"basename", basename_main, _BB_DIR_USR_BIN, basename_usage},
 #endif
-	{"busybox", busybox_main, _BB_DIR_BIN},
+	{"busybox", busybox_main, _BB_DIR_BIN, NULL},
 #ifdef BB_CAT
-	{"cat", cat_main, _BB_DIR_BIN},
+	{"cat", cat_main, _BB_DIR_BIN, cat_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN, chgrp_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN, chmod_usage},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-	{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
+	{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN, chown_usage},
 #endif
 #ifdef BB_CHROOT
-	{"chroot", chroot_main, _BB_DIR_SBIN},
+	{"chroot", chroot_main, _BB_DIR_SBIN, chroot_usage},
 #endif
 #ifdef BB_CLEAR
-	{"clear", clear_main, _BB_DIR_USR_BIN},
+	{"clear", clear_main, _BB_DIR_USR_BIN, clear_usage},
 #endif
 #ifdef BB_CHVT
-	{"chvt", chvt_main, _BB_DIR_USR_BIN},
+	{"chvt", chvt_main, _BB_DIR_USR_BIN, chvt_usage},
 #endif
 #ifdef BB_CP_MV
-	{"cp", cp_mv_main, _BB_DIR_BIN},
+	{"cp", cp_mv_main, _BB_DIR_BIN, cp_usage},
 #endif
 #ifdef BB_CUT
-	{"cut", cut_main, _BB_DIR_USR_BIN},
+	{"cut", cut_main, _BB_DIR_USR_BIN, cut_usage},
 #endif
 #ifdef BB_DATE
-	{"date", date_main, _BB_DIR_BIN},
+	{"date", date_main, _BB_DIR_BIN, date_usage},
 #endif
 #ifdef BB_DC
-	{"dc", dc_main, _BB_DIR_USR_BIN},
+	{"dc", dc_main, _BB_DIR_USR_BIN, dc_usage},
 #endif
 #ifdef BB_DD
-	{"dd", dd_main, _BB_DIR_BIN},
+	{"dd", dd_main, _BB_DIR_BIN, dd_usage},
 #endif
 #ifdef BB_DF
-	{"df", df_main, _BB_DIR_BIN},
+	{"df", df_main, _BB_DIR_BIN, df_usage},
 #endif
 #ifdef BB_DIRNAME
-	{"dirname", dirname_main, _BB_DIR_USR_BIN},
+	{"dirname", dirname_main, _BB_DIR_USR_BIN, dirname_usage},
 #endif
 #ifdef BB_DMESG
-	{"dmesg", dmesg_main, _BB_DIR_BIN},
+	{"dmesg", dmesg_main, _BB_DIR_BIN, dmesg_usage},
 #endif
 #ifdef BB_DU
-	{"du", du_main, _BB_DIR_BIN},
+	{"du", du_main, _BB_DIR_BIN, du_usage},
 #endif
 #ifdef BB_DUMPKMAP
-	{"dumpkmap", dumpkmap_main, _BB_DIR_BIN},
+	{"dumpkmap", dumpkmap_main, _BB_DIR_BIN, dumpkmap_usage},
 #endif
 #ifdef BB_DUTMP
-	{"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
+	{"dutmp", dutmp_main, _BB_DIR_USR_SBIN, dutmp_usage},
 #endif
 #ifdef BB_ECHO
-	{"echo", echo_main, _BB_DIR_BIN},
+	{"echo", echo_main, _BB_DIR_BIN, echo_usage},
 #endif
 #ifdef BB_TRUE_FALSE
-	{"false", false_main, _BB_DIR_BIN},
+	{"false", false_main, _BB_DIR_BIN, false_usage},
 #endif
 #ifdef BB_FBSET
-	{"fbset", fbset_main, _BB_DIR_USR_SBIN},
+	{"fbset", fbset_main, _BB_DIR_USR_SBIN, NULL},
 #endif
 #ifdef BB_FDFLUSH
-	{"fdflush", fdflush_main, _BB_DIR_BIN},
+	{"fdflush", fdflush_main, _BB_DIR_BIN, fdflush_usage},
 #endif
 #ifdef BB_FIND
-	{"find", find_main, _BB_DIR_USR_BIN},
+	{"find", find_main, _BB_DIR_USR_BIN, find_usage},
 #endif
 #ifdef BB_FREE
-	{"free", free_main, _BB_DIR_USR_BIN},
+	{"free", free_main, _BB_DIR_USR_BIN, free_usage},
 #endif
 #ifdef BB_FREERAMDISK
-	{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN},
+	{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN, freeramdisk_usage},
 #endif
 #ifdef BB_DEALLOCVT
-	{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN},
+	{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN, deallocvt_usage},
 #endif
 #ifdef BB_FSCK_MINIX
-	{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
+	{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN, fsck_minix_usage},
 #endif
 #ifdef BB_GREP
-	{"grep", grep_main, _BB_DIR_BIN},
+	{"grep", grep_main, _BB_DIR_BIN, grep_usage},
 #endif
 #ifdef BB_GUNZIP
-	{"gunzip", gunzip_main, _BB_DIR_BIN},
+	{"gunzip", gunzip_main, _BB_DIR_BIN, gunzip_usage},
 #endif
 #ifdef BB_GZIP
-	{"gzip", gzip_main, _BB_DIR_BIN},
+	{"gzip", gzip_main, _BB_DIR_BIN, gzip_usage},
 #endif
 #ifdef BB_HALT
-	{"halt", halt_main, _BB_DIR_SBIN},
+	{"halt", halt_main, _BB_DIR_SBIN, halt_usage},
 #endif
 #ifdef BB_HEAD
-	{"head", head_main, _BB_DIR_USR_BIN},
+	{"head", head_main, _BB_DIR_USR_BIN, head_usage},
 #endif
 #ifdef BB_HOSTID
-	{"hostid", hostid_main, _BB_DIR_USR_BIN},
+	{"hostid", hostid_main, _BB_DIR_USR_BIN, hostid_usage},
 #endif
 #ifdef BB_HOSTNAME
-	{"hostname", hostname_main, _BB_DIR_BIN},
+	{"hostname", hostname_main, _BB_DIR_BIN, hostname_usage},
 #endif
 #ifdef BB_ID
-	{"id", id_main, _BB_DIR_USR_BIN},
+	{"id", id_main, _BB_DIR_USR_BIN, id_usage},
 #endif
 #ifdef BB_INIT
-	{"init", init_main, _BB_DIR_SBIN},
+	{"init", init_main, _BB_DIR_SBIN, NULL},
 #endif
 #ifdef BB_INSMOD
-	{"insmod", insmod_main, _BB_DIR_SBIN},
+	{"insmod", insmod_main, _BB_DIR_SBIN, insmod_usage},
 #endif
 #ifdef BB_KILL
-	{"kill", kill_main, _BB_DIR_BIN},
+	{"kill", kill_main, _BB_DIR_BIN, kill_usage},
 #endif
 #ifdef BB_KILLALL
-	{"killall", kill_main, _BB_DIR_USR_BIN},
+	{"killall", kill_main, _BB_DIR_USR_BIN, kill_usage},
 #endif
 #ifdef BB_LENGTH
-	{"length", length_main, _BB_DIR_USR_BIN},
+	{"length", length_main, _BB_DIR_USR_BIN, length_usage},
 #endif
 #ifdef BB_LINUXRC
-	{"linuxrc", init_main, _BB_DIR_ROOT},
+	{"linuxrc", init_main, _BB_DIR_ROOT, init_usage},
 #endif
 #ifdef BB_LN
-	{"ln", ln_main, _BB_DIR_BIN},
+	{"ln", ln_main, _BB_DIR_BIN, ln_usage},
 #endif
 #ifdef BB_LOADACM
-	{"loadacm", loadacm_main, _BB_DIR_USR_BIN},
+	{"loadacm", loadacm_main, _BB_DIR_USR_BIN, loadacm_usage},
 #endif
 #ifdef BB_LOADFONT
-	{"loadfont", loadfont_main, _BB_DIR_USR_BIN},
+	{"loadfont", loadfont_main, _BB_DIR_USR_BIN, loadfont_usage},
 #endif
 #ifdef BB_LOADKMAP
-	{"loadkmap", loadkmap_main, _BB_DIR_SBIN},
+	{"loadkmap", loadkmap_main, _BB_DIR_SBIN, loadkmap_usage},
 #endif
 #ifdef BB_LOGGER
-	{"logger", logger_main, _BB_DIR_USR_BIN},
+	{"logger", logger_main, _BB_DIR_USR_BIN, logger_usage},
 #endif
 #ifdef BB_LOGNAME
-	{"logname", logname_main, _BB_DIR_USR_BIN},
+	{"logname", logname_main, _BB_DIR_USR_BIN, logname_usage},
 #endif
 #ifdef BB_LS
-	{"ls", ls_main, _BB_DIR_BIN},
+	{"ls", ls_main, _BB_DIR_BIN, ls_usage},
 #endif
 #ifdef BB_LSMOD
-	{"lsmod", lsmod_main, _BB_DIR_SBIN},
+	{"lsmod", lsmod_main, _BB_DIR_SBIN, lsmod_usage},
 #endif
 #ifdef BB_MAKEDEVS
-	{"makedevs", makedevs_main, _BB_DIR_SBIN},
+	{"makedevs", makedevs_main, _BB_DIR_SBIN, makedevs_usage},
 #endif
 #ifdef BB_MD5SUM
-	{"md5sum", md5sum_main, _BB_DIR_USR_BIN},
+	{"md5sum", md5sum_main, _BB_DIR_USR_BIN, md5sum_usage},
 #endif
 #ifdef BB_MKDIR
-	{"mkdir", mkdir_main, _BB_DIR_BIN},
+	{"mkdir", mkdir_main, _BB_DIR_BIN, mkdir_usage},
 #endif
 #ifdef BB_MKFIFO
-	{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
+	{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN, mkfifo_usage},
 #endif
 #ifdef BB_MKFS_MINIX
-	{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
+	{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN, mkfs_minix_usage},
 #endif
 #ifdef BB_MKNOD
-	{"mknod", mknod_main, _BB_DIR_BIN},
+	{"mknod", mknod_main, _BB_DIR_BIN, mknod_usage},
 #endif
 #ifdef BB_MKSWAP
-	{"mkswap", mkswap_main, _BB_DIR_SBIN},
+	{"mkswap", mkswap_main, _BB_DIR_SBIN, mkswap_usage},
 #endif
 #ifdef BB_MKTEMP
-	{"mktemp", mktemp_main, _BB_DIR_BIN},
+	{"mktemp", mktemp_main, _BB_DIR_BIN, mktemp_usage},
 #endif
 #ifdef BB_NC
-	{"nc", nc_main, _BB_DIR_USR_BIN},
+	{"nc", nc_main, _BB_DIR_USR_BIN, nc_usage},
 #endif
 #ifdef BB_MORE
-	{"more", more_main, _BB_DIR_BIN},
+	{"more", more_main, _BB_DIR_BIN, more_usage},
 #endif
 #ifdef BB_MOUNT
-	{"mount", mount_main, _BB_DIR_BIN},
+	{"mount", mount_main, _BB_DIR_BIN, mount_usage},
 #endif
 #ifdef BB_MT
-	{"mt", mt_main, _BB_DIR_BIN},
+	{"mt", mt_main, _BB_DIR_BIN, mt_usage},
 #endif
 #ifdef BB_CP_MV
-	{"mv", cp_mv_main, _BB_DIR_BIN},
+	{"mv", cp_mv_main, _BB_DIR_BIN, mv_usage},
 #endif
 #ifdef BB_NSLOOKUP
-	{"nslookup", nslookup_main, _BB_DIR_USR_BIN},
+	{"nslookup", nslookup_main, _BB_DIR_USR_BIN, nslookup_usage},
 #endif
 #ifdef BB_PING
-	{"ping", ping_main, _BB_DIR_BIN},
+	{"ping", ping_main, _BB_DIR_BIN, ping_usage},
 #endif
 #ifdef BB_POWEROFF
-	{"poweroff", poweroff_main, _BB_DIR_SBIN},
+	{"poweroff", poweroff_main, _BB_DIR_SBIN, poweroff_usage},
 #endif
 #ifdef BB_PRINTF
-	{"printf", printf_main, _BB_DIR_USR_BIN},
+	{"printf", printf_main, _BB_DIR_USR_BIN, printf_usage},
 #endif
 #ifdef BB_PS
-	{"ps", ps_main, _BB_DIR_BIN},
+	{"ps", ps_main, _BB_DIR_BIN, ps_usage},
 #endif
 #ifdef BB_PWD
-	{"pwd", pwd_main, _BB_DIR_BIN},
+	{"pwd", pwd_main, _BB_DIR_BIN, pwd_usage},
 #endif
 #ifdef BB_REBOOT
-	{"reboot", reboot_main, _BB_DIR_SBIN},
+	{"reboot", reboot_main, _BB_DIR_SBIN, reboot_usage},
 #endif
 #ifdef BB_RM
-	{"rm", rm_main, _BB_DIR_BIN},
+	{"rm", rm_main, _BB_DIR_BIN, rm_usage},
 #endif
 #ifdef BB_RMDIR
-	{"rmdir", rmdir_main, _BB_DIR_BIN},
+	{"rmdir", rmdir_main, _BB_DIR_BIN, rmdir_usage},
 #endif
 #ifdef BB_RMMOD
-	{"rmmod", rmmod_main, _BB_DIR_SBIN},
+	{"rmmod", rmmod_main, _BB_DIR_SBIN, rmmod_usage},
 #endif
 #ifdef BB_SED
-	{"sed", sed_main, _BB_DIR_BIN},
+	{"sed", sed_main, _BB_DIR_BIN, sed_usage},
 #endif
 #ifdef BB_SETKEYCODES
-	{"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN},
+	{"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN, setkeycodes_usage},
 #endif
 #ifdef BB_SH
-	{"sh", shell_main, _BB_DIR_BIN},
+	{"sh", shell_main, _BB_DIR_BIN, shell_usage},
 #endif
 #ifdef BB_SLEEP
-	{"sleep", sleep_main, _BB_DIR_BIN},
+	{"sleep", sleep_main, _BB_DIR_BIN, sleep_usage},
 #endif
 #ifdef BB_SORT
-	{"sort", sort_main, _BB_DIR_BIN},
+	{"sort", sort_main, _BB_DIR_BIN, sort_usage},
 #endif
 #ifdef BB_SYNC
-	{"sync", sync_main, _BB_DIR_BIN},
+	{"sync", sync_main, _BB_DIR_BIN, sync_usage},
 #endif
 #ifdef BB_SYSLOGD
-	{"syslogd", syslogd_main, _BB_DIR_SBIN},
+	{"syslogd", syslogd_main, _BB_DIR_SBIN, syslogd_usage},
 #endif
 #ifdef BB_SWAPONOFF
-	{"swapon", swap_on_off_main, _BB_DIR_SBIN},
+	{"swapon", swap_on_off_main, _BB_DIR_SBIN, swapon_usage},
 #endif
 #ifdef BB_SWAPONOFF
-	{"swapoff", swap_on_off_main, _BB_DIR_SBIN},
+	{"swapoff", swap_on_off_main, _BB_DIR_SBIN, swapoff_usage},
 #endif
 #ifdef BB_TAIL
-	{"tail", tail_main, _BB_DIR_USR_BIN},
+	{"tail", tail_main, _BB_DIR_USR_BIN, tail_usage},
 #endif
 #ifdef BB_TAR
-	{"tar", tar_main, _BB_DIR_BIN},
+	{"tar", tar_main, _BB_DIR_BIN, tar_usage},
 #endif
 #ifdef BB_TELNET
-	{"telnet", telnet_main, _BB_DIR_USR_BIN},
+	{"telnet", telnet_main, _BB_DIR_USR_BIN, telnet_usage},
 #endif
 #ifdef BB_TEST
-	{"test", test_main, _BB_DIR_USR_BIN},
+	{"test", test_main, _BB_DIR_USR_BIN, test_usage},
 #endif
 #ifdef BB_TEE
-	{"tee", tee_main, _BB_DIR_BIN},
+	{"tee", tee_main, _BB_DIR_BIN, tee_usage},
 #endif
 #ifdef BB_TOUCH
-	{"touch", touch_main, _BB_DIR_USR_BIN},
+	{"touch", touch_main, _BB_DIR_USR_BIN, touch_usage},
 #endif
 #ifdef BB_TR
-	{"tr", tr_main, _BB_DIR_USR_BIN},
+	{"tr", tr_main, _BB_DIR_USR_BIN, tr_usage},
 #endif
 #ifdef BB_TRUE_FALSE
-	{"true", true_main, _BB_DIR_BIN},
+	{"true", true_main, _BB_DIR_BIN, true_usage},
 #endif
 #ifdef BB_TTY
-	{"tty", tty_main, _BB_DIR_USR_BIN},
+	{"tty", tty_main, _BB_DIR_USR_BIN, tty_usage},
 #endif
 #ifdef BB_UMOUNT
-	{"umount", umount_main, _BB_DIR_BIN},
+	{"umount", umount_main, _BB_DIR_BIN, umount_usage},
 #endif
 #ifdef BB_UNAME
-	{"uname", uname_main, _BB_DIR_BIN},
+	{"uname", uname_main, _BB_DIR_BIN, uname_usage},
 #endif
 #ifdef BB_UNIQ
-	{"uniq", uniq_main, _BB_DIR_USR_BIN},
+	{"uniq", uniq_main, _BB_DIR_USR_BIN, uniq_usage},
 #endif
 #ifdef BB_UPDATE
-	{"update", update_main, _BB_DIR_SBIN},
+	{"update", update_main, _BB_DIR_SBIN, update_usage},
 #endif
 #ifdef BB_UPTIME
-	{"uptime", uptime_main, _BB_DIR_USR_BIN},
+	{"uptime", uptime_main, _BB_DIR_USR_BIN, uptime_usage},
 #endif
 #ifdef BB_UUENCODE
-	{"uuencode", uuencode_main, _BB_DIR_USR_BIN},
+	{"uuencode", uuencode_main, _BB_DIR_USR_BIN, uuencode_usage},
 #endif
 #ifdef BB_UUDECODE
-	{"uudecode", uudecode_main, _BB_DIR_USR_BIN},
+	{"uudecode", uudecode_main, _BB_DIR_USR_BIN, uudecode_usage},
 #endif
 #ifdef BB_USLEEP
-	{"usleep", usleep_main, _BB_DIR_BIN},
+	{"usleep", usleep_main, _BB_DIR_BIN, usleep_usage},
 #endif
 #ifdef BB_WC
-	{"wc", wc_main, _BB_DIR_USR_BIN},
+	{"wc", wc_main, _BB_DIR_USR_BIN, wc_usage},
 #endif
 #ifdef BB_WHICH
-	{"which", which_main, _BB_DIR_USR_BIN},
+	{"which", which_main, _BB_DIR_USR_BIN, which_usage},
 #endif
 #ifdef BB_WHOAMI
-	{"whoami", whoami_main, _BB_DIR_USR_BIN},
+	{"whoami", whoami_main, _BB_DIR_USR_BIN, whoami_usage},
 #endif
 #ifdef BB_YES
-	{"yes", yes_main, _BB_DIR_USR_BIN},
+	{"yes", yes_main, _BB_DIR_USR_BIN, yes_usage},
 #endif
 #ifdef BB_GUNZIP
-	{"zcat", gunzip_main, _BB_DIR_BIN},
+	{"zcat", gunzip_main, _BB_DIR_BIN, gunzip_usage},
 #endif
 #ifdef BB_TEST
-	{"[", test_main, _BB_DIR_USR_BIN},
+	{"[", test_main, _BB_DIR_USR_BIN, test_usage},
 #endif
-	{0,NULL,0}
+	{0,NULL,0,NULL}
 };
 
 char *applet_name;
@@ -490,6 +490,8 @@
 
 	while (a->name != 0) {
 		if (strcmp(applet_name, a->name) == 0) {
+			if (a->usage && argv[1] && strcmp(argv[1], "--help") == 0)
+				usage(a->usage);
 			exit(((*(a->main)) (argc, argv)));
 		}
 		a++;
diff --git a/clear.c b/clear.c
index b1641bd..dba1056 100644
--- a/clear.c
+++ b/clear.c
@@ -28,9 +28,6 @@
 
 extern int clear_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(clear_usage);
-
 	printf("\033[H\033[J");
 	return(TRUE);
 }
diff --git a/console-tools/clear.c b/console-tools/clear.c
index b1641bd..dba1056 100644
--- a/console-tools/clear.c
+++ b/console-tools/clear.c
@@ -28,9 +28,6 @@
 
 extern int clear_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(clear_usage);
-
 	printf("\033[H\033[J");
 	return(TRUE);
 }
diff --git a/coreutils/cut.c b/coreutils/cut.c
index 8b28fff..4907ed9 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -211,9 +211,6 @@
 	int i = 1;
 	int numberFilenames = 0;
 
-	if (argc == 1 || strcmp(argv[1], dash_dash_help)==0)
-		usage(cut_usage);
-
 	while (i < argc) {
 		if (argv[i][0] == '-') {
 			switch (argv[i++][1]) {
diff --git a/coreutils/hostid.c b/coreutils/hostid.c
index 3bf79de..f1010a6 100644
--- a/coreutils/hostid.c
+++ b/coreutils/hostid.c
@@ -25,9 +25,6 @@
 
 extern int hostid_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(hostid_usage);
-
 	printf("%lx\n", gethostid());
 	return(TRUE);
 }
diff --git a/coreutils/pwd.c b/coreutils/pwd.c
index 1a023d3..f0c923b 100644
--- a/coreutils/pwd.c
+++ b/coreutils/pwd.c
@@ -30,9 +30,6 @@
 {
 	char buf[BUFSIZ + 1];
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(pwd_usage);
-
 	if (getcwd(buf, sizeof(buf)) == NULL)
 		fatalError("%s\n", strerror(errno));
 
diff --git a/coreutils/test.c b/coreutils/test.c
index 9a1888b..818b3db 100644
--- a/coreutils/test.c
+++ b/coreutils/test.c
@@ -188,9 +188,6 @@
 			fatalError("missing ]\n");
 		argv[argc] = NULL;
 	}
-	if (strcmp(argv[1], dash_dash_help) == 0)
-		usage(test_usage);
-
 	/* Implement special cases from POSIX.2, section 4.62.4 */
 	switch (argc) {
 	case 1:
diff --git a/cut.c b/cut.c
index 8b28fff..4907ed9 100644
--- a/cut.c
+++ b/cut.c
@@ -211,9 +211,6 @@
 	int i = 1;
 	int numberFilenames = 0;
 
-	if (argc == 1 || strcmp(argv[1], dash_dash_help)==0)
-		usage(cut_usage);
-
 	while (i < argc) {
 		if (argv[i][0] == '-') {
 			switch (argv[i++][1]) {
diff --git a/editors/sed.c b/editors/sed.c
index 3973d21..7b3a423 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -663,10 +663,6 @@
 {
 	int opt;
 
-	/* do special-case option parsing */
-	if (argv[1] && (strcmp(argv[1], "--help") == 0))
-		usage(sed_usage);
-
 #if 0
 	/* destroy command strings on exit */
 	if (atexit(destroy_cmd_strs) == -1) {
diff --git a/findutils/grep.c b/findutils/grep.c
index 2f240e4..6161ba7 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -105,10 +105,6 @@
 	int opt;
 	int reflags;
 
-	/* do special-case option parsing */
-	if (argv[1] && (strcmp(argv[1], "--help") == 0))
-		usage(grep_usage);
-
 	/* do normal option parsing */
 	while ((opt = getopt(argc, argv, "iHhnqvsc")) > 0) {
 		switch (opt) {
diff --git a/grep.c b/grep.c
index 2f240e4..6161ba7 100644
--- a/grep.c
+++ b/grep.c
@@ -105,10 +105,6 @@
 	int opt;
 	int reflags;
 
-	/* do special-case option parsing */
-	if (argv[1] && (strcmp(argv[1], "--help") == 0))
-		usage(grep_usage);
-
 	/* do normal option parsing */
 	while ((opt = getopt(argc, argv, "iHhnqvsc")) > 0) {
 		switch (opt) {
diff --git a/halt.c b/halt.c
index 7baccf5..2ca36d0 100644
--- a/halt.c
+++ b/halt.c
@@ -26,9 +26,6 @@
 
 extern int halt_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(halt_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGUSR1));
diff --git a/hostid.c b/hostid.c
index 3bf79de..f1010a6 100644
--- a/hostid.c
+++ b/hostid.c
@@ -25,9 +25,6 @@
 
 extern int hostid_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(hostid_usage);
-
 	printf("%lx\n", gethostid());
 	return(TRUE);
 }
diff --git a/init/halt.c b/init/halt.c
index 7baccf5..2ca36d0 100644
--- a/init/halt.c
+++ b/init/halt.c
@@ -26,9 +26,6 @@
 
 extern int halt_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(halt_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGUSR1));
diff --git a/init/poweroff.c b/init/poweroff.c
index b499d14..126a0fb 100644
--- a/init/poweroff.c
+++ b/init/poweroff.c
@@ -26,9 +26,6 @@
 
 extern int poweroff_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(poweroff_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGUSR2));
diff --git a/init/reboot.c b/init/reboot.c
index bef9b26..bde8dbd 100644
--- a/init/reboot.c
+++ b/init/reboot.c
@@ -26,9 +26,6 @@
 
 extern int reboot_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(reboot_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGINT));
diff --git a/internal.h b/internal.h
index 1e9af1f..4800d85 100644
--- a/internal.h
+++ b/internal.h
@@ -103,6 +103,7 @@
 	const	char*	name;
 	int	(*main)(int argc, char** argv);
 	enum	Location	location;
+	const	char*	usage;
 };
 /* From busybox.c */
 extern const struct BB_applet applets[];
diff --git a/lsmod.c b/lsmod.c
index 95006f0..6eb9c56 100644
--- a/lsmod.c
+++ b/lsmod.c
@@ -36,8 +36,5 @@
 	char *filename = "/proc/modules";
 #endif
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(lsmod_usage);
-
 	return(print_file_by_name(filename));
 }
diff --git a/modutils/lsmod.c b/modutils/lsmod.c
index 95006f0..6eb9c56 100644
--- a/modutils/lsmod.c
+++ b/modutils/lsmod.c
@@ -36,8 +36,5 @@
 	char *filename = "/proc/modules";
 #endif
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(lsmod_usage);
-
 	return(print_file_by_name(filename));
 }
diff --git a/more.c b/more.c
index 2334576..12168b5 100644
--- a/more.c
+++ b/more.c
@@ -78,10 +78,6 @@
 	argc--;
 	argv++;
 
-	if (argc > 0
-		&& (strcmp(*argv, dash_dash_help) == 0 || strcmp(*argv, "-h") == 0)) {
-		usage(more_usage);
-	}
 	do {
 		if (argc == 0) {
 			file = stdin;
diff --git a/poweroff.c b/poweroff.c
index b499d14..126a0fb 100644
--- a/poweroff.c
+++ b/poweroff.c
@@ -26,9 +26,6 @@
 
 extern int poweroff_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(poweroff_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGUSR2));
diff --git a/procps/ps.c b/procps/ps.c
index fc58a9b..b49b7dd 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -133,9 +133,6 @@
 
 
 
-	if (argc > 1 && strcmp(argv[1], dash_dash_help) == 0)
-		usage(ps_usage);
-
 	dir = opendir("/proc");
 	if (!dir)
 		fatalError("Can't open /proc\n");
diff --git a/procps/uptime.c b/procps/uptime.c
index 6a8bfa6..efdbccf 100644
--- a/procps/uptime.c
+++ b/procps/uptime.c
@@ -46,9 +46,6 @@
 	struct tm *current_time;
 	time_t current_secs;
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(uptime_usage);
-
 	time(&current_secs);
 	current_time = localtime(&current_secs);
 
diff --git a/ps.c b/ps.c
index fc58a9b..b49b7dd 100644
--- a/ps.c
+++ b/ps.c
@@ -133,9 +133,6 @@
 
 
 
-	if (argc > 1 && strcmp(argv[1], dash_dash_help) == 0)
-		usage(ps_usage);
-
 	dir = opendir("/proc");
 	if (!dir)
 		fatalError("Can't open /proc\n");
diff --git a/pwd.c b/pwd.c
index 1a023d3..f0c923b 100644
--- a/pwd.c
+++ b/pwd.c
@@ -30,9 +30,6 @@
 {
 	char buf[BUFSIZ + 1];
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(pwd_usage);
-
 	if (getcwd(buf, sizeof(buf)) == NULL)
 		fatalError("%s\n", strerror(errno));
 
diff --git a/reboot.c b/reboot.c
index bef9b26..bde8dbd 100644
--- a/reboot.c
+++ b/reboot.c
@@ -26,9 +26,6 @@
 
 extern int reboot_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(reboot_usage);
-
 #ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	return(kill(*(findPidByName("init")), SIGINT));
diff --git a/sed.c b/sed.c
index 3973d21..7b3a423 100644
--- a/sed.c
+++ b/sed.c
@@ -663,10 +663,6 @@
 {
 	int opt;
 
-	/* do special-case option parsing */
-	if (argv[1] && (strcmp(argv[1], "--help") == 0))
-		usage(sed_usage);
-
 #if 0
 	/* destroy command strings on exit */
 	if (atexit(destroy_cmd_strs) == -1) {
diff --git a/test.c b/test.c
index 9a1888b..818b3db 100644
--- a/test.c
+++ b/test.c
@@ -188,9 +188,6 @@
 			fatalError("missing ]\n");
 		argv[argc] = NULL;
 	}
-	if (strcmp(argv[1], dash_dash_help) == 0)
-		usage(test_usage);
-
 	/* Implement special cases from POSIX.2, section 4.62.4 */
 	switch (argc) {
 	case 1:
diff --git a/true_false.c b/true_false.c
index 33703ff..c56f5e7 100644
--- a/true_false.c
+++ b/true_false.c
@@ -27,16 +27,10 @@
 
 extern int true_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(true_usage);
-
 	return(TRUE);
 }
 
 extern int false_main(int argc, char **argv)
 {
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(false_usage);
-
 	return(FALSE);
 }
diff --git a/uptime.c b/uptime.c
index 6a8bfa6..efdbccf 100644
--- a/uptime.c
+++ b/uptime.c
@@ -46,9 +46,6 @@
 	struct tm *current_time;
 	time_t current_secs;
 
-	if (argc > 1 && strcmp(argv[1], "--help") == 0)
-		usage(uptime_usage);
-
 	time(&current_secs);
 	current_time = localtime(&current_secs);
 
diff --git a/util-linux/more.c b/util-linux/more.c
index 2334576..12168b5 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -78,10 +78,6 @@
 	argc--;
 	argv++;
 
-	if (argc > 0
-		&& (strcmp(*argv, dash_dash_help) == 0 || strcmp(*argv, "-h") == 0)) {
-		usage(more_usage);
-	}
 	do {
 		if (argc == 0) {
 			file = stdin;