diff --git a/applets/busybox.c b/applets/busybox.c
index a355cdd..15f8e3f 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -392,7 +392,7 @@
 	if (len != -1) {
 		path[len] = 0;
 	} else {
-		fprintf(stderr, "busybox : %s : %s\n", proc, strerror(errno));
+		errorMsg("%s: %s\n", proc, strerror(errno));
 		return NULL;
 	}
 	return strdup(path);
@@ -422,7 +422,7 @@
 		puts(command);
 #endif
 		if (rc) {
-			fprintf(stderr,"busybox : %s : %s\n", command, strerror(errno));
+			errorMsg("%s: %s\n", command, strerror(errno));
 		}
 	}
 	return rc;
@@ -438,6 +438,7 @@
 {
 	char				*s;
 	const struct BB_applet	*a		= applets;
+	applet_name = "busybox";
 
 #ifdef BB_FEATURE_INSTALLER	
 	/* 
diff --git a/archival/gunzip.c b/archival/gunzip.c
index 89e46a6..de68bd1 100644
--- a/archival/gunzip.c
+++ b/archival/gunzip.c
@@ -659,7 +659,7 @@
 		if (*argv == '\0')
 			usage(gunzip_usage);
 		if (strlen(*argv) > MAX_PATH_LEN) {
-			fprintf(stderr, name_too_long, "gunzip");
+			errorMsg(name_too_long);
 			exit(WARNING);
 		}
 		strcpy(ifname, *argv);
@@ -698,7 +698,7 @@
 
 		/* And get to work */
 		if (strlen(ifname) > MAX_PATH_LEN - 4) {
-			fprintf(stderr, name_too_long, "gunzip");
+			errorMsg(name_too_long);
 			exit(WARNING);
 		}
 		strcpy(ofname, ifname);
@@ -780,8 +780,7 @@
 
 		method = (int) get_byte();
 		if (method != DEFLATED) {
-			fprintf(stderr,
-					"unknown method %d -- get newer version of gzip\n",
+			errorMsg("unknown method %d -- get newer version of gzip\n",
 					method);
 			exit_code = ERROR;
 			return -1;
diff --git a/busybox.c b/busybox.c
index a355cdd..15f8e3f 100644
--- a/busybox.c
+++ b/busybox.c
@@ -392,7 +392,7 @@
 	if (len != -1) {
 		path[len] = 0;
 	} else {
-		fprintf(stderr, "busybox : %s : %s\n", proc, strerror(errno));
+		errorMsg("%s: %s\n", proc, strerror(errno));
 		return NULL;
 	}
 	return strdup(path);
@@ -422,7 +422,7 @@
 		puts(command);
 #endif
 		if (rc) {
-			fprintf(stderr,"busybox : %s : %s\n", command, strerror(errno));
+			errorMsg("%s: %s\n", command, strerror(errno));
 		}
 	}
 	return rc;
@@ -438,6 +438,7 @@
 {
 	char				*s;
 	const struct BB_applet	*a		= applets;
+	applet_name = "busybox";
 
 #ifdef BB_FEATURE_INSTALLER	
 	/* 
diff --git a/chmod_chown_chgrp.c b/chmod_chown_chgrp.c
index 98b2925..cf6a508 100644
--- a/chmod_chown_chgrp.c
+++ b/chmod_chown_chgrp.c
@@ -123,7 +123,7 @@
 					recursiveFlag = TRUE;
 					break;
 				default:
-					fprintf(stderr, invalid_option, applet_name, **argv);
+					errorMsg(invalid_option, **argv);
 					usage(appUsage);
 			}
 		}
@@ -131,7 +131,7 @@
 	}
 
 	if (argc == 0 || *argv == NULL) {
-		fprintf(stderr, too_few_args, applet_name);
+		errorMsg(too_few_args);
 		usage(appUsage);
 	}
 
@@ -176,7 +176,7 @@
 
 	/* Ok, ready to do the deed now */
 	if (argc <= 1) {
-		fatalError( "too few arguments\n");
+		fatalError(too_few_args);
 	}
 	while (argc-- > 1) {
 		if (recursiveAction (*(++argv), recursiveFlag, FALSE, FALSE, 
diff --git a/console-tools/deallocvt.c b/console-tools/deallocvt.c
index 53d4d9a..906f3a9 100644
--- a/console-tools/deallocvt.c
+++ b/console-tools/deallocvt.c
@@ -39,14 +39,12 @@
 		for (i = 1; i < argc; i++) {
 			num = atoi(argv[i]);
 			if (num == 0)
-				fprintf(stderr, "%s: 0: illegal VT number\n", applet_name);
+				errorMsg("0: illegal VT number\n");
 			else if (num == 1)
-				fprintf(stderr, "%s: VT 1 cannot be deallocated\n",
-						applet_name);
+				errorMsg("VT 1 cannot be deallocated\n");
 			else if (ioctl(fd, VT_DISALLOCATE, num)) {
 				perror("VT_DISALLOCATE");
-				fprintf(stderr, "%s: could not deallocate console %d\n",
-						applet_name, num);
+				errorMsg("could not deallocate console %d\n", num);
 				exit( FALSE);
 			}
 		}
diff --git a/console-tools/dumpkmap.c b/console-tools/dumpkmap.c
index a497a07..f180505 100644
--- a/console-tools/dumpkmap.c
+++ b/console-tools/dumpkmap.c
@@ -58,7 +58,7 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		return 1;
 	}
 
@@ -86,7 +86,7 @@
 				ke.kb_table = i;
 				if (ioctl(fd, KDGKBENT, &ke) < 0) {
 				
-					fprintf(stderr, "ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
+					errorMsg("ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
 					}
 				else {
 					write(1,&ke.kb_value,2);	
diff --git a/console-tools/loadacm.c b/console-tools/loadacm.c
index a64c691..9eebf3b 100644
--- a/console-tools/loadacm.c
+++ b/console-tools/loadacm.c
@@ -46,12 +46,12 @@
 
 	fd = open("/dev/tty", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty1: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty1: %s\n", strerror(errno));
 		return( FALSE);
 	}
 
 	if (screen_map_load(fd, stdin)) {
-		fprintf(stderr, "Error loading acm: %s\n", strerror(errno));
+		errorMsg("Error loading acm: %s\n", strerror(errno));
 		return( FALSE);
 	}
 
@@ -79,8 +79,7 @@
 		if (parse_failed) {
 			if (-1 == fseek(fp, 0, SEEK_SET)) {
 				if (errno == ESPIPE)
-					fprintf(stderr,
-							"16bit screen-map MUST be a regular file.\n"),
+					errorMsg("16bit screen-map MUST be a regular file.\n"),
 						exit(1);
 				else
 					perror("fseek failed reading binary 16bit screen-map"),
@@ -91,7 +90,7 @@
 				perror("Cannot read [new] map from file"), exit(1);
 #if 0
 			else
-				fprintf(stderr, "Input screen-map is binary.\n");
+				errorMsg("Input screen-map is binary.\n");
 #endif
 		}
 
@@ -108,8 +107,7 @@
 	/* rewind... */
 	if (-1 == fseek(fp, 0, SEEK_SET)) {
 		if (errno == ESPIPE)
-			fprintf(stderr,
-					"Assuming 8bit screen-map - MUST be a regular file.\n"),
+			errorMsg("Assuming 8bit screen-map - MUST be a regular file.\n"),
 				exit(1);
 		else
 			perror("fseek failed assuming 8bit screen-map"), exit(1);
@@ -122,7 +120,7 @@
 			if (-1 == fseek(fp, 0, SEEK_SET)) {
 				if (errno == ESPIPE)
 					/* should not - it succedeed above */
-					fprintf(stderr, "fseek() returned ESPIPE !\n"),
+					errorMsg("fseek() returned ESPIPE !\n"),
 						exit(1);
 				else
 					perror("fseek for binary 8bit screen-map"), exit(1);
@@ -132,7 +130,7 @@
 				perror("Cannot read [old] map from file"), exit(1);
 #if 0
 			else
-				fprintf(stderr, "Input screen-map is binary.\n");
+				errorMsg("Input screen-map is binary.\n");
 #endif
 		}
 
@@ -141,7 +139,7 @@
 		else
 			return 0;
 	}
-	fprintf(stderr, "Error parsing symbolic map\n");
+	errorMsg("Error parsing symbolic map\n");
 	return(1);
 }
 
diff --git a/console-tools/loadfont.c b/console-tools/loadfont.c
index 7eaf40e..b3f9f4f 100644
--- a/console-tools/loadfont.c
+++ b/console-tools/loadfont.c
@@ -56,7 +56,7 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		return( FALSE);
 	}
 	loadnewfont(fd);
@@ -72,7 +72,7 @@
 	memset(buf, 0, sizeof(buf));
 
 	if (unit < 1 || unit > 32) {
-		fprintf(stderr, "Bad character size %d\n", unit);
+		errorMsg("Bad character size %d\n", unit);
 		exit(1);
 	}
 
@@ -112,7 +112,7 @@
 	up = (struct unipair *) malloc(maxct * sizeof(struct unipair));
 
 	if (!up) {
-		fprintf(stderr, "Out of memory?\n");
+		errorMsg("Out of memory?\n");
 		exit(1);
 	}
 	for (glyph = 0; glyph < fontsize; glyph++) {
@@ -137,8 +137,8 @@
 	if (ioctl(fd, PIO_UNIMAPCLR, &advice)) {
 #ifdef ENOIOCTLCMD
 		if (errno == ENOIOCTLCMD) {
-			fprintf(stderr, "It seems this kernel is older than 1.1.92\n");
-			fprintf(stderr, "No Unicode mapping table loaded.\n");
+			errorMsg("It seems this kernel is older than 1.1.92\n");
+			errorMsg("No Unicode mapping table loaded.\n");
 		} else
 #endif
 			perror("PIO_UNIMAPCLR");
@@ -198,13 +198,13 @@
 			goto no_psf;
 
 		if (psfhdr.mode > PSF_MAXMODE) {
-			fprintf(stderr, "Unsupported psf file mode\n");
+			errorMsg("Unsupported psf file mode\n");
 			exit(1);
 		}
 		fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
 #if !defined( PIO_FONTX ) || defined( __sparc__ )
 		if (fontsize != 256) {
-			fprintf(stderr, "Only fontsize 256 supported\n");
+			errorMsg("Only fontsize 256 supported\n");
 			exit(1);
 		}
 #endif
@@ -214,7 +214,7 @@
 
 		head = head0 + fontsize * unit;
 		if (head > inputlth || (!hastable && head != inputlth)) {
-			fprintf(stderr, "Input file: bad length\n");
+			errorMsg("Input file: bad length\n");
 			exit(1);
 		}
 		do_loadfont(fd, inbuf + head0, unit, fontsize);
@@ -231,7 +231,7 @@
 	} else {
 		/* bare font */
 		if (inputlth & 0377) {
-			fprintf(stderr, "Bad input file size\n");
+			errorMsg("Bad input file size\n");
 			exit(1);
 		}
 		offset = 0;
diff --git a/console-tools/loadkmap.c b/console-tools/loadkmap.c
index c2e4c94..72247a6 100644
--- a/console-tools/loadkmap.c
+++ b/console-tools/loadkmap.c
@@ -59,25 +59,25 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		exit(FALSE);
 	}
 
 	read(0, buff, 7);
 	if (0 != strncmp(buff, magic, 7)) {
-		fprintf(stderr, "This is not a valid binary keymap.\n");
+		errorMsg("This is not a valid binary keymap.\n");
 		exit(FALSE);
 	}
 
 	if (MAX_NR_KEYMAPS != read(0, flags, MAX_NR_KEYMAPS)) {
-		fprintf(stderr, "Error reading keymap flags: %s\n",
+		errorMsg("Error reading keymap flags: %s\n",
 				strerror(errno));
 		exit(FALSE);
 	}
 
 	ibuff = (u_short *) malloc(ibuffsz);
 	if (!ibuff) {
-		fprintf(stderr, "Out of memory.\n");
+		errorMsg("Out of memory.\n");
 		exit(FALSE);
 	}
 
@@ -87,7 +87,7 @@
 			while (pos < ibuffsz) {
 				if ((readsz = read(0, (char *) ibuff + pos, ibuffsz - pos))
 					< 0) {
-					fprintf(stderr, "Error reading keymap: %s\n",
+					errorMsg("Error reading keymap: %s\n",
 							strerror(errno));
 					exit(FALSE);
 				}
diff --git a/coreutils/cut.c b/coreutils/cut.c
index 820074e..783d526 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -84,13 +84,13 @@
 void warn(int warn_number, char *option)
 {
 	static char *warn_msg[] = {
-		"%s: Option -%s allowed only with -f\n",
-		"%s: -%s overrides earlier option\n",
-		"%s: -%s not allowed in current mode\n",
-		"%s: Cannot open %s\n"
+		"Option -%s allowed only with -f\n",
+		"-%s overrides earlier option\n",
+		"-%s not allowed in current mode\n",
+		"Cannot open %s\n"
 	};
 
-	fprintf(stderr, warn_msg[warn_number], applet_name, option);
+	errorMsg(warn_msg[warn_number], option);
 	exit_status = warn_number + 1;
 
 }
@@ -98,15 +98,15 @@
 void cuterror(int err)
 {
 	static char *err_mes[] = {
-		"%s: syntax error\n",
-		"%s: position must be >0\n",
-		"%s: line longer than BUFSIZ\n",
-		"%s: range must not decrease from left to right\n",
-		"%s: MAX_FIELD exceeded\n",
-		"%s: MAX_ARGS exceeded\n"
+		"syntax error\n",
+		"position must be >0\n",
+		"line longer than BUFSIZ\n",
+		"range must not decrease from left to right\n",
+		"MAX_FIELD exceeded\n",
+		"MAX_ARGS exceeded\n"
 	};
 
-	fprintf(stderr, err_mes[err - 101], applet_name);
+	errorMsg(err_mes[err - 101]);
 	exit(err);
 }
 
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 5d9993d..6261dfe 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -86,26 +86,26 @@
 		else if (strncmp("count", *argv, 5) == 0) {
 			count = getNum((strchr(*argv, '=')) + 1);
 			if (count <= 0) {
-				fprintf(stderr, "Bad count value %s\n", *argv);
+				errorMsg("Bad count value %s\n", *argv);
 				goto usage;
 			}
 		} else if (strncmp(*argv, "bs", 2) == 0) {
 			blockSize = getNum((strchr(*argv, '=')) + 1);
 			if (blockSize <= 0) {
-				fprintf(stderr, "Bad block size value %s\n", *argv);
+				errorMsg("Bad block size value %s\n", *argv);
 				goto usage;
 			}
 		} else if (strncmp(*argv, "skip", 4) == 0) {
 			skipBlocks = getNum((strchr(*argv, '=')) + 1);
 			if (skipBlocks <= 0) {
-				fprintf(stderr, "Bad skip value %s\n", *argv);
+				errorMsg("Bad skip value %s\n", *argv);
 				goto usage;
 			}
 
 		} else if (strncmp(*argv, "seek", 4) == 0) {
 			seekBlocks = getNum((strchr(*argv, '=')) + 1);
 			if (seekBlocks <= 0) {
-				fprintf(stderr, "Bad seek value %s\n", *argv);
+				errorMsg("Bad seek value %s\n", *argv);
 				goto usage;
 			}
 
diff --git a/coreutils/df.c b/coreutils/df.c
index ba3227f..62226ce 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -82,7 +82,7 @@
 		}
 		while (argc > 1) {
 			if ((mountEntry = findMountPoint(argv[1], mtab_file)) == 0) {
-				fprintf(stderr, "%s: can't find mount point.\n", argv[1]);
+				errorMsg("%s: can't find mount point.\n", argv[1]);
 				exit(FALSE);
 			}
 			status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
diff --git a/coreutils/du.c b/coreutils/du.c
index b8e296d..b1ca954 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -108,7 +108,7 @@
 			}
 
 			if (len + strlen(name) + 1 > BUFSIZ) {
-				fprintf(stderr, name_too_long, "du");
+				errorMsg(name_too_long);
 				du_depth--;
 				return 0;
 			}
@@ -158,7 +158,7 @@
 				usage(du_usage);
 				break;
 			default:
-				fprintf(stderr, "du: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(du_usage);
 			}
 		} else {
@@ -184,7 +184,7 @@
 	return(0);
 }
 
-/* $Id: du.c,v 1.20 2000/06/19 17:25:39 andersen Exp $ */
+/* $Id: du.c,v 1.21 2000/07/14 01:51:25 kraai Exp $ */
 /*
 Local Variables:
 c-file-style: "linux"
diff --git a/coreutils/head.c b/coreutils/head.c
index f42f483..b82678d 100644
--- a/coreutils/head.c
+++ b/coreutils/head.c
@@ -75,7 +75,7 @@
 			case 'h':
 				usage(head_usage);
 			default:
-				fprintf(stderr, "head: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(head_usage);
 			}
 		} else {
@@ -95,8 +95,7 @@
 
 			src = fopen(argv[i], "r");
 			if (!src) {
-				fprintf(stderr, "head: %s: %s\n", argv[i],
-						strerror(errno));
+				errorMsg("%s: %s\n", argv[i], strerror(errno));
 			} else {
 				/* emulating GNU behaviour */
 				if (need_headers) {
@@ -112,4 +111,4 @@
 	return(0);
 }
 
-/* $Id: head.c,v 1.11 2000/06/19 17:25:39 andersen Exp $ */
+/* $Id: head.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/coreutils/ln.c b/coreutils/ln.c
index ac1f68e..9f77743 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -23,7 +23,6 @@
 
 #include "internal.h"
 #define BB_DECLARE_EXTERN
-#define bb_need_name_too_long
 #define bb_need_not_a_directory
 #include "messages.c"
 
@@ -92,7 +91,7 @@
 
 	linkIntoDirFlag = isDirectory(linkName, followLinks, NULL);
 	if ((argc >= 3) && linkIntoDirFlag == FALSE) {
-		fprintf(stderr, not_a_directory, "ln", linkName);
+		errorMsg(not_a_directory, linkName);
 		exit FALSE;
 	}
 
diff --git a/coreutils/logname.c b/coreutils/logname.c
index 4b4483c..12ebfbd 100644
--- a/coreutils/logname.c
+++ b/coreutils/logname.c
@@ -41,6 +41,6 @@
 		puts(user);
 		exit(TRUE);
 	}
-	fprintf(stderr, "no login name\n");
+	errorMsg("no login name\n");
 	return(FALSE);
 }
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
index b18c949..f6e08ca 100644
--- a/coreutils/mkdir.c
+++ b/coreutils/mkdir.c
@@ -62,7 +62,7 @@
 				/* Find the specified modes */
 				mode = 0;
 				if (parse_mode(*(++argv), &mode) == FALSE) {
-					fprintf(stderr, "Unknown mode: %s\n", *argv);
+					errorMsg("Unknown mode: %s\n", *argv);
 					exit FALSE;
 				}
 				/* Set the umask for this process so it doesn't 
@@ -91,13 +91,13 @@
 		char buf[BUFSIZ + 1];
 
 		if (strlen(*argv) > BUFSIZ - 1) {
-			fprintf(stderr, name_too_long, "mkdir");
+			errorMsg(name_too_long);
 			exit FALSE;
 		}
 		strcpy(buf, *argv);
 		status = stat(buf, &statBuf);
 		if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
-			fprintf(stderr, "%s: File exists\n", buf);
+			errorMsg("%s: File exists\n", buf);
 			exit FALSE;
 		}
 		if (parentFlag == TRUE) {
diff --git a/coreutils/rmdir.c b/coreutils/rmdir.c
index c88f42c..4edb9b6 100644
--- a/coreutils/rmdir.c
+++ b/coreutils/rmdir.c
@@ -40,7 +40,7 @@
 
 	while (--argc > 0) {
 		if (rmdir(*(++argv)) == -1) {
-			fprintf(stderr, "%s: %s\n", applet_name, strerror(errno));
+			errorMsg("%s\n", strerror(errno));
 			exit(FALSE);
 		}
 	}
diff --git a/coreutils/sort.c b/coreutils/sort.c
index a28122d..c754989 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -263,7 +263,7 @@
 				break;
 #endif
 			default:
-				fprintf(stderr, "sort: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(sort_usage);
 			}
 		} else {
@@ -304,4 +304,4 @@
 	return(0);
 }
 
-/* $Id: sort.c,v 1.18 2000/06/28 22:15:26 markw Exp $ */
+/* $Id: sort.c,v 1.19 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/coreutils/tail.c b/coreutils/tail.c
index 3189d20..601f087 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -375,7 +375,7 @@
 				usage(tail_usage);
 			default:
 				if ((n_units = atoi(&argv[i][1])) < 1) {
-					fprintf(stderr, "tail: invalid option -- %c\n", opt);
+					errorMsg("invalid option -- %c\n", opt);
 					usage(tail_usage);
 				}
 			}
@@ -386,8 +386,7 @@
 
 	if (i + 1 < argc) {
 		if (forever) {
-			fprintf(stderr,
-					"tail: option -f is invalid with multiple files\n");
+			errorMsg("option -f is invalid with multiple files\n");
 			usage(tail_usage);
 		}
 		print_headers = 1;
diff --git a/coreutils/tee.c b/coreutils/tee.c
index c9b5410..67b42a2 100644
--- a/coreutils/tee.c
+++ b/coreutils/tee.c
@@ -104,7 +104,7 @@
 	/* init FILE pointers */
 	FileList = calloc(FL_MAX, sizeof(FILE*));
 	if (!FileList) {
-		fprintf(stderr, "tee: %s\n", strerror(errno));
+		errorMsg("%s\n", strerror(errno));
 		exit(1);
 	}
 	FL_end = 0;
@@ -133,4 +133,4 @@
 	return(0);
 }
 
-/* $Id: tee.c,v 1.11 2000/06/19 17:25:40 andersen Exp $ */
+/* $Id: tee.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/coreutils/uniq.c b/coreutils/uniq.c
index 64acf04..16b2576 100644
--- a/coreutils/uniq.c
+++ b/coreutils/uniq.c
@@ -127,11 +127,11 @@
 		break;
 	}
 	if (*in == NULL) {
-		fprintf(stderr, "uniq: %s: %s\n", argv[0], strerror(errno));
+		errorMsg("%s: %s\n", argv[0], strerror(errno));
 		return errno;
 	}
 	if (*out == NULL) {
-		fprintf(stderr, "uniq: %s: %s\n", argv[1], strerror(errno));
+		errorMsg("%s: %s\n", argv[1], strerror(errno));
 		return errno;
 	}
 	return 0;
@@ -187,4 +187,4 @@
 	return(0);
 }
 
-/* $Id: uniq.c,v 1.11 2000/06/19 17:25:40 andersen Exp $ */
+/* $Id: uniq.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/coreutils/whoami.c b/coreutils/whoami.c
index 983c672..01dff81 100644
--- a/coreutils/whoami.c
+++ b/coreutils/whoami.c
@@ -43,7 +43,6 @@
 		puts(user);
 		exit(TRUE);
 	}
-	fprintf(stderr, "%s: cannot find username for UID %u\n", applet_name,
-			(unsigned) uid);
+	errorMsg("cannot find username for UID %u\n", (unsigned) uid);
 	return(FALSE);
 }
diff --git a/cp_mv.c b/cp_mv.c
index cd061be..6550e1c 100644
--- a/cp_mv.c
+++ b/cp_mv.c
@@ -89,8 +89,7 @@
 static
 void name_too_long__exit (void)
 {
-	fprintf(stderr, name_too_long, applet_name);
-	exit(FALSE);
+	fatalError(name_too_long);
 }
 
 static void
@@ -124,14 +123,14 @@
 
 	if (srcDirFlag == TRUE) {
 		if (recursiveFlag == FALSE) {
-			fprintf(stderr, omitting_directory, applet_name, baseSrcName);
+			errorMsg(omitting_directory, baseSrcName);
 			return TRUE;
 		}
 		srcBasename = (strstr(fileName, baseSrcName)
 					   + strlen(baseSrcName));
 
 		if (destLen + strlen(srcBasename) > BUFSIZ) {
-			fprintf(stderr, name_too_long, applet_name);
+			errorMsg(name_too_long);
 			return FALSE;
 		}
 		strcat(destName, srcBasename);
@@ -145,8 +144,8 @@
 	if (mv_Action_first_time && (dz_i == is_mv)) {
 		mv_Action_first_time = errno = 0;
 		if (rename(fileName, destName) < 0 && errno != EXDEV) {
-			fprintf(stderr, "%s: rename(%s, %s): %s\n",
-					applet_name, fileName, destName, strerror(errno));
+			errorMsg("rename(%s, %s): %s\n", fileName, destName, 
+					strerror(errno));
 			goto do_copyFile;	/* Try anyway... */
 		}
 		else if (errno == EXDEV)
@@ -158,8 +157,7 @@
 	if (preserveFlag == TRUE && statbuf->st_nlink > 1) {
 		if (is_in_ino_dev_hashtable(statbuf, &name)) {
 			if (link(name, destName) < 0) {
-				fprintf(stderr, "%s: link(%s, %s): %s\n",
-						applet_name, name, destName, strerror(errno));
+				errorMsg("link(%s, %s): %s\n", name, destName, strerror(errno));
 				return FALSE;
 			}
 			return TRUE;
@@ -178,11 +176,11 @@
 
 	if (S_ISDIR(statbuf->st_mode)) {
 		if (rmdir(fileName) < 0) {
-			fprintf(stderr, "%s: rmdir(%s): %s\n", applet_name, fileName, strerror(errno));
+			errorMsg("rmdir(%s): %s\n", fileName, strerror(errno));
 			status = FALSE;
 		}
 	} else if (unlink(fileName) < 0) {
-		fprintf(stderr, "%s: unlink(%s): %s\n", applet_name, fileName, strerror(errno));
+		errorMsg("unlink(%s): %s\n", fileName, strerror(errno));
 		status = FALSE;
 	}
 	return status;
@@ -236,7 +234,7 @@
 	
 
 	if (strlen(argv[argc - 1]) > BUFSIZ) {
-		fprintf(stderr, name_too_long, "cp");
+		errorMsg(name_too_long);
 		goto exit_false;
 	}
 	strcpy(baseDestName, argv[argc - 1]);
@@ -246,7 +244,7 @@
 
 	destDirFlag = isDirectory(baseDestName, TRUE, &destStatBuf);
 	if ((argc > 3) && destDirFlag == FALSE) {
-		fprintf(stderr, not_a_directory, "cp", baseDestName);
+		errorMsg(not_a_directory, baseDestName);
 		goto exit_false;
 	}
 
@@ -272,29 +270,28 @@
 			char		*pushd, *d, *p;
 
 			if ((pushd = getcwd(NULL, BUFSIZ + 1)) == NULL) {
-				fprintf(stderr, "%s: getcwd(): %s\n", applet_name, strerror(errno));
+				errorMsg("getcwd(): %s\n", strerror(errno));
 				continue;
 			}
 			if (chdir(baseDestName) < 0) {
-				fprintf(stderr, "%s: chdir(%s): %s\n", applet_name, baseSrcName, strerror(errno));
+				errorMsg("chdir(%s): %s\n", baseSrcName, strerror(errno));
 				continue;
 			}
 			if ((d = getcwd(NULL, BUFSIZ + 1)) == NULL) {
-				fprintf(stderr, "%s: getcwd(): %s\n", applet_name, strerror(errno));
+				errorMsg("getcwd(): %s\n", strerror(errno));
 				continue;
 			}
 			while (!state && *d != '\0') {
 				if (stat(d, &sb) < 0) {	/* stat not lstat - always dereference targets */
-					fprintf(stderr, "%s: stat(%s) :%s\n", applet_name, d, strerror(errno));
+					errorMsg("stat(%s): %s\n", d, strerror(errno));
 					state = -1;
 					continue;
 				}
 				if ((sb.st_ino == srcStatBuf.st_ino) &&
 					(sb.st_dev == srcStatBuf.st_dev)) {
-					fprintf(stderr,
-							"%s: Cannot %s `%s' "
-							"into a subdirectory of itself, `%s/%s'\n",
-							applet_name, applet_name, baseSrcName, baseDestName, baseSrcName);
+					errorMsg("Cannot %s `%s' into a subdirectory of itself, "
+							"`%s/%s'\n", applet_name, baseSrcName,
+							baseDestName, baseSrcName);
 					state = -1;
 					continue;
 				}
@@ -303,7 +300,7 @@
 				}
 			}
 			if (chdir(pushd) < 0) {
-				fprintf(stderr, "%s: chdir(%s): %s\n", applet_name, pushd, strerror(errno));
+				errorMsg("chdir(%s): %s\n", pushd, strerror(errno));
 				free(pushd);
 				free(d);
 				continue;
diff --git a/cut.c b/cut.c
index 820074e..783d526 100644
--- a/cut.c
+++ b/cut.c
@@ -84,13 +84,13 @@
 void warn(int warn_number, char *option)
 {
 	static char *warn_msg[] = {
-		"%s: Option -%s allowed only with -f\n",
-		"%s: -%s overrides earlier option\n",
-		"%s: -%s not allowed in current mode\n",
-		"%s: Cannot open %s\n"
+		"Option -%s allowed only with -f\n",
+		"-%s overrides earlier option\n",
+		"-%s not allowed in current mode\n",
+		"Cannot open %s\n"
 	};
 
-	fprintf(stderr, warn_msg[warn_number], applet_name, option);
+	errorMsg(warn_msg[warn_number], option);
 	exit_status = warn_number + 1;
 
 }
@@ -98,15 +98,15 @@
 void cuterror(int err)
 {
 	static char *err_mes[] = {
-		"%s: syntax error\n",
-		"%s: position must be >0\n",
-		"%s: line longer than BUFSIZ\n",
-		"%s: range must not decrease from left to right\n",
-		"%s: MAX_FIELD exceeded\n",
-		"%s: MAX_ARGS exceeded\n"
+		"syntax error\n",
+		"position must be >0\n",
+		"line longer than BUFSIZ\n",
+		"range must not decrease from left to right\n",
+		"MAX_FIELD exceeded\n",
+		"MAX_ARGS exceeded\n"
 	};
 
-	fprintf(stderr, err_mes[err - 101], applet_name);
+	errorMsg(err_mes[err - 101]);
 	exit(err);
 }
 
diff --git a/dc.c b/dc.c
index 5bf3bc9..7b13cb9 100644
--- a/dc.c
+++ b/dc.c
@@ -22,7 +22,7 @@
 static void push(double a)
 {
 	if (pointer >= (sizeof(stack) / sizeof(*stack))) {
-		fprintf(stderr, "dc: stack overflow\n");
+		errorMsg("stack overflow\n");
 		exit(-1);
 	} else
 		stack[pointer++] = a;
@@ -31,7 +31,7 @@
 static double pop()
 {
 	if (pointer == 0) {
-		fprintf(stderr, "dc: stack underflow\n");
+		errorMsg("stack underflow\n");
 		exit(-1);
 	}
 	return stack[--pointer];
@@ -132,7 +132,7 @@
 		}
 		o++;
 	}
-	fprintf(stderr, "dc: %s: syntax error.\n", argument);
+	errorMsg("%s: syntax error.\n", argument);
 	exit(-1);
 }
 
diff --git a/dd.c b/dd.c
index 5d9993d..6261dfe 100644
--- a/dd.c
+++ b/dd.c
@@ -86,26 +86,26 @@
 		else if (strncmp("count", *argv, 5) == 0) {
 			count = getNum((strchr(*argv, '=')) + 1);
 			if (count <= 0) {
-				fprintf(stderr, "Bad count value %s\n", *argv);
+				errorMsg("Bad count value %s\n", *argv);
 				goto usage;
 			}
 		} else if (strncmp(*argv, "bs", 2) == 0) {
 			blockSize = getNum((strchr(*argv, '=')) + 1);
 			if (blockSize <= 0) {
-				fprintf(stderr, "Bad block size value %s\n", *argv);
+				errorMsg("Bad block size value %s\n", *argv);
 				goto usage;
 			}
 		} else if (strncmp(*argv, "skip", 4) == 0) {
 			skipBlocks = getNum((strchr(*argv, '=')) + 1);
 			if (skipBlocks <= 0) {
-				fprintf(stderr, "Bad skip value %s\n", *argv);
+				errorMsg("Bad skip value %s\n", *argv);
 				goto usage;
 			}
 
 		} else if (strncmp(*argv, "seek", 4) == 0) {
 			seekBlocks = getNum((strchr(*argv, '=')) + 1);
 			if (seekBlocks <= 0) {
-				fprintf(stderr, "Bad seek value %s\n", *argv);
+				errorMsg("Bad seek value %s\n", *argv);
 				goto usage;
 			}
 
diff --git a/deallocvt.c b/deallocvt.c
index 53d4d9a..906f3a9 100644
--- a/deallocvt.c
+++ b/deallocvt.c
@@ -39,14 +39,12 @@
 		for (i = 1; i < argc; i++) {
 			num = atoi(argv[i]);
 			if (num == 0)
-				fprintf(stderr, "%s: 0: illegal VT number\n", applet_name);
+				errorMsg("0: illegal VT number\n");
 			else if (num == 1)
-				fprintf(stderr, "%s: VT 1 cannot be deallocated\n",
-						applet_name);
+				errorMsg("VT 1 cannot be deallocated\n");
 			else if (ioctl(fd, VT_DISALLOCATE, num)) {
 				perror("VT_DISALLOCATE");
-				fprintf(stderr, "%s: could not deallocate console %d\n",
-						applet_name, num);
+				errorMsg("could not deallocate console %d\n", num);
 				exit( FALSE);
 			}
 		}
diff --git a/df.c b/df.c
index ba3227f..62226ce 100644
--- a/df.c
+++ b/df.c
@@ -82,7 +82,7 @@
 		}
 		while (argc > 1) {
 			if ((mountEntry = findMountPoint(argv[1], mtab_file)) == 0) {
-				fprintf(stderr, "%s: can't find mount point.\n", argv[1]);
+				errorMsg("%s: can't find mount point.\n", argv[1]);
 				exit(FALSE);
 			}
 			status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
diff --git a/du.c b/du.c
index b8e296d..b1ca954 100644
--- a/du.c
+++ b/du.c
@@ -108,7 +108,7 @@
 			}
 
 			if (len + strlen(name) + 1 > BUFSIZ) {
-				fprintf(stderr, name_too_long, "du");
+				errorMsg(name_too_long);
 				du_depth--;
 				return 0;
 			}
@@ -158,7 +158,7 @@
 				usage(du_usage);
 				break;
 			default:
-				fprintf(stderr, "du: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(du_usage);
 			}
 		} else {
@@ -184,7 +184,7 @@
 	return(0);
 }
 
-/* $Id: du.c,v 1.20 2000/06/19 17:25:39 andersen Exp $ */
+/* $Id: du.c,v 1.21 2000/07/14 01:51:25 kraai Exp $ */
 /*
 Local Variables:
 c-file-style: "linux"
diff --git a/dumpkmap.c b/dumpkmap.c
index a497a07..f180505 100644
--- a/dumpkmap.c
+++ b/dumpkmap.c
@@ -58,7 +58,7 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		return 1;
 	}
 
@@ -86,7 +86,7 @@
 				ke.kb_table = i;
 				if (ioctl(fd, KDGKBENT, &ke) < 0) {
 				
-					fprintf(stderr, "ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
+					errorMsg("ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
 					}
 				else {
 					write(1,&ke.kb_value,2);	
diff --git a/editors/sed.c b/editors/sed.c
index 770a56e..3a7360f 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -207,8 +207,8 @@
 		idx++; /* so it points to the next character after the last '/' */
 	}
 	else {
-		fprintf(stderr, "sed.c:get_address: no address found in string\n");
-		fprintf(stderr, "\t(you probably didn't check the string you passed me)\n");
+		errorMsg("get_address: no address found in string\n"
+				"\t(you probably didn't check the string you passed me)\n");
 		idx = -1;
 	}
 
@@ -612,7 +612,7 @@
 		for (i = optind; i < argc; i++) {
 			file = fopen(argv[i], "r");
 			if (file == NULL) {
-				fprintf(stderr, "sed: %s: %s\n", argv[i], strerror(errno));
+				errorMsg("%s: %s\n", argv[i], strerror(errno));
 			} else {
 				process_file(file);
 				fclose(file);
diff --git a/fbset.c b/fbset.c
index 9fde6a1..2fcc7c2 100644
--- a/fbset.c
+++ b/fbset.c
@@ -387,7 +387,7 @@
 		PERROR("fbset(ioctl)");
 	if (g_options & OPT_READMODE) {
 		if (!readmode(&var, modefile, mode)) {
-			fprintf(stderr, "Unknown video mode `%s'\n", mode);
+			errorMsg("Unknown video mode `%s'\n", mode);
 			exit(1);
 		}
 	}
diff --git a/findutils/grep.c b/findutils/grep.c
index 77b5100..03945fa 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -165,7 +165,7 @@
 			file = fopen(cur_file, "r");
 			if (file == NULL) {
 				if (!suppress_err_msgs)
-					fprintf(stderr, "grep: %s: %s\n", cur_file, strerror(errno));
+					errorMsg("%s: %s\n", cur_file, strerror(errno));
 			} else {
 				grep_file(file);
 				fclose(file);
diff --git a/fsck_minix.c b/fsck_minix.c
index 685e0ee..74281a7 100644
--- a/fsck_minix.c
+++ b/fsck_minix.c
@@ -311,7 +311,7 @@
 
 static void die(const char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	leave(8);
 }
 
diff --git a/grep.c b/grep.c
index 77b5100..03945fa 100644
--- a/grep.c
+++ b/grep.c
@@ -165,7 +165,7 @@
 			file = fopen(cur_file, "r");
 			if (file == NULL) {
 				if (!suppress_err_msgs)
-					fprintf(stderr, "grep: %s: %s\n", cur_file, strerror(errno));
+					errorMsg("%s: %s\n", cur_file, strerror(errno));
 			} else {
 				grep_file(file);
 				fclose(file);
diff --git a/gunzip.c b/gunzip.c
index 89e46a6..de68bd1 100644
--- a/gunzip.c
+++ b/gunzip.c
@@ -659,7 +659,7 @@
 		if (*argv == '\0')
 			usage(gunzip_usage);
 		if (strlen(*argv) > MAX_PATH_LEN) {
-			fprintf(stderr, name_too_long, "gunzip");
+			errorMsg(name_too_long);
 			exit(WARNING);
 		}
 		strcpy(ifname, *argv);
@@ -698,7 +698,7 @@
 
 		/* And get to work */
 		if (strlen(ifname) > MAX_PATH_LEN - 4) {
-			fprintf(stderr, name_too_long, "gunzip");
+			errorMsg(name_too_long);
 			exit(WARNING);
 		}
 		strcpy(ofname, ifname);
@@ -780,8 +780,7 @@
 
 		method = (int) get_byte();
 		if (method != DEFLATED) {
-			fprintf(stderr,
-					"unknown method %d -- get newer version of gzip\n",
+			errorMsg("unknown method %d -- get newer version of gzip\n",
 					method);
 			exit_code = ERROR;
 			return -1;
diff --git a/head.c b/head.c
index f42f483..b82678d 100644
--- a/head.c
+++ b/head.c
@@ -75,7 +75,7 @@
 			case 'h':
 				usage(head_usage);
 			default:
-				fprintf(stderr, "head: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(head_usage);
 			}
 		} else {
@@ -95,8 +95,7 @@
 
 			src = fopen(argv[i], "r");
 			if (!src) {
-				fprintf(stderr, "head: %s: %s\n", argv[i],
-						strerror(errno));
+				errorMsg("%s: %s\n", argv[i], strerror(errno));
 			} else {
 				/* emulating GNU behaviour */
 				if (need_headers) {
@@ -112,4 +111,4 @@
 	return(0);
 }
 
-/* $Id: head.c,v 1.11 2000/06/19 17:25:39 andersen Exp $ */
+/* $Id: head.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/hostname.c b/hostname.c
index e909138..60f66c0 100644
--- a/hostname.c
+++ b/hostname.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: hostname.c,v 1.10 2000/06/19 17:25:39 andersen Exp $
+ * $Id: hostname.c,v 1.11 2000/07/14 01:51:25 kraai Exp $
  * Mini hostname implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -55,8 +55,7 @@
 	if (!isfile) {
 		if (sethostname(s, strlen(s)) < 0) {
 			if (errno == EPERM)
-				fprintf(stderr,
-						"hostname: you must be root to change the hostname\n");
+				errorMsg("you must be root to change the hostname\n");
 			else
 				perror("sethostname");
 			exit(1);
diff --git a/insmod.c b/insmod.c
index 7e90dfb..b3d5ac8 100644
--- a/insmod.c
+++ b/insmod.c
@@ -70,7 +70,7 @@
 #ifndef MODUTILS_MODULE_H
 #define MODUTILS_MODULE_H 1
 
-#ident "$Id: insmod.c,v 1.15 2000/07/11 17:52:22 andersen Exp $"
+#ident "$Id: insmod.c,v 1.16 2000/07/14 01:51:25 kraai Exp $"
 
 /* This file contains the structures used by the 2.0 and 2.1 kernels.
    We do not use the kernel headers directly because we do not wish
@@ -276,7 +276,7 @@
 #ifndef MODUTILS_OBJ_H
 #define MODUTILS_OBJ_H 1
 
-#ident "$Id: insmod.c,v 1.15 2000/07/11 17:52:22 andersen Exp $"
+#ident "$Id: insmod.c,v 1.16 2000/07/14 01:51:25 kraai Exp $"
 
 /* The relocatable object is manipulated using elfin types.  */
 
@@ -938,7 +938,7 @@
 				/* Don't report an error if the symbol is coming from
 				   the kernel or some external module.  */
 				if (secidx <= SHN_HIRESERVE)
-					fprintf(stderr, "%s multiply defined\n", name);
+					errorMsg("%s multiply defined\n", name);
 				return sym;
 			}
 		}
@@ -1201,7 +1201,7 @@
 
 		/* Also check that the parameter was not resolved from the kernel.  */
 		if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
-			fprintf(stderr, "symbol for parameter %s not found\n", p);
+			errorMsg("symbol for parameter %s not found\n", p);
 			return 0;
 		}
 
@@ -1214,7 +1214,7 @@
 			str = alloca(strlen(q));
 			for (r = str, q++; *q != '"'; ++q, ++r) {
 				if (*q == '\0') {
-					fprintf(stderr, "improperly terminated string argument for %s\n", p);
+					errorMsg("improperly terminated string argument for %s\n", p);
 					return 0;
 				} else if (*q == '\\')
 					switch (*++q) {
@@ -1567,7 +1567,7 @@
 		p = get_modinfo_value(f, key);
 		key += 5;
 		if (p == NULL) {
-			fprintf(stderr, "invalid parameter %s\n", key);
+			errorMsg("invalid parameter %s\n", key);
 			return 0;
 		}
 
@@ -1575,7 +1575,7 @@
 
 		/* Also check that the parameter was not resolved from the kernel.  */
 		if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
-			fprintf(stderr, "symbol for parameter %s not found\n", key);
+			errorMsg("symbol for parameter %s not found\n", key);
 			return 0;
 		}
 
@@ -1603,8 +1603,7 @@
 					str = alloca(strlen(q));
 					for (r = str, q++; *q != '"'; ++q, ++r) {
 						if (*q == '\0') {
-							fprintf(stderr,
-									"improperly terminated string argument for %s\n",
+							errorMsg("improperly terminated string argument for %s\n",
 									key);
 							return 0;
 						} else if (*q == '\\')
@@ -1698,8 +1697,7 @@
 					/* Get the size of each member */
 					/* Probably we should do that outside the loop ? */
 					if (!isdigit(*(p + 1))) {
-						fprintf(stderr,
-								"parameter type 'c' for %s must be followed by"
+						errorMsg("parameter type 'c' for %s must be followed by"
 								" the maximum size\n", key);
 						return 0;
 					}
@@ -1707,8 +1705,7 @@
 
 					/* Check length */
 					if (strlen(str) >= charssize) {
-						fprintf(stderr,
-								"string too long for %s (max %ld)\n", key,
+						errorMsg("string too long for %s (max %ld)\n", key,
 								charssize - 1);
 						return 0;
 					}
@@ -1737,8 +1734,7 @@
 					break;
 
 				default:
-					fprintf(stderr, "unknown parameter type '%c' for %s\n",
-							*p, key);
+					errorMsg("unknown parameter type '%c' for %s\n", *p, key);
 					return 0;
 				}
 			}
@@ -1757,22 +1753,21 @@
 
 			case ',':
 				if (++n > max) {
-					fprintf(stderr, "too many values for %s (max %d)\n",
-							key, max);
+					errorMsg("too many values for %s (max %d)\n", key, max);
 					return 0;
 				}
 				++q;
 				break;
 
 			default:
-				fprintf(stderr, "invalid argument syntax for %s\n", key);
+				errorMsg("invalid argument syntax for %s\n", key);
 				return 0;
 			}
 		}
 
 	  end_of_arg:
 		if (n < min) {
-			fprintf(stderr, "too few values for %s (min %d)\n", key, min);
+			errorMsg("too few values for %s (min %d)\n", key, min);
 			return 0;
 		}
 
@@ -2157,7 +2152,7 @@
 					sym->secidx = SHN_ABS;
 					sym->value = 0;
 				} else {
-					fprintf(stderr, "unresolved symbol %s\n", sym->name);
+					errorMsg("unresolved symbol %s\n", sym->name);
 					ret = 0;
 				}
 			}
@@ -2380,11 +2375,11 @@
 				errmsg = "Unhandled relocation";
 			  bad_reloc:
 				if (extsym) {
-					fprintf(stderr, "%s of type %ld for %s\n", errmsg,
+					errorMsg("%s of type %ld for %s\n", errmsg,
 							(long) ELFW(R_TYPE) (rel->r_info),
 							strtab + extsym->st_name);
 				} else {
-					fprintf(stderr, "%s of type %ld\n", errmsg,
+					errorMsg("%s of type %ld\n", errmsg,
 							(long) ELFW(R_TYPE) (rel->r_info));
 				}
 				ret = 0;
@@ -2469,25 +2464,25 @@
 		|| f->header.e_ident[EI_MAG1] != ELFMAG1
 		|| f->header.e_ident[EI_MAG2] != ELFMAG2
 		|| f->header.e_ident[EI_MAG3] != ELFMAG3) {
-		fprintf(stderr, "not an ELF file\n");
+		errorMsg("not an ELF file\n");
 		return NULL;
 	}
 	if (f->header.e_ident[EI_CLASS] != ELFCLASSM
 		|| f->header.e_ident[EI_DATA] != ELFDATAM
 		|| f->header.e_ident[EI_VERSION] != EV_CURRENT
 		|| !MATCH_MACHINE(f->header.e_machine)) {
-		fprintf(stderr, "ELF file not for this architecture\n");
+		errorMsg("ELF file not for this architecture\n");
 		return NULL;
 	}
 	if (f->header.e_type != ET_REL) {
-		fprintf(stderr, "ELF file not a relocatable object\n");
+		errorMsg("ELF file not a relocatable object\n");
 		return NULL;
 	}
 
 	/* Read the section headers.  */
 
 	if (f->header.e_shentsize != sizeof(ElfW(Shdr))) {
-		fprintf(stderr, "section header size mismatch: %lu != %lu\n",
+		errorMsg("section header size mismatch: %lu != %lu\n",
 				(unsigned long) f->header.e_shentsize,
 				(unsigned long) sizeof(ElfW(Shdr)));
 		return NULL;
@@ -2540,13 +2535,11 @@
 
 #if SHT_RELM == SHT_REL
 		case SHT_RELA:
-			fprintf(stderr,
-					"RELA relocations not supported on this architecture\n");
+			errorMsg("RELA relocations not supported on this architecture\n");
 			return NULL;
 #else
 		case SHT_REL:
-			fprintf(stderr,
-					"REL relocations not supported on this architecture\n");
+			errorMsg("REL relocations not supported on this architecture\n");
 			return NULL;
 #endif
 
@@ -2559,7 +2552,7 @@
 				break;
 			}
 
-			fprintf(stderr, "can't handle sections of type %ld\n",
+			errorMsg("can't handle sections of type %ld\n",
 					(long) sec->header.sh_type);
 			return NULL;
 		}
@@ -2588,7 +2581,7 @@
 				ElfW(Sym) * sym;
 
 				if (sec->header.sh_entsize != sizeof(ElfW(Sym))) {
-					fprintf(stderr, "symbol size mismatch: %lu != %lu\n",
+					errorMsg("symbol size mismatch: %lu != %lu\n",
 							(unsigned long) sec->header.sh_entsize,
 							(unsigned long) sizeof(ElfW(Sym)));
 					return NULL;
@@ -2620,8 +2613,7 @@
 
 		case SHT_RELM:
 			if (sec->header.sh_entsize != sizeof(ElfW(RelM))) {
-				fprintf(stderr,
-						"relocation entry size mismatch: %lu != %lu\n",
+				errorMsg("relocation entry size mismatch: %lu != %lu\n",
 						(unsigned long) sec->header.sh_entsize,
 						(unsigned long) sizeof(ElfW(RelM)));
 				return NULL;
@@ -2754,20 +2746,20 @@
 	} else {
 		m_version = old_get_module_version(f, m_strversion);
 		if (m_version == -1) {
-			fprintf(stderr,
-					"couldn't find the kernel version the module was compiled for\n");
+			errorMsg("couldn't find the kernel version the module was "
+					"compiled for\n");
 			goto out;
 		}
 	}
 
 	if (strncmp(k_strversion, m_strversion, STRVERSIONLEN) != 0) {
 		if (flag_force_load) {
-			fprintf(stderr, "Warning: kernel-module version mismatch\n"
+			errorMsg("Warning: kernel-module version mismatch\n"
 					"\t%s was compiled for kernel version %s\n"
 					"\twhile this kernel is version %s\n",
 					m_filename, m_strversion, k_strversion);
 		} else {
-			fprintf(stderr, "kernel-module version mismatch\n"
+			errorMsg("kernel-module version mismatch\n"
 					"\t%s was compiled for kernel version %s\n"
 					"\twhile this kernel is version %s.\n",
 					m_filename, m_strversion, k_strversion);
@@ -2785,7 +2777,7 @@
 			goto out;
 		k_crcs = new_is_kernel_checksummed();
 #else
-		fprintf(stderr, "Not configured to support new kernels\n");
+		errorMsg("Not configured to support new kernels\n");
 		goto out;
 #endif
 	} else {
@@ -2794,7 +2786,7 @@
 			goto out;
 		k_crcs = old_is_kernel_checksummed();
 #else
-		fprintf(stderr, "Not configured to support old kernels\n");
+		errorMsg("Not configured to support old kernels\n");
 		goto out;
 #endif
 	}
@@ -2851,11 +2843,10 @@
 	case 0:
 		break;
 	case EEXIST:
-		fprintf(stderr, "A module named %s already exists\n", m_name);
+		errorMsg("A module named %s already exists\n", m_name);
 		goto out;
 	case ENOMEM:
-		fprintf(stderr,
-				"Can't allocate kernel memory for module; needed %lu bytes\n",
+		errorMsg("Can't allocate kernel memory for module; needed %lu bytes\n",
 				m_size);
 		goto out;
 	default:
diff --git a/lash.c b/lash.c
index f4564f7..048394a 100644
--- a/lash.c
+++ b/lash.c
@@ -207,12 +207,12 @@
 
 	if (!jobList->head) {
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
-			fprintf(stderr, "%s: exactly one argument is expected\n",
+			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
 			return FALSE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
-			fprintf(stderr, "%s: bad argument '%s'\n",
+			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
 			return FALSE;
 			for (job = jobList->head; job; job = job->next) {
@@ -226,7 +226,7 @@
 	}
 
 	if (!job) {
-		fprintf(stderr, "%s: unknown job %d\n",
+		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
 		return FALSE;
 	}
@@ -519,7 +519,7 @@
 
 	rc = glob(prog->argv[argc - 1], flags, NULL, &prog->globResult);
 	if (rc == GLOB_NOSPACE) {
-		fprintf(stderr, "out of space during glob operation\n");
+		errorMsg("out of space during glob operation\n");
 		return;
 	} else if (rc == GLOB_NOMATCH ||
 			   (!rc && (prog->globResult.gl_pathc - i) == 1 &&
@@ -607,7 +607,7 @@
 			if (*src == '\\') {
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -686,7 +686,7 @@
 					chptr++;
 
 				if (!*chptr) {
-					fprintf(stderr, "file name expected after %c\n", *src);
+					errorMsg("file name expected after %c\n", *src);
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -705,7 +705,7 @@
 				if (*prog->argv[argc])
 					argc++;
 				if (!argc) {
-					fprintf(stderr, "empty command in pipe1.\n");
+					errorMsg("empty command in pipe1\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -731,7 +731,7 @@
 					src++;
 
 				if (!*src) {
-					fprintf(stderr, "empty command in pipe2\n");
+					errorMsg("empty command in pipe2\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -750,7 +750,7 @@
 			case '\\':
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -965,7 +965,7 @@
 		if (openfd < 0) {
 			/* this could get lost if stderr has been redirected, but
 			   bash and ash both lose it as well (though zsh doesn't!) */
-			fprintf(stderr, "error opening %s: %s\n", redir->filename,
+			errorMsg("error opening %s: %s\n", redir->filename,
 					strerror(errno));
 			return 1;
 		}
diff --git a/ln.c b/ln.c
index ac1f68e..9f77743 100644
--- a/ln.c
+++ b/ln.c
@@ -23,7 +23,6 @@
 
 #include "internal.h"
 #define BB_DECLARE_EXTERN
-#define bb_need_name_too_long
 #define bb_need_not_a_directory
 #include "messages.c"
 
@@ -92,7 +91,7 @@
 
 	linkIntoDirFlag = isDirectory(linkName, followLinks, NULL);
 	if ((argc >= 3) && linkIntoDirFlag == FALSE) {
-		fprintf(stderr, not_a_directory, "ln", linkName);
+		errorMsg(not_a_directory, linkName);
 		exit FALSE;
 	}
 
diff --git a/loadacm.c b/loadacm.c
index a64c691..9eebf3b 100644
--- a/loadacm.c
+++ b/loadacm.c
@@ -46,12 +46,12 @@
 
 	fd = open("/dev/tty", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty1: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty1: %s\n", strerror(errno));
 		return( FALSE);
 	}
 
 	if (screen_map_load(fd, stdin)) {
-		fprintf(stderr, "Error loading acm: %s\n", strerror(errno));
+		errorMsg("Error loading acm: %s\n", strerror(errno));
 		return( FALSE);
 	}
 
@@ -79,8 +79,7 @@
 		if (parse_failed) {
 			if (-1 == fseek(fp, 0, SEEK_SET)) {
 				if (errno == ESPIPE)
-					fprintf(stderr,
-							"16bit screen-map MUST be a regular file.\n"),
+					errorMsg("16bit screen-map MUST be a regular file.\n"),
 						exit(1);
 				else
 					perror("fseek failed reading binary 16bit screen-map"),
@@ -91,7 +90,7 @@
 				perror("Cannot read [new] map from file"), exit(1);
 #if 0
 			else
-				fprintf(stderr, "Input screen-map is binary.\n");
+				errorMsg("Input screen-map is binary.\n");
 #endif
 		}
 
@@ -108,8 +107,7 @@
 	/* rewind... */
 	if (-1 == fseek(fp, 0, SEEK_SET)) {
 		if (errno == ESPIPE)
-			fprintf(stderr,
-					"Assuming 8bit screen-map - MUST be a regular file.\n"),
+			errorMsg("Assuming 8bit screen-map - MUST be a regular file.\n"),
 				exit(1);
 		else
 			perror("fseek failed assuming 8bit screen-map"), exit(1);
@@ -122,7 +120,7 @@
 			if (-1 == fseek(fp, 0, SEEK_SET)) {
 				if (errno == ESPIPE)
 					/* should not - it succedeed above */
-					fprintf(stderr, "fseek() returned ESPIPE !\n"),
+					errorMsg("fseek() returned ESPIPE !\n"),
 						exit(1);
 				else
 					perror("fseek for binary 8bit screen-map"), exit(1);
@@ -132,7 +130,7 @@
 				perror("Cannot read [old] map from file"), exit(1);
 #if 0
 			else
-				fprintf(stderr, "Input screen-map is binary.\n");
+				errorMsg("Input screen-map is binary.\n");
 #endif
 		}
 
@@ -141,7 +139,7 @@
 		else
 			return 0;
 	}
-	fprintf(stderr, "Error parsing symbolic map\n");
+	errorMsg("Error parsing symbolic map\n");
 	return(1);
 }
 
diff --git a/loadfont.c b/loadfont.c
index 7eaf40e..b3f9f4f 100644
--- a/loadfont.c
+++ b/loadfont.c
@@ -56,7 +56,7 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		return( FALSE);
 	}
 	loadnewfont(fd);
@@ -72,7 +72,7 @@
 	memset(buf, 0, sizeof(buf));
 
 	if (unit < 1 || unit > 32) {
-		fprintf(stderr, "Bad character size %d\n", unit);
+		errorMsg("Bad character size %d\n", unit);
 		exit(1);
 	}
 
@@ -112,7 +112,7 @@
 	up = (struct unipair *) malloc(maxct * sizeof(struct unipair));
 
 	if (!up) {
-		fprintf(stderr, "Out of memory?\n");
+		errorMsg("Out of memory?\n");
 		exit(1);
 	}
 	for (glyph = 0; glyph < fontsize; glyph++) {
@@ -137,8 +137,8 @@
 	if (ioctl(fd, PIO_UNIMAPCLR, &advice)) {
 #ifdef ENOIOCTLCMD
 		if (errno == ENOIOCTLCMD) {
-			fprintf(stderr, "It seems this kernel is older than 1.1.92\n");
-			fprintf(stderr, "No Unicode mapping table loaded.\n");
+			errorMsg("It seems this kernel is older than 1.1.92\n");
+			errorMsg("No Unicode mapping table loaded.\n");
 		} else
 #endif
 			perror("PIO_UNIMAPCLR");
@@ -198,13 +198,13 @@
 			goto no_psf;
 
 		if (psfhdr.mode > PSF_MAXMODE) {
-			fprintf(stderr, "Unsupported psf file mode\n");
+			errorMsg("Unsupported psf file mode\n");
 			exit(1);
 		}
 		fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
 #if !defined( PIO_FONTX ) || defined( __sparc__ )
 		if (fontsize != 256) {
-			fprintf(stderr, "Only fontsize 256 supported\n");
+			errorMsg("Only fontsize 256 supported\n");
 			exit(1);
 		}
 #endif
@@ -214,7 +214,7 @@
 
 		head = head0 + fontsize * unit;
 		if (head > inputlth || (!hastable && head != inputlth)) {
-			fprintf(stderr, "Input file: bad length\n");
+			errorMsg("Input file: bad length\n");
 			exit(1);
 		}
 		do_loadfont(fd, inbuf + head0, unit, fontsize);
@@ -231,7 +231,7 @@
 	} else {
 		/* bare font */
 		if (inputlth & 0377) {
-			fprintf(stderr, "Bad input file size\n");
+			errorMsg("Bad input file size\n");
 			exit(1);
 		}
 		offset = 0;
diff --git a/loadkmap.c b/loadkmap.c
index c2e4c94..72247a6 100644
--- a/loadkmap.c
+++ b/loadkmap.c
@@ -59,25 +59,25 @@
 
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
-		fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
+		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
 		exit(FALSE);
 	}
 
 	read(0, buff, 7);
 	if (0 != strncmp(buff, magic, 7)) {
-		fprintf(stderr, "This is not a valid binary keymap.\n");
+		errorMsg("This is not a valid binary keymap.\n");
 		exit(FALSE);
 	}
 
 	if (MAX_NR_KEYMAPS != read(0, flags, MAX_NR_KEYMAPS)) {
-		fprintf(stderr, "Error reading keymap flags: %s\n",
+		errorMsg("Error reading keymap flags: %s\n",
 				strerror(errno));
 		exit(FALSE);
 	}
 
 	ibuff = (u_short *) malloc(ibuffsz);
 	if (!ibuff) {
-		fprintf(stderr, "Out of memory.\n");
+		errorMsg("Out of memory.\n");
 		exit(FALSE);
 	}
 
@@ -87,7 +87,7 @@
 			while (pos < ibuffsz) {
 				if ((readsz = read(0, (char *) ibuff + pos, ibuffsz - pos))
 					< 0) {
-					fprintf(stderr, "Error reading keymap: %s\n",
+					errorMsg("Error reading keymap: %s\n",
 							strerror(errno));
 					exit(FALSE);
 				}
diff --git a/logger.c b/logger.c
index d32ccaa..71d7030 100644
--- a/logger.c
+++ b/logger.c
@@ -96,7 +96,7 @@
 		*s = '\0';
 		fac = decode(save, facilitynames);
 		if (fac < 0) {
-			fprintf(stderr, "unknown facility name: %s\n", save);
+			errorMsg("unknown facility name: %s\n", save);
 			exit(FALSE);
 		}
 		*s++ = '.';
@@ -105,7 +105,7 @@
 	}
 	lev = decode(s, prioritynames);
 	if (lev < 0) {
-		fprintf(stderr, "unknown priority name: %s\n", save);
+		errorMsg("unknown priority name: %s\n", save);
 		exit(FALSE);
 	}
 	return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
@@ -166,7 +166,7 @@
 		if (argc >= 1) {
 			message = *argv;
 		} else {
-			fprintf(stderr, "No message\n");
+			errorMsg("No message\n");
 			exit(FALSE);
 		}
 	}
diff --git a/logname.c b/logname.c
index 4b4483c..12ebfbd 100644
--- a/logname.c
+++ b/logname.c
@@ -41,6 +41,6 @@
 		puts(user);
 		exit(TRUE);
 	}
-	fprintf(stderr, "no login name\n");
+	errorMsg("no login name\n");
 	return(FALSE);
 }
diff --git a/messages.c b/messages.c
index f2374ee..428db9e 100644
--- a/messages.c
+++ b/messages.c
@@ -48,13 +48,13 @@
 
 
 #if defined bb_need_name_too_long || ! defined BB_DECLARE_EXTERN
-	BB_DEF_MESSAGE(name_too_long, "%s: file name too long\n")
+	BB_DEF_MESSAGE(name_too_long, "file name too long\n")
 #endif
 #if defined bb_need_omitting_directory || ! defined BB_DECLARE_EXTERN
-	BB_DEF_MESSAGE(omitting_directory, "%s: %s: omitting directory\n")
+	BB_DEF_MESSAGE(omitting_directory, "%s: omitting directory\n")
 #endif
 #if defined bb_need_not_a_directory || ! defined BB_DECLARE_EXTERN
-	BB_DEF_MESSAGE(not_a_directory, "%s: %s: not a directory\n")
+	BB_DEF_MESSAGE(not_a_directory, "%s: not a directory\n")
 #endif
 #if defined bb_need_memory_exhausted || ! defined BB_DECLARE_EXTERN
 	BB_DEF_MESSAGE(memory_exhausted, "memory exhausted\n")
@@ -63,7 +63,7 @@
 	BB_DEF_MESSAGE(invalid_date, "invalid date `%s'\n")
 #endif
 #if defined bb_need_invalid_option || ! defined BB_DECLARE_EXTERN
-	BB_DEF_MESSAGE(invalid_option, "%s: invalid option -- %c\n")
+	BB_DEF_MESSAGE(invalid_option, "invalid option -- %c\n")
 #endif
 #if defined bb_need_io_error || ! defined BB_DECLARE_EXTERN
 	BB_DEF_MESSAGE(io_error, "%s: input/output error -- %s\n")
@@ -75,7 +75,7 @@
 	BB_DEF_MESSAGE(write_error, "Write Error\n")
 #endif
 #if defined bb_need_too_few_args || ! defined BB_DECLARE_EXTERN
-	BB_DEF_MESSAGE(too_few_args, "%s: too few arguments\n")
+	BB_DEF_MESSAGE(too_few_args, "too few arguments\n")
 #endif
 
 
diff --git a/miscutils/dc.c b/miscutils/dc.c
index 5bf3bc9..7b13cb9 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -22,7 +22,7 @@
 static void push(double a)
 {
 	if (pointer >= (sizeof(stack) / sizeof(*stack))) {
-		fprintf(stderr, "dc: stack overflow\n");
+		errorMsg("stack overflow\n");
 		exit(-1);
 	} else
 		stack[pointer++] = a;
@@ -31,7 +31,7 @@
 static double pop()
 {
 	if (pointer == 0) {
-		fprintf(stderr, "dc: stack underflow\n");
+		errorMsg("stack underflow\n");
 		exit(-1);
 	}
 	return stack[--pointer];
@@ -132,7 +132,7 @@
 		}
 		o++;
 	}
-	fprintf(stderr, "dc: %s: syntax error.\n", argument);
+	errorMsg("%s: syntax error.\n", argument);
 	exit(-1);
 }
 
diff --git a/miscutils/mt.c b/miscutils/mt.c
index 304d664..4ab4782 100644
--- a/miscutils/mt.c
+++ b/miscutils/mt.c
@@ -81,7 +81,7 @@
 	}
 
 	if (code->name == 0) {
-		fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]);
+		errorMsg("unrecognized opcode %s.\n", argv[1]);
 		exit (FALSE);
 	}
 
diff --git a/mkdir.c b/mkdir.c
index b18c949..f6e08ca 100644
--- a/mkdir.c
+++ b/mkdir.c
@@ -62,7 +62,7 @@
 				/* Find the specified modes */
 				mode = 0;
 				if (parse_mode(*(++argv), &mode) == FALSE) {
-					fprintf(stderr, "Unknown mode: %s\n", *argv);
+					errorMsg("Unknown mode: %s\n", *argv);
 					exit FALSE;
 				}
 				/* Set the umask for this process so it doesn't 
@@ -91,13 +91,13 @@
 		char buf[BUFSIZ + 1];
 
 		if (strlen(*argv) > BUFSIZ - 1) {
-			fprintf(stderr, name_too_long, "mkdir");
+			errorMsg(name_too_long);
 			exit FALSE;
 		}
 		strcpy(buf, *argv);
 		status = stat(buf, &statBuf);
 		if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
-			fprintf(stderr, "%s: File exists\n", buf);
+			errorMsg("%s: File exists\n", buf);
 			exit FALSE;
 		}
 		if (parentFlag == TRUE) {
diff --git a/mkfs_minix.c b/mkfs_minix.c
index b6f958f..e4dedaf 100644
--- a/mkfs_minix.c
+++ b/mkfs_minix.c
@@ -263,7 +263,7 @@
  */
 static volatile void die(char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	exit(8);
 }
 
@@ -814,8 +814,8 @@
 #ifdef HAVE_MINIX2
 						version2 = 1;
 #else
-						fprintf(stderr, "%s: not compiled with minix v2 support\n",
-								applet_name, device_name);
+						errorMsg("%s: not compiled with minix v2 support\n",
+								device_name);
 						exit(-1);
 #endif
 						break;
diff --git a/mkswap.c b/mkswap.c
index 2009636..5a33945 100644
--- a/mkswap.c
+++ b/mkswap.c
@@ -116,7 +116,7 @@
 
 #ifdef PAGE_SIZE
 	if (pagesize != PAGE_SIZE)
-		fprintf(stderr, "Assuming pages of size %d\n", pagesize);
+		errorMsg("Assuming pages of size %d\n", pagesize);
 #endif
 	signature_page = (int *) xmalloc(pagesize);
 	memset(signature_page, 0, pagesize);
@@ -204,7 +204,7 @@
 
 void die(const char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	exit(FALSE);
 }
 
@@ -345,18 +345,14 @@
 		}
 	}
 	if (!device_name) {
-		fprintf(stderr,
-				"%s: error: Nowhere to set up swap on?\n", applet_name);
+		errorMsg("error: Nowhere to set up swap on?\n");
 		usage(mkswap_usage);
 	}
 	sz = get_size(device_name);
 	if (!PAGES) {
 		PAGES = sz;
 	} else if (PAGES > sz && !force) {
-		fprintf(stderr,
-				"%s: error: "
-				"size %ld is larger than device size %d\n",
-				applet_name,
+		errorMsg("error: size %ld is larger than device size %d\n",
 				PAGES * (pagesize / 1024), sz * (pagesize / 1024));
 		exit(FALSE);
 	}
@@ -372,14 +368,12 @@
 			version = 1;
 	}
 	if (version != 0 && version != 1) {
-		fprintf(stderr, "%s: error: unknown version %d\n",
-				applet_name, version);
+		errorMsg("error: unknown version %d\n", version);
 		usage(mkswap_usage);
 	}
 	if (PAGES < 10) {
-		fprintf(stderr,
-				"%s: error: swap area needs to be at least %ldkB\n",
-				applet_name, (long) (10 * pagesize / 1024));
+		errorMsg("error: swap area needs to be at least %ldkB\n",
+				(long) (10 * pagesize / 1024));
 		usage(mkswap_usage);
 	}
 #if 0
@@ -397,8 +391,8 @@
 #endif
 	if (PAGES > maxpages) {
 		PAGES = maxpages;
-		fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
-				applet_name, PAGES * pagesize / 1024);
+		errorMsg("warning: truncating swap area to %ldkB\n",
+				PAGES * pagesize / 1024);
 	}
 
 	DEV = open(device_name, O_RDWR);
@@ -424,11 +418,10 @@
 			for (sum = 0; q >= (unsigned short *) buffer;)
 				sum ^= *q--;
 			if (!sum) {
-				fprintf(stderr, "\
-%s: Device '%s' contains a valid Sun disklabel.\n\
-This probably means creating v0 swap would destroy your partition table\n\
-No swap created. If you really want to create swap v0 on that device, use\n\
-the -f option to force it.\n", applet_name, device_name);
+				errorMsg("Device '%s' contains a valid Sun disklabel.\n"
+"This probably means creating v0 swap would destroy your partition table\n"
+"No swap created. If you really want to create swap v0 on that device, use\n"
+"the -f option to force it.\n", device_name);
 				exit(FALSE);
 			}
 		}
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 7e90dfb..b3d5ac8 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -70,7 +70,7 @@
 #ifndef MODUTILS_MODULE_H
 #define MODUTILS_MODULE_H 1
 
-#ident "$Id: insmod.c,v 1.15 2000/07/11 17:52:22 andersen Exp $"
+#ident "$Id: insmod.c,v 1.16 2000/07/14 01:51:25 kraai Exp $"
 
 /* This file contains the structures used by the 2.0 and 2.1 kernels.
    We do not use the kernel headers directly because we do not wish
@@ -276,7 +276,7 @@
 #ifndef MODUTILS_OBJ_H
 #define MODUTILS_OBJ_H 1
 
-#ident "$Id: insmod.c,v 1.15 2000/07/11 17:52:22 andersen Exp $"
+#ident "$Id: insmod.c,v 1.16 2000/07/14 01:51:25 kraai Exp $"
 
 /* The relocatable object is manipulated using elfin types.  */
 
@@ -938,7 +938,7 @@
 				/* Don't report an error if the symbol is coming from
 				   the kernel or some external module.  */
 				if (secidx <= SHN_HIRESERVE)
-					fprintf(stderr, "%s multiply defined\n", name);
+					errorMsg("%s multiply defined\n", name);
 				return sym;
 			}
 		}
@@ -1201,7 +1201,7 @@
 
 		/* Also check that the parameter was not resolved from the kernel.  */
 		if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
-			fprintf(stderr, "symbol for parameter %s not found\n", p);
+			errorMsg("symbol for parameter %s not found\n", p);
 			return 0;
 		}
 
@@ -1214,7 +1214,7 @@
 			str = alloca(strlen(q));
 			for (r = str, q++; *q != '"'; ++q, ++r) {
 				if (*q == '\0') {
-					fprintf(stderr, "improperly terminated string argument for %s\n", p);
+					errorMsg("improperly terminated string argument for %s\n", p);
 					return 0;
 				} else if (*q == '\\')
 					switch (*++q) {
@@ -1567,7 +1567,7 @@
 		p = get_modinfo_value(f, key);
 		key += 5;
 		if (p == NULL) {
-			fprintf(stderr, "invalid parameter %s\n", key);
+			errorMsg("invalid parameter %s\n", key);
 			return 0;
 		}
 
@@ -1575,7 +1575,7 @@
 
 		/* Also check that the parameter was not resolved from the kernel.  */
 		if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
-			fprintf(stderr, "symbol for parameter %s not found\n", key);
+			errorMsg("symbol for parameter %s not found\n", key);
 			return 0;
 		}
 
@@ -1603,8 +1603,7 @@
 					str = alloca(strlen(q));
 					for (r = str, q++; *q != '"'; ++q, ++r) {
 						if (*q == '\0') {
-							fprintf(stderr,
-									"improperly terminated string argument for %s\n",
+							errorMsg("improperly terminated string argument for %s\n",
 									key);
 							return 0;
 						} else if (*q == '\\')
@@ -1698,8 +1697,7 @@
 					/* Get the size of each member */
 					/* Probably we should do that outside the loop ? */
 					if (!isdigit(*(p + 1))) {
-						fprintf(stderr,
-								"parameter type 'c' for %s must be followed by"
+						errorMsg("parameter type 'c' for %s must be followed by"
 								" the maximum size\n", key);
 						return 0;
 					}
@@ -1707,8 +1705,7 @@
 
 					/* Check length */
 					if (strlen(str) >= charssize) {
-						fprintf(stderr,
-								"string too long for %s (max %ld)\n", key,
+						errorMsg("string too long for %s (max %ld)\n", key,
 								charssize - 1);
 						return 0;
 					}
@@ -1737,8 +1734,7 @@
 					break;
 
 				default:
-					fprintf(stderr, "unknown parameter type '%c' for %s\n",
-							*p, key);
+					errorMsg("unknown parameter type '%c' for %s\n", *p, key);
 					return 0;
 				}
 			}
@@ -1757,22 +1753,21 @@
 
 			case ',':
 				if (++n > max) {
-					fprintf(stderr, "too many values for %s (max %d)\n",
-							key, max);
+					errorMsg("too many values for %s (max %d)\n", key, max);
 					return 0;
 				}
 				++q;
 				break;
 
 			default:
-				fprintf(stderr, "invalid argument syntax for %s\n", key);
+				errorMsg("invalid argument syntax for %s\n", key);
 				return 0;
 			}
 		}
 
 	  end_of_arg:
 		if (n < min) {
-			fprintf(stderr, "too few values for %s (min %d)\n", key, min);
+			errorMsg("too few values for %s (min %d)\n", key, min);
 			return 0;
 		}
 
@@ -2157,7 +2152,7 @@
 					sym->secidx = SHN_ABS;
 					sym->value = 0;
 				} else {
-					fprintf(stderr, "unresolved symbol %s\n", sym->name);
+					errorMsg("unresolved symbol %s\n", sym->name);
 					ret = 0;
 				}
 			}
@@ -2380,11 +2375,11 @@
 				errmsg = "Unhandled relocation";
 			  bad_reloc:
 				if (extsym) {
-					fprintf(stderr, "%s of type %ld for %s\n", errmsg,
+					errorMsg("%s of type %ld for %s\n", errmsg,
 							(long) ELFW(R_TYPE) (rel->r_info),
 							strtab + extsym->st_name);
 				} else {
-					fprintf(stderr, "%s of type %ld\n", errmsg,
+					errorMsg("%s of type %ld\n", errmsg,
 							(long) ELFW(R_TYPE) (rel->r_info));
 				}
 				ret = 0;
@@ -2469,25 +2464,25 @@
 		|| f->header.e_ident[EI_MAG1] != ELFMAG1
 		|| f->header.e_ident[EI_MAG2] != ELFMAG2
 		|| f->header.e_ident[EI_MAG3] != ELFMAG3) {
-		fprintf(stderr, "not an ELF file\n");
+		errorMsg("not an ELF file\n");
 		return NULL;
 	}
 	if (f->header.e_ident[EI_CLASS] != ELFCLASSM
 		|| f->header.e_ident[EI_DATA] != ELFDATAM
 		|| f->header.e_ident[EI_VERSION] != EV_CURRENT
 		|| !MATCH_MACHINE(f->header.e_machine)) {
-		fprintf(stderr, "ELF file not for this architecture\n");
+		errorMsg("ELF file not for this architecture\n");
 		return NULL;
 	}
 	if (f->header.e_type != ET_REL) {
-		fprintf(stderr, "ELF file not a relocatable object\n");
+		errorMsg("ELF file not a relocatable object\n");
 		return NULL;
 	}
 
 	/* Read the section headers.  */
 
 	if (f->header.e_shentsize != sizeof(ElfW(Shdr))) {
-		fprintf(stderr, "section header size mismatch: %lu != %lu\n",
+		errorMsg("section header size mismatch: %lu != %lu\n",
 				(unsigned long) f->header.e_shentsize,
 				(unsigned long) sizeof(ElfW(Shdr)));
 		return NULL;
@@ -2540,13 +2535,11 @@
 
 #if SHT_RELM == SHT_REL
 		case SHT_RELA:
-			fprintf(stderr,
-					"RELA relocations not supported on this architecture\n");
+			errorMsg("RELA relocations not supported on this architecture\n");
 			return NULL;
 #else
 		case SHT_REL:
-			fprintf(stderr,
-					"REL relocations not supported on this architecture\n");
+			errorMsg("REL relocations not supported on this architecture\n");
 			return NULL;
 #endif
 
@@ -2559,7 +2552,7 @@
 				break;
 			}
 
-			fprintf(stderr, "can't handle sections of type %ld\n",
+			errorMsg("can't handle sections of type %ld\n",
 					(long) sec->header.sh_type);
 			return NULL;
 		}
@@ -2588,7 +2581,7 @@
 				ElfW(Sym) * sym;
 
 				if (sec->header.sh_entsize != sizeof(ElfW(Sym))) {
-					fprintf(stderr, "symbol size mismatch: %lu != %lu\n",
+					errorMsg("symbol size mismatch: %lu != %lu\n",
 							(unsigned long) sec->header.sh_entsize,
 							(unsigned long) sizeof(ElfW(Sym)));
 					return NULL;
@@ -2620,8 +2613,7 @@
 
 		case SHT_RELM:
 			if (sec->header.sh_entsize != sizeof(ElfW(RelM))) {
-				fprintf(stderr,
-						"relocation entry size mismatch: %lu != %lu\n",
+				errorMsg("relocation entry size mismatch: %lu != %lu\n",
 						(unsigned long) sec->header.sh_entsize,
 						(unsigned long) sizeof(ElfW(RelM)));
 				return NULL;
@@ -2754,20 +2746,20 @@
 	} else {
 		m_version = old_get_module_version(f, m_strversion);
 		if (m_version == -1) {
-			fprintf(stderr,
-					"couldn't find the kernel version the module was compiled for\n");
+			errorMsg("couldn't find the kernel version the module was "
+					"compiled for\n");
 			goto out;
 		}
 	}
 
 	if (strncmp(k_strversion, m_strversion, STRVERSIONLEN) != 0) {
 		if (flag_force_load) {
-			fprintf(stderr, "Warning: kernel-module version mismatch\n"
+			errorMsg("Warning: kernel-module version mismatch\n"
 					"\t%s was compiled for kernel version %s\n"
 					"\twhile this kernel is version %s\n",
 					m_filename, m_strversion, k_strversion);
 		} else {
-			fprintf(stderr, "kernel-module version mismatch\n"
+			errorMsg("kernel-module version mismatch\n"
 					"\t%s was compiled for kernel version %s\n"
 					"\twhile this kernel is version %s.\n",
 					m_filename, m_strversion, k_strversion);
@@ -2785,7 +2777,7 @@
 			goto out;
 		k_crcs = new_is_kernel_checksummed();
 #else
-		fprintf(stderr, "Not configured to support new kernels\n");
+		errorMsg("Not configured to support new kernels\n");
 		goto out;
 #endif
 	} else {
@@ -2794,7 +2786,7 @@
 			goto out;
 		k_crcs = old_is_kernel_checksummed();
 #else
-		fprintf(stderr, "Not configured to support old kernels\n");
+		errorMsg("Not configured to support old kernels\n");
 		goto out;
 #endif
 	}
@@ -2851,11 +2843,10 @@
 	case 0:
 		break;
 	case EEXIST:
-		fprintf(stderr, "A module named %s already exists\n", m_name);
+		errorMsg("A module named %s already exists\n", m_name);
 		goto out;
 	case ENOMEM:
-		fprintf(stderr,
-				"Can't allocate kernel memory for module; needed %lu bytes\n",
+		errorMsg("Can't allocate kernel memory for module; needed %lu bytes\n",
 				m_size);
 		goto out;
 	default:
diff --git a/mount.c b/mount.c
index 900ab30..455e4a1 100644
--- a/mount.c
+++ b/mount.c
@@ -157,15 +157,15 @@
 
 			specialfile = find_unused_loop_device();
 			if (specialfile == NULL) {
-				fprintf(stderr, "Could not find a spare loop device\n");
+				errorMsg("Could not find a spare loop device\n");
 				return (FALSE);
 			}
 			if (set_loop(specialfile, lofile, 0, &loro)) {
-				fprintf(stderr, "Could not setup loop device\n");
+				errorMsg("Could not setup loop device\n");
 				return (FALSE);
 			}
 			if (!(flags & MS_RDONLY) && loro) {	/* loop is ro, but wanted rw */
-				fprintf(stderr, "WARNING: loop device is read-only\n");
+				errorMsg("WARNING: loop device is read-only\n");
 				flags &= ~MS_RDONLY;
 			}
 		}
@@ -329,7 +329,7 @@
 
 	if (status == FALSE) {
 		if (whineOnErrors == TRUE) {
-			fprintf(stderr, "Mounting %s on %s failed: %s\n",
+			errorMsg("Mounting %s on %s failed: %s\n",
 					blockDevice, directory, strerror(errno));
 		}
 		return (FALSE);
diff --git a/mt.c b/mt.c
index 304d664..4ab4782 100644
--- a/mt.c
+++ b/mt.c
@@ -81,7 +81,7 @@
 	}
 
 	if (code->name == 0) {
-		fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]);
+		errorMsg("unrecognized opcode %s.\n", argv[1]);
 		exit (FALSE);
 	}
 
diff --git a/networking/hostname.c b/networking/hostname.c
index e909138..60f66c0 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: hostname.c,v 1.10 2000/06/19 17:25:39 andersen Exp $
+ * $Id: hostname.c,v 1.11 2000/07/14 01:51:25 kraai Exp $
  * Mini hostname implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -55,8 +55,7 @@
 	if (!isfile) {
 		if (sethostname(s, strlen(s)) < 0) {
 			if (errno == EPERM)
-				fprintf(stderr,
-						"hostname: you must be root to change the hostname\n");
+				errorMsg("you must be root to change the hostname\n");
 			else
 				perror("sethostname");
 			exit(1);
diff --git a/networking/ping.c b/networking/ping.c
index 0359abb..52cb07b 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.20 2000/07/12 17:02:35 kraai Exp $
+ * $Id: ping.c,v 1.21 2000/07/14 01:51:25 kraai Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -208,7 +208,7 @@
 
 	pingaddr.sin_family = AF_INET;
 	if (!(h = gethostbyname(host))) {
-		fprintf(stderr, "ping: unknown host %s\n", host);
+		errorMsg("unknown host %s\n", host);
 		exit(1);
 	}
 	memcpy(&pingaddr.sin_addr, h->h_addr, sizeof(pingaddr.sin_addr));
@@ -225,7 +225,7 @@
 	if (c < 0 || c != sizeof(packet)) {
 		if (c < 0)
 			perror("ping: sendto");
-		fprintf(stderr, "ping: write incomplete\n");
+		errorMsg("write incomplete\n");
 		exit(1);
 	}
 
@@ -433,8 +433,7 @@
 		printf("\n");
 	} else 
 		if (icmppkt->icmp_type != ICMP_ECHO)
-			fprintf(stderr,
-					"Warning: Got ICMP %d (%s)\n",
+			errorMsg("Warning: Got ICMP %d (%s)\n",
 					icmppkt->icmp_type, icmp_type_name (icmppkt->icmp_type));
 }
 
@@ -452,7 +451,7 @@
 	if ((pingsock = socket(AF_INET, SOCK_RAW,
 						   (proto ? proto->p_proto : 1))) < 0) {	/* 1 == ICMP */
 		if (errno == EPERM) {
-			fprintf(stderr, "ping: permission denied. (are you root?)\n");
+			errorMsg("permission denied. (are you root?)\n");
 		} else {
 			perror("ping: creating a raw socket");
 		}
@@ -466,13 +465,12 @@
 
 	pingaddr.sin_family = AF_INET;
 	if (!(h = gethostbyname(host))) {
-		fprintf(stderr, "ping: unknown host %s\n", host);
+		errorMsg("unknown host %s\n", host);
 		exit(1);
 	}
 
 	if (h->h_addrtype != AF_INET) {
-		fprintf(stderr,
-				"ping: unknown address type; only AF_INET is currently supported.\n");
+		errorMsg("unknown address type; only AF_INET is currently supported.\n");
 		exit(1);
 	}
 
diff --git a/nfsmount.c b/nfsmount.c
index 8cdfebf..ad0b584 100644
--- a/nfsmount.c
+++ b/nfsmount.c
@@ -312,8 +312,7 @@
 	msock = fsock = -1;
 	mclient = NULL;
 	if (strlen(spec) >= sizeof(hostdir)) {
-		fprintf(stderr, _("mount: "
-			"excessively long host:dir argument\n"));
+		errorMsg("excessively long host:dir argument\n");
 		goto fail;
 	}
 	strcpy(hostdir, spec);
@@ -325,12 +324,10 @@
 		   until they can be fully supported. (mack@sgi.com) */
 		if ((s = strchr(hostdir, ','))) {
 			*s = '\0';
-			fprintf(stderr, _("mount: warning: "
-				"multiple hostnames not supported\n"));
+			errorMsg("warning: multiple hostnames not supported\n");
 		}
 	} else {
-		fprintf(stderr, _("mount: "
-			"directory to mount not in host:dir format\n"));
+		errorMsg("directory to mount not in host:dir format\n");
 		goto fail;
 	}
 
@@ -340,13 +337,11 @@
 #endif
 	{
 		if ((hp = gethostbyname(hostname)) == NULL) {
-			fprintf(stderr, _("mount: can't get address for %s\n"),
-				hostname);
+			errorMsg("can't get address for %s\n", hostname);
 			goto fail;
 		} else {
 			if (hp->h_length > sizeof(struct in_addr)) {
-				fprintf(stderr,
-					_("mount: got bad hp->h_length\n"));
+				errorMsg("got bad hp->h_length\n");
 				hp->h_length = sizeof(struct in_addr);
 			}
 			memcpy(&server_addr.sin_addr,
@@ -363,8 +358,7 @@
 	if (!old_opts)
 		old_opts = "";
 	if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) {
-		fprintf(stderr, _("mount: "
-			"excessively long option argument\n"));
+		errorMsg("excessively long option argument\n");
 		goto fail;
 	}
 	sprintf(new_opts, "%s%saddr=%s",
@@ -524,11 +518,11 @@
 		data.flags |= (nolock ? NFS_MOUNT_NONLM : 0);
 #endif
 	if (nfsvers > MAX_NFSPROT) {
-		fprintf(stderr, "NFSv%d not supported!\n", nfsvers);
+		errorMsg("NFSv%d not supported!\n", nfsvers);
 		return 0;
 	}
 	if (mountvers > MAX_NFSPROT) {
-		fprintf(stderr, "NFSv%d not supported!\n", nfsvers);
+		errorMsg("NFSv%d not supported!\n", nfsvers);
 		return 0;
 	}
 	if (nfsvers && !mountvers)
@@ -588,13 +582,11 @@
 	    mount_server_addr.sin_addr.s_addr = inet_addr(hostname);
 	  } else {
 		  if ((hp = gethostbyname(mounthost)) == NULL) {
-			  fprintf(stderr, _("mount: can't get address for %s\n"),
-				  hostname);
+			  errorMsg("can't get address for %s\n", hostname);
 			  goto fail;
 		  } else {
 			  if (hp->h_length > sizeof(struct in_addr)) {
-				  fprintf(stderr,
-					  _("mount: got bad hp->h_length?\n"));
+				  errorMsg("got bad hp->h_length?\n");
 				  hp->h_length = sizeof(struct in_addr);
 			  }
 			  mount_server_addr.sin_family = AF_INET;
@@ -729,8 +721,7 @@
 
 	if (nfsvers == 2) {
 		if (status.nfsv2.fhs_status != 0) {
-			fprintf(stderr,
-				"mount: %s:%s failed, reason given by server: %s\n",
+			errorMsg("%s:%s failed, reason given by server: %s\n",
 				hostname, dirname,
 				nfs_strerror(status.nfsv2.fhs_status));
 			goto fail;
@@ -748,8 +739,7 @@
 #if NFS_MOUNT_VERSION >= 4
 		fhandle3 *fhandle;
 		if (status.nfsv3.fhs_status != 0) {
-			fprintf(stderr,
-				"mount: %s:%s failed, reason given by server: %s\n",
+			errorMsg("%s:%s failed, reason given by server: %s\n",
 				hostname, dirname,
 				nfs_strerror(status.nfsv3.fhs_status));
 			goto fail;
diff --git a/ping.c b/ping.c
index 0359abb..52cb07b 100644
--- a/ping.c
+++ b/ping.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.20 2000/07/12 17:02:35 kraai Exp $
+ * $Id: ping.c,v 1.21 2000/07/14 01:51:25 kraai Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -208,7 +208,7 @@
 
 	pingaddr.sin_family = AF_INET;
 	if (!(h = gethostbyname(host))) {
-		fprintf(stderr, "ping: unknown host %s\n", host);
+		errorMsg("unknown host %s\n", host);
 		exit(1);
 	}
 	memcpy(&pingaddr.sin_addr, h->h_addr, sizeof(pingaddr.sin_addr));
@@ -225,7 +225,7 @@
 	if (c < 0 || c != sizeof(packet)) {
 		if (c < 0)
 			perror("ping: sendto");
-		fprintf(stderr, "ping: write incomplete\n");
+		errorMsg("write incomplete\n");
 		exit(1);
 	}
 
@@ -433,8 +433,7 @@
 		printf("\n");
 	} else 
 		if (icmppkt->icmp_type != ICMP_ECHO)
-			fprintf(stderr,
-					"Warning: Got ICMP %d (%s)\n",
+			errorMsg("Warning: Got ICMP %d (%s)\n",
 					icmppkt->icmp_type, icmp_type_name (icmppkt->icmp_type));
 }
 
@@ -452,7 +451,7 @@
 	if ((pingsock = socket(AF_INET, SOCK_RAW,
 						   (proto ? proto->p_proto : 1))) < 0) {	/* 1 == ICMP */
 		if (errno == EPERM) {
-			fprintf(stderr, "ping: permission denied. (are you root?)\n");
+			errorMsg("permission denied. (are you root?)\n");
 		} else {
 			perror("ping: creating a raw socket");
 		}
@@ -466,13 +465,12 @@
 
 	pingaddr.sin_family = AF_INET;
 	if (!(h = gethostbyname(host))) {
-		fprintf(stderr, "ping: unknown host %s\n", host);
+		errorMsg("unknown host %s\n", host);
 		exit(1);
 	}
 
 	if (h->h_addrtype != AF_INET) {
-		fprintf(stderr,
-				"ping: unknown address type; only AF_INET is currently supported.\n");
+		errorMsg("unknown address type; only AF_INET is currently supported.\n");
 		exit(1);
 	}
 
diff --git a/procps/ps.c b/procps/ps.c
index a8d0005..6821359 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -97,20 +97,20 @@
 	if (tmp)
 		sscanf(tmp, "Pid:\t%d\n" "PPid:\t%d\n", &P->pid, &P->ppid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 	/* For busybox, ignoring effective, saved, etc */
 	tmp = strstr(S, "Uid:");
 	if (tmp)
 		sscanf(tmp, "Uid:\t%d", &P->ruid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 	tmp = strstr(S, "Gid:");
 	if (tmp)
 		sscanf(tmp, "Gid:\t%d", &P->rgid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 }
 
diff --git a/ps.c b/ps.c
index a8d0005..6821359 100644
--- a/ps.c
+++ b/ps.c
@@ -97,20 +97,20 @@
 	if (tmp)
 		sscanf(tmp, "Pid:\t%d\n" "PPid:\t%d\n", &P->pid, &P->ppid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 	/* For busybox, ignoring effective, saved, etc */
 	tmp = strstr(S, "Uid:");
 	if (tmp)
 		sscanf(tmp, "Uid:\t%d", &P->ruid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 	tmp = strstr(S, "Gid:");
 	if (tmp)
 		sscanf(tmp, "Gid:\t%d", &P->rgid);
 	else
-		fprintf(stderr, "Internal error!\n");
+		errorMsg("Internal error!\n");
 
 }
 
diff --git a/rmdir.c b/rmdir.c
index c88f42c..4edb9b6 100644
--- a/rmdir.c
+++ b/rmdir.c
@@ -40,7 +40,7 @@
 
 	while (--argc > 0) {
 		if (rmdir(*(++argv)) == -1) {
-			fprintf(stderr, "%s: %s\n", applet_name, strerror(errno));
+			errorMsg("%s\n", strerror(errno));
 			exit(FALSE);
 		}
 	}
diff --git a/sed.c b/sed.c
index 770a56e..3a7360f 100644
--- a/sed.c
+++ b/sed.c
@@ -207,8 +207,8 @@
 		idx++; /* so it points to the next character after the last '/' */
 	}
 	else {
-		fprintf(stderr, "sed.c:get_address: no address found in string\n");
-		fprintf(stderr, "\t(you probably didn't check the string you passed me)\n");
+		errorMsg("get_address: no address found in string\n"
+				"\t(you probably didn't check the string you passed me)\n");
 		idx = -1;
 	}
 
@@ -612,7 +612,7 @@
 		for (i = optind; i < argc; i++) {
 			file = fopen(argv[i], "r");
 			if (file == NULL) {
-				fprintf(stderr, "sed: %s: %s\n", argv[i], strerror(errno));
+				errorMsg("%s: %s\n", argv[i], strerror(errno));
 			} else {
 				process_file(file);
 				fclose(file);
diff --git a/sh.c b/sh.c
index f4564f7..048394a 100644
--- a/sh.c
+++ b/sh.c
@@ -207,12 +207,12 @@
 
 	if (!jobList->head) {
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
-			fprintf(stderr, "%s: exactly one argument is expected\n",
+			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
 			return FALSE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
-			fprintf(stderr, "%s: bad argument '%s'\n",
+			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
 			return FALSE;
 			for (job = jobList->head; job; job = job->next) {
@@ -226,7 +226,7 @@
 	}
 
 	if (!job) {
-		fprintf(stderr, "%s: unknown job %d\n",
+		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
 		return FALSE;
 	}
@@ -519,7 +519,7 @@
 
 	rc = glob(prog->argv[argc - 1], flags, NULL, &prog->globResult);
 	if (rc == GLOB_NOSPACE) {
-		fprintf(stderr, "out of space during glob operation\n");
+		errorMsg("out of space during glob operation\n");
 		return;
 	} else if (rc == GLOB_NOMATCH ||
 			   (!rc && (prog->globResult.gl_pathc - i) == 1 &&
@@ -607,7 +607,7 @@
 			if (*src == '\\') {
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -686,7 +686,7 @@
 					chptr++;
 
 				if (!*chptr) {
-					fprintf(stderr, "file name expected after %c\n", *src);
+					errorMsg("file name expected after %c\n", *src);
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -705,7 +705,7 @@
 				if (*prog->argv[argc])
 					argc++;
 				if (!argc) {
-					fprintf(stderr, "empty command in pipe1.\n");
+					errorMsg("empty command in pipe1\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -731,7 +731,7 @@
 					src++;
 
 				if (!*src) {
-					fprintf(stderr, "empty command in pipe2\n");
+					errorMsg("empty command in pipe2\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -750,7 +750,7 @@
 			case '\\':
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -965,7 +965,7 @@
 		if (openfd < 0) {
 			/* this could get lost if stderr has been redirected, but
 			   bash and ash both lose it as well (though zsh doesn't!) */
-			fprintf(stderr, "error opening %s: %s\n", redir->filename,
+			errorMsg("error opening %s: %s\n", redir->filename,
 					strerror(errno));
 			return 1;
 		}
diff --git a/shell/lash.c b/shell/lash.c
index f4564f7..048394a 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -207,12 +207,12 @@
 
 	if (!jobList->head) {
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
-			fprintf(stderr, "%s: exactly one argument is expected\n",
+			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
 			return FALSE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
-			fprintf(stderr, "%s: bad argument '%s'\n",
+			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
 			return FALSE;
 			for (job = jobList->head; job; job = job->next) {
@@ -226,7 +226,7 @@
 	}
 
 	if (!job) {
-		fprintf(stderr, "%s: unknown job %d\n",
+		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
 		return FALSE;
 	}
@@ -519,7 +519,7 @@
 
 	rc = glob(prog->argv[argc - 1], flags, NULL, &prog->globResult);
 	if (rc == GLOB_NOSPACE) {
-		fprintf(stderr, "out of space during glob operation\n");
+		errorMsg("out of space during glob operation\n");
 		return;
 	} else if (rc == GLOB_NOMATCH ||
 			   (!rc && (prog->globResult.gl_pathc - i) == 1 &&
@@ -607,7 +607,7 @@
 			if (*src == '\\') {
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -686,7 +686,7 @@
 					chptr++;
 
 				if (!*chptr) {
-					fprintf(stderr, "file name expected after %c\n", *src);
+					errorMsg("file name expected after %c\n", *src);
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -705,7 +705,7 @@
 				if (*prog->argv[argc])
 					argc++;
 				if (!argc) {
-					fprintf(stderr, "empty command in pipe1.\n");
+					errorMsg("empty command in pipe1\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -731,7 +731,7 @@
 					src++;
 
 				if (!*src) {
-					fprintf(stderr, "empty command in pipe2\n");
+					errorMsg("empty command in pipe2\n");
 					freeJob(job);
 					job->numProgs=0;
 					return 1;
@@ -750,7 +750,7 @@
 			case '\\':
 				src++;
 				if (!*src) {
-					fprintf(stderr, "character expected after \\\n");
+					errorMsg("character expected after \\\n");
 					freeJob(job);
 					return 1;
 				}
@@ -965,7 +965,7 @@
 		if (openfd < 0) {
 			/* this could get lost if stderr has been redirected, but
 			   bash and ash both lose it as well (though zsh doesn't!) */
-			fprintf(stderr, "error opening %s: %s\n", redir->filename,
+			errorMsg("error opening %s: %s\n", redir->filename,
 					strerror(errno));
 			return 1;
 		}
diff --git a/sort.c b/sort.c
index a28122d..c754989 100644
--- a/sort.c
+++ b/sort.c
@@ -263,7 +263,7 @@
 				break;
 #endif
 			default:
-				fprintf(stderr, "sort: invalid option -- %c\n", opt);
+				errorMsg("invalid option -- %c\n", opt);
 				usage(sort_usage);
 			}
 		} else {
@@ -304,4 +304,4 @@
 	return(0);
 }
 
-/* $Id: sort.c,v 1.18 2000/06/28 22:15:26 markw Exp $ */
+/* $Id: sort.c,v 1.19 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/sysklogd/logger.c b/sysklogd/logger.c
index d32ccaa..71d7030 100644
--- a/sysklogd/logger.c
+++ b/sysklogd/logger.c
@@ -96,7 +96,7 @@
 		*s = '\0';
 		fac = decode(save, facilitynames);
 		if (fac < 0) {
-			fprintf(stderr, "unknown facility name: %s\n", save);
+			errorMsg("unknown facility name: %s\n", save);
 			exit(FALSE);
 		}
 		*s++ = '.';
@@ -105,7 +105,7 @@
 	}
 	lev = decode(s, prioritynames);
 	if (lev < 0) {
-		fprintf(stderr, "unknown priority name: %s\n", save);
+		errorMsg("unknown priority name: %s\n", save);
 		exit(FALSE);
 	}
 	return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
@@ -166,7 +166,7 @@
 		if (argc >= 1) {
 			message = *argv;
 		} else {
-			fprintf(stderr, "No message\n");
+			errorMsg("No message\n");
 			exit(FALSE);
 		}
 	}
diff --git a/tail.c b/tail.c
index 3189d20..601f087 100644
--- a/tail.c
+++ b/tail.c
@@ -375,7 +375,7 @@
 				usage(tail_usage);
 			default:
 				if ((n_units = atoi(&argv[i][1])) < 1) {
-					fprintf(stderr, "tail: invalid option -- %c\n", opt);
+					errorMsg("invalid option -- %c\n", opt);
 					usage(tail_usage);
 				}
 			}
@@ -386,8 +386,7 @@
 
 	if (i + 1 < argc) {
 		if (forever) {
-			fprintf(stderr,
-					"tail: option -f is invalid with multiple files\n");
+			errorMsg("option -f is invalid with multiple files\n");
 			usage(tail_usage);
 		}
 		print_headers = 1;
diff --git a/tee.c b/tee.c
index c9b5410..67b42a2 100644
--- a/tee.c
+++ b/tee.c
@@ -104,7 +104,7 @@
 	/* init FILE pointers */
 	FileList = calloc(FL_MAX, sizeof(FILE*));
 	if (!FileList) {
-		fprintf(stderr, "tee: %s\n", strerror(errno));
+		errorMsg("%s\n", strerror(errno));
 		exit(1);
 	}
 	FL_end = 0;
@@ -133,4 +133,4 @@
 	return(0);
 }
 
-/* $Id: tee.c,v 1.11 2000/06/19 17:25:40 andersen Exp $ */
+/* $Id: tee.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/umount.c b/umount.c
index 59dcb66..1b250fd 100644
--- a/umount.c
+++ b/umount.c
@@ -101,7 +101,7 @@
 		return;
 
 	if ((fp = setmntent(mtab_file, "r")) == NULL) {
-		fprintf(stderr, "Cannot open %s\n", mtab_file);
+		errorMsg("Cannot open %s\n", mtab_file);
 		return;
 	}
 	while ((e = getmntent(fp))) {
@@ -209,11 +209,9 @@
 		status = mount(blockDevice, name, NULL,
 					   MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL);
 		if (status == 0) {
-			fprintf(stderr, "umount: %s busy - remounted read-only\n",
-					blockDevice);
+			errorMsg("%s busy - remounted read-only\n", blockDevice);
 		} else {
-			fprintf(stderr, "umount: Cannot remount %s read-only\n",
-					blockDevice);
+			errorMsg("Cannot remount %s read-only\n", blockDevice);
 		}
 	}
 	if (status == 0) {
diff --git a/uniq.c b/uniq.c
index 64acf04..16b2576 100644
--- a/uniq.c
+++ b/uniq.c
@@ -127,11 +127,11 @@
 		break;
 	}
 	if (*in == NULL) {
-		fprintf(stderr, "uniq: %s: %s\n", argv[0], strerror(errno));
+		errorMsg("%s: %s\n", argv[0], strerror(errno));
 		return errno;
 	}
 	if (*out == NULL) {
-		fprintf(stderr, "uniq: %s: %s\n", argv[1], strerror(errno));
+		errorMsg("%s: %s\n", argv[1], strerror(errno));
 		return errno;
 	}
 	return 0;
@@ -187,4 +187,4 @@
 	return(0);
 }
 
-/* $Id: uniq.c,v 1.11 2000/06/19 17:25:40 andersen Exp $ */
+/* $Id: uniq.c,v 1.12 2000/07/14 01:51:25 kraai Exp $ */
diff --git a/util-linux/fbset.c b/util-linux/fbset.c
index 9fde6a1..2fcc7c2 100644
--- a/util-linux/fbset.c
+++ b/util-linux/fbset.c
@@ -387,7 +387,7 @@
 		PERROR("fbset(ioctl)");
 	if (g_options & OPT_READMODE) {
 		if (!readmode(&var, modefile, mode)) {
-			fprintf(stderr, "Unknown video mode `%s'\n", mode);
+			errorMsg("Unknown video mode `%s'\n", mode);
 			exit(1);
 		}
 	}
diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c
index 685e0ee..74281a7 100644
--- a/util-linux/fsck_minix.c
+++ b/util-linux/fsck_minix.c
@@ -311,7 +311,7 @@
 
 static void die(const char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	leave(8);
 }
 
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c
index b6f958f..e4dedaf 100644
--- a/util-linux/mkfs_minix.c
+++ b/util-linux/mkfs_minix.c
@@ -263,7 +263,7 @@
  */
 static volatile void die(char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	exit(8);
 }
 
@@ -814,8 +814,8 @@
 #ifdef HAVE_MINIX2
 						version2 = 1;
 #else
-						fprintf(stderr, "%s: not compiled with minix v2 support\n",
-								applet_name, device_name);
+						errorMsg("%s: not compiled with minix v2 support\n",
+								device_name);
 						exit(-1);
 #endif
 						break;
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c
index 2009636..5a33945 100644
--- a/util-linux/mkswap.c
+++ b/util-linux/mkswap.c
@@ -116,7 +116,7 @@
 
 #ifdef PAGE_SIZE
 	if (pagesize != PAGE_SIZE)
-		fprintf(stderr, "Assuming pages of size %d\n", pagesize);
+		errorMsg("Assuming pages of size %d\n", pagesize);
 #endif
 	signature_page = (int *) xmalloc(pagesize);
 	memset(signature_page, 0, pagesize);
@@ -204,7 +204,7 @@
 
 void die(const char *str)
 {
-	fprintf(stderr, "%s: %s\n", applet_name, str);
+	errorMsg("%s\n", str);
 	exit(FALSE);
 }
 
@@ -345,18 +345,14 @@
 		}
 	}
 	if (!device_name) {
-		fprintf(stderr,
-				"%s: error: Nowhere to set up swap on?\n", applet_name);
+		errorMsg("error: Nowhere to set up swap on?\n");
 		usage(mkswap_usage);
 	}
 	sz = get_size(device_name);
 	if (!PAGES) {
 		PAGES = sz;
 	} else if (PAGES > sz && !force) {
-		fprintf(stderr,
-				"%s: error: "
-				"size %ld is larger than device size %d\n",
-				applet_name,
+		errorMsg("error: size %ld is larger than device size %d\n",
 				PAGES * (pagesize / 1024), sz * (pagesize / 1024));
 		exit(FALSE);
 	}
@@ -372,14 +368,12 @@
 			version = 1;
 	}
 	if (version != 0 && version != 1) {
-		fprintf(stderr, "%s: error: unknown version %d\n",
-				applet_name, version);
+		errorMsg("error: unknown version %d\n", version);
 		usage(mkswap_usage);
 	}
 	if (PAGES < 10) {
-		fprintf(stderr,
-				"%s: error: swap area needs to be at least %ldkB\n",
-				applet_name, (long) (10 * pagesize / 1024));
+		errorMsg("error: swap area needs to be at least %ldkB\n",
+				(long) (10 * pagesize / 1024));
 		usage(mkswap_usage);
 	}
 #if 0
@@ -397,8 +391,8 @@
 #endif
 	if (PAGES > maxpages) {
 		PAGES = maxpages;
-		fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
-				applet_name, PAGES * pagesize / 1024);
+		errorMsg("warning: truncating swap area to %ldkB\n",
+				PAGES * pagesize / 1024);
 	}
 
 	DEV = open(device_name, O_RDWR);
@@ -424,11 +418,10 @@
 			for (sum = 0; q >= (unsigned short *) buffer;)
 				sum ^= *q--;
 			if (!sum) {
-				fprintf(stderr, "\
-%s: Device '%s' contains a valid Sun disklabel.\n\
-This probably means creating v0 swap would destroy your partition table\n\
-No swap created. If you really want to create swap v0 on that device, use\n\
-the -f option to force it.\n", applet_name, device_name);
+				errorMsg("Device '%s' contains a valid Sun disklabel.\n"
+"This probably means creating v0 swap would destroy your partition table\n"
+"No swap created. If you really want to create swap v0 on that device, use\n"
+"the -f option to force it.\n", device_name);
 				exit(FALSE);
 			}
 		}
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 900ab30..455e4a1 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -157,15 +157,15 @@
 
 			specialfile = find_unused_loop_device();
 			if (specialfile == NULL) {
-				fprintf(stderr, "Could not find a spare loop device\n");
+				errorMsg("Could not find a spare loop device\n");
 				return (FALSE);
 			}
 			if (set_loop(specialfile, lofile, 0, &loro)) {
-				fprintf(stderr, "Could not setup loop device\n");
+				errorMsg("Could not setup loop device\n");
 				return (FALSE);
 			}
 			if (!(flags & MS_RDONLY) && loro) {	/* loop is ro, but wanted rw */
-				fprintf(stderr, "WARNING: loop device is read-only\n");
+				errorMsg("WARNING: loop device is read-only\n");
 				flags &= ~MS_RDONLY;
 			}
 		}
@@ -329,7 +329,7 @@
 
 	if (status == FALSE) {
 		if (whineOnErrors == TRUE) {
-			fprintf(stderr, "Mounting %s on %s failed: %s\n",
+			errorMsg("Mounting %s on %s failed: %s\n",
 					blockDevice, directory, strerror(errno));
 		}
 		return (FALSE);
diff --git a/util-linux/nfsmount.c b/util-linux/nfsmount.c
index 8cdfebf..ad0b584 100644
--- a/util-linux/nfsmount.c
+++ b/util-linux/nfsmount.c
@@ -312,8 +312,7 @@
 	msock = fsock = -1;
 	mclient = NULL;
 	if (strlen(spec) >= sizeof(hostdir)) {
-		fprintf(stderr, _("mount: "
-			"excessively long host:dir argument\n"));
+		errorMsg("excessively long host:dir argument\n");
 		goto fail;
 	}
 	strcpy(hostdir, spec);
@@ -325,12 +324,10 @@
 		   until they can be fully supported. (mack@sgi.com) */
 		if ((s = strchr(hostdir, ','))) {
 			*s = '\0';
-			fprintf(stderr, _("mount: warning: "
-				"multiple hostnames not supported\n"));
+			errorMsg("warning: multiple hostnames not supported\n");
 		}
 	} else {
-		fprintf(stderr, _("mount: "
-			"directory to mount not in host:dir format\n"));
+		errorMsg("directory to mount not in host:dir format\n");
 		goto fail;
 	}
 
@@ -340,13 +337,11 @@
 #endif
 	{
 		if ((hp = gethostbyname(hostname)) == NULL) {
-			fprintf(stderr, _("mount: can't get address for %s\n"),
-				hostname);
+			errorMsg("can't get address for %s\n", hostname);
 			goto fail;
 		} else {
 			if (hp->h_length > sizeof(struct in_addr)) {
-				fprintf(stderr,
-					_("mount: got bad hp->h_length\n"));
+				errorMsg("got bad hp->h_length\n");
 				hp->h_length = sizeof(struct in_addr);
 			}
 			memcpy(&server_addr.sin_addr,
@@ -363,8 +358,7 @@
 	if (!old_opts)
 		old_opts = "";
 	if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) {
-		fprintf(stderr, _("mount: "
-			"excessively long option argument\n"));
+		errorMsg("excessively long option argument\n");
 		goto fail;
 	}
 	sprintf(new_opts, "%s%saddr=%s",
@@ -524,11 +518,11 @@
 		data.flags |= (nolock ? NFS_MOUNT_NONLM : 0);
 #endif
 	if (nfsvers > MAX_NFSPROT) {
-		fprintf(stderr, "NFSv%d not supported!\n", nfsvers);
+		errorMsg("NFSv%d not supported!\n", nfsvers);
 		return 0;
 	}
 	if (mountvers > MAX_NFSPROT) {
-		fprintf(stderr, "NFSv%d not supported!\n", nfsvers);
+		errorMsg("NFSv%d not supported!\n", nfsvers);
 		return 0;
 	}
 	if (nfsvers && !mountvers)
@@ -588,13 +582,11 @@
 	    mount_server_addr.sin_addr.s_addr = inet_addr(hostname);
 	  } else {
 		  if ((hp = gethostbyname(mounthost)) == NULL) {
-			  fprintf(stderr, _("mount: can't get address for %s\n"),
-				  hostname);
+			  errorMsg("can't get address for %s\n", hostname);
 			  goto fail;
 		  } else {
 			  if (hp->h_length > sizeof(struct in_addr)) {
-				  fprintf(stderr,
-					  _("mount: got bad hp->h_length?\n"));
+				  errorMsg("got bad hp->h_length?\n");
 				  hp->h_length = sizeof(struct in_addr);
 			  }
 			  mount_server_addr.sin_family = AF_INET;
@@ -729,8 +721,7 @@
 
 	if (nfsvers == 2) {
 		if (status.nfsv2.fhs_status != 0) {
-			fprintf(stderr,
-				"mount: %s:%s failed, reason given by server: %s\n",
+			errorMsg("%s:%s failed, reason given by server: %s\n",
 				hostname, dirname,
 				nfs_strerror(status.nfsv2.fhs_status));
 			goto fail;
@@ -748,8 +739,7 @@
 #if NFS_MOUNT_VERSION >= 4
 		fhandle3 *fhandle;
 		if (status.nfsv3.fhs_status != 0) {
-			fprintf(stderr,
-				"mount: %s:%s failed, reason given by server: %s\n",
+			errorMsg("%s:%s failed, reason given by server: %s\n",
 				hostname, dirname,
 				nfs_strerror(status.nfsv3.fhs_status));
 			goto fail;
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 59dcb66..1b250fd 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -101,7 +101,7 @@
 		return;
 
 	if ((fp = setmntent(mtab_file, "r")) == NULL) {
-		fprintf(stderr, "Cannot open %s\n", mtab_file);
+		errorMsg("Cannot open %s\n", mtab_file);
 		return;
 	}
 	while ((e = getmntent(fp))) {
@@ -209,11 +209,9 @@
 		status = mount(blockDevice, name, NULL,
 					   MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL);
 		if (status == 0) {
-			fprintf(stderr, "umount: %s busy - remounted read-only\n",
-					blockDevice);
+			errorMsg("%s busy - remounted read-only\n", blockDevice);
 		} else {
-			fprintf(stderr, "umount: Cannot remount %s read-only\n",
-					blockDevice);
+			errorMsg("Cannot remount %s read-only\n", blockDevice);
 		}
 	}
 	if (status == 0) {
diff --git a/utility.c b/utility.c
index 61f6761..2b21566 100644
--- a/utility.c
+++ b/utility.c
@@ -299,7 +299,7 @@
 
 	if ((srcStatBuf.st_dev == dstStatBuf.st_dev) &&
 		(srcStatBuf.st_ino == dstStatBuf.st_ino)) {
-		fprintf(stderr, "Copying file \"%s\" to itself\n", srcName);
+		errorMsg("Copying file \"%s\" to itself\n", srcName);
 		return FALSE;
 	}
 
@@ -630,7 +630,7 @@
 				continue;
 			}
 			if (strlen(fileName) + strlen(next->d_name) + 1 > BUFSIZ) {
-				fprintf(stderr, name_too_long, "ftw");
+				errorMsg(name_too_long);
 				return FALSE;
 			}
 			memset(nextFile, 0, sizeof(nextFile));
@@ -995,8 +995,7 @@
 		if (is_a_console(fd))
 			return fd;
 
-	fprintf(stderr,
-			"Couldnt get a file descriptor referring to the console\n");
+	errorMsg("Couldnt get a file descriptor referring to the console\n");
 	return -1;					/* total failure */
 }
 
diff --git a/whoami.c b/whoami.c
index 983c672..01dff81 100644
--- a/whoami.c
+++ b/whoami.c
@@ -43,7 +43,6 @@
 		puts(user);
 		exit(TRUE);
 	}
-	fprintf(stderr, "%s: cannot find username for UID %u\n", applet_name,
-			(unsigned) uid);
+	errorMsg("cannot find username for UID %u\n", (unsigned) uid);
 	return(FALSE);
 }
