diff --git a/Changelog b/Changelog
index d81207c..c0ffd23 100644
--- a/Changelog
+++ b/Changelog
@@ -52,6 +52,9 @@
 	    to match the terminal (defaults to width=79 when this is off).
 	* Fixed mount'ing loop devices when the filesystem type was not 
 	    specified.  It used to revert to non-loop after the first try.
+	* all mallocs now use xmalloc (and so are OOM error safe), and
+	    the common error handling saves a few bytes.  Thanks to 
+	    Bob Tinsley <bob@earthrise.demon.co.uk> for the patch.
 
 
 	-Erik Andersen
diff --git a/coreutils/date.c b/coreutils/date.c
index b4c3e71..652db8d 100644
--- a/coreutils/date.c
+++ b/coreutils/date.c
@@ -276,7 +276,7 @@
 	}
 
 	/* Print OUTPUT (after ALL that!) */
-	t_buff = malloc(201);
+	t_buff = xmalloc(201);
 	strftime(t_buff, 200, date_fmt, &tm_time);
 	printf("%s\n", t_buff);
 
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 0d5b3e8..f40dec7 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -114,11 +114,7 @@
 		argv++;
 	}
 
-	buf = malloc(blockSize);
-	if (buf == NULL) {
-		fprintf(stderr, "Cannot allocate buffer\n");
-		exit(FALSE);
-	}
+	buf = xmalloc(blockSize);
 
 	intotal = 0;
 	outTotal = 0;
diff --git a/coreutils/tr.c b/coreutils/tr.c
index 8ac09e6..3bfa480 100644
--- a/coreutils/tr.c
+++ b/coreutils/tr.c
@@ -44,7 +44,7 @@
 #endif
 static const char rcsid[] =
 
-	"$Id: tr.c,v 1.1 2000/03/05 08:07:00 erik Exp $";
+	"$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $";
 #endif							/* not lint */
 #endif							/* #if 0 */
 
@@ -433,8 +433,7 @@
 														"unknown class %s",
 														s->str);
 
-	if ((cp->set = p = malloc((NCHARS + 1) * sizeof(int))) == NULL)
-		errx(1, "malloc");
+	cp->set = p = xmalloc((NCHARS + 1) * sizeof(int));
 	bzero(p, (NCHARS + 1) * sizeof(int));
 
 	for (cnt = 0, func = cp->func; cnt < NCHARS; ++cnt)
diff --git a/date.c b/date.c
index b4c3e71..652db8d 100644
--- a/date.c
+++ b/date.c
@@ -276,7 +276,7 @@
 	}
 
 	/* Print OUTPUT (after ALL that!) */
-	t_buff = malloc(201);
+	t_buff = xmalloc(201);
 	strftime(t_buff, 200, date_fmt, &tm_time);
 	printf("%s\n", t_buff);
 
diff --git a/dd.c b/dd.c
index 0d5b3e8..f40dec7 100644
--- a/dd.c
+++ b/dd.c
@@ -114,11 +114,7 @@
 		argv++;
 	}
 
-	buf = malloc(blockSize);
-	if (buf == NULL) {
-		fprintf(stderr, "Cannot allocate buffer\n");
-		exit(FALSE);
-	}
+	buf = xmalloc(blockSize);
 
 	intotal = 0;
 	outTotal = 0;
diff --git a/dmesg.c b/dmesg.c
index bbed822..2bbf43a 100644
--- a/dmesg.c
+++ b/dmesg.c
@@ -95,7 +95,7 @@
 
 	if (bufsize < 4096)
 		bufsize = 4096;
-	buf = (char *) malloc(bufsize);
+	buf = (char *) xmalloc(bufsize);
 	n = klogctl(cmd, buf, bufsize);
 	if (n < 0) {
 		goto klogctl_error;
diff --git a/fsck_minix.c b/fsck_minix.c
index cfa973e..47e81ce 100644
--- a/fsck_minix.c
+++ b/fsck_minix.c
@@ -603,23 +603,13 @@
 
 static void read_tables(void)
 {
-	inode_map = malloc(IMAPS * BLOCK_SIZE);
-	if (!inode_map)
-		die("Unable to allocate buffer for inode map");
-	zone_map = malloc(ZMAPS * BLOCK_SIZE);
-	if (!inode_map)
-		die("Unable to allocate buffer for zone map");
+	inode_map = xmalloc(IMAPS * BLOCK_SIZE);
+	zone_map = xmalloc(ZMAPS * BLOCK_SIZE);
 	memset(inode_map, 0, sizeof(inode_map));
 	memset(zone_map, 0, sizeof(zone_map));
-	inode_buffer = malloc(INODE_BUFFER_SIZE);
-	if (!inode_buffer)
-		die("Unable to allocate buffer for inodes");
-	inode_count = malloc(INODES + 1);
-	if (!inode_count)
-		die("Unable to allocate buffer for inode count");
-	zone_count = malloc(ZONES);
-	if (!zone_count)
-		die("Unable to allocate buffer for zone count");
+	inode_buffer = xmalloc(INODE_BUFFER_SIZE);
+	inode_count = xmalloc(INODES + 1);
+	zone_count = xmalloc(ZONES);
 	if (IMAPS * BLOCK_SIZE != read(IN, inode_map, IMAPS * BLOCK_SIZE))
 		die("Unable to read inode map");
 	if (ZMAPS * BLOCK_SIZE != read(IN, zone_map, ZMAPS * BLOCK_SIZE))
@@ -1247,18 +1237,9 @@
 {
 	int i;
 
-	name_list = malloc(sizeof(char *) * MAX_DEPTH);
-	if (!name_list) { 
-		fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno));
-		exit(1); 
-	}
-	for (i = 0; i < MAX_DEPTH; i++) {
-		name_list[i] = malloc(sizeof(char) * PATH_MAX + 1);
-		if (!name_list[i]) {
-			fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno));
-			exit(1); 
-		}
-	}
+	name_list = xmalloc(sizeof(char *) * MAX_DEPTH);
+	for (i = 0; i < MAX_DEPTH; i++)
+		name_list[i] = xmalloc(sizeof(char) * PATH_MAX + 1);
 }
 
 /* execute this atexit() to deallocate name_list[] */
diff --git a/mkfs_minix.c b/mkfs_minix.c
index 4435cb6..1ee3d4c 100644
--- a/mkfs_minix.c
+++ b/mkfs_minix.c
@@ -530,19 +530,15 @@
 		die("unable to allocate buffers for maps");
 	}
 	FIRSTZONE = NORM_FIRSTZONE;
-	inode_map = malloc(IMAPS * BLOCK_SIZE);
-	zone_map = malloc(ZMAPS * BLOCK_SIZE);
-	if (!inode_map || !zone_map)
-		die("unable to allocate buffers for maps");
+	inode_map = xmalloc(IMAPS * BLOCK_SIZE);
+	zone_map = xmalloc(ZMAPS * BLOCK_SIZE);
 	memset(inode_map, 0xff, IMAPS * BLOCK_SIZE);
 	memset(zone_map, 0xff, ZMAPS * BLOCK_SIZE);
 	for (i = FIRSTZONE; i < ZONES; i++)
 		unmark_zone(i);
 	for (i = MINIX_ROOT_INO; i <= INODES; i++)
 		unmark_inode(i);
-	inode_buffer = malloc(INODE_BUFFER_SIZE);
-	if (!inode_buffer)
-		die("unable to allocate buffer for inodes");
+	inode_buffer = xmalloc(INODE_BUFFER_SIZE);
 	memset(inode_buffer, 0, INODE_BUFFER_SIZE);
 	printf("%ld inodes\n", INODES);
 	printf("%ld blocks\n", ZONES);
diff --git a/mkswap.c b/mkswap.c
index 130d241..17866a7 100644
--- a/mkswap.c
+++ b/mkswap.c
@@ -116,7 +116,7 @@
 	if (pagesize != PAGE_SIZE)
 		fprintf(stderr, "Assuming pages of size %d\n", pagesize);
 #endif
-	signature_page = (int *) malloc(pagesize);
+	signature_page = (int *) xmalloc(pagesize);
 	memset(signature_page, 0, pagesize);
 	p = (struct swap_header_v1 *) signature_page;
 }
@@ -230,9 +230,7 @@
 	int do_seek = 1;
 	char *buffer;
 
-	buffer = malloc(pagesize);
-	if (!buffer)
-		die("Out of memory");
+	buffer = xmalloc(pagesize);
 	current_page = 0;
 	while (current_page < PAGES) {
 		if (!check) {
diff --git a/sfdisk.c b/sfdisk.c
index f23eb56..0a740ab 100644
--- a/sfdisk.c
+++ b/sfdisk.c
@@ -300,8 +300,7 @@
 	if (!sseek(dev, fd, sno))
 		return 0;
 
-	if (!(s = (struct sector *) malloc(sizeof(struct sector))))
-		fatalError("out of memory - giving up\n");
+	s = (struct sector *) xmalloc(sizeof(struct sector));
 
 	if (read(fd, s->data, sizeof(s->data)) != sizeof(s->data)) {
 		perror("read");
diff --git a/tr.c b/tr.c
index 8ac09e6..3bfa480 100644
--- a/tr.c
+++ b/tr.c
@@ -44,7 +44,7 @@
 #endif
 static const char rcsid[] =
 
-	"$Id: tr.c,v 1.1 2000/03/05 08:07:00 erik Exp $";
+	"$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $";
 #endif							/* not lint */
 #endif							/* #if 0 */
 
@@ -433,8 +433,7 @@
 														"unknown class %s",
 														s->str);
 
-	if ((cp->set = p = malloc((NCHARS + 1) * sizeof(int))) == NULL)
-		errx(1, "malloc");
+	cp->set = p = xmalloc((NCHARS + 1) * sizeof(int));
 	bzero(p, (NCHARS + 1) * sizeof(int));
 
 	for (cnt = 0, func = cp->func; cnt < NCHARS; ++cnt)
diff --git a/umount.c b/umount.c
index b0f393c..6661db8 100644
--- a/umount.c
+++ b/umount.c
@@ -89,8 +89,7 @@
 		return;
 	}
 	while ((e = getmntent(fp))) {
-		entry = malloc(sizeof(struct _mtab_entry_t));
-
+		entry = xmalloc(sizeof(struct _mtab_entry_t));
 		entry->device = strdup(e->mnt_fsname);
 		entry->mountpt = strdup(e->mnt_dir);
 		entry->next = mtab_cache;
diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c
index bbed822..2bbf43a 100644
--- a/util-linux/dmesg.c
+++ b/util-linux/dmesg.c
@@ -95,7 +95,7 @@
 
 	if (bufsize < 4096)
 		bufsize = 4096;
-	buf = (char *) malloc(bufsize);
+	buf = (char *) xmalloc(bufsize);
 	n = klogctl(cmd, buf, bufsize);
 	if (n < 0) {
 		goto klogctl_error;
diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c
index cfa973e..47e81ce 100644
--- a/util-linux/fsck_minix.c
+++ b/util-linux/fsck_minix.c
@@ -603,23 +603,13 @@
 
 static void read_tables(void)
 {
-	inode_map = malloc(IMAPS * BLOCK_SIZE);
-	if (!inode_map)
-		die("Unable to allocate buffer for inode map");
-	zone_map = malloc(ZMAPS * BLOCK_SIZE);
-	if (!inode_map)
-		die("Unable to allocate buffer for zone map");
+	inode_map = xmalloc(IMAPS * BLOCK_SIZE);
+	zone_map = xmalloc(ZMAPS * BLOCK_SIZE);
 	memset(inode_map, 0, sizeof(inode_map));
 	memset(zone_map, 0, sizeof(zone_map));
-	inode_buffer = malloc(INODE_BUFFER_SIZE);
-	if (!inode_buffer)
-		die("Unable to allocate buffer for inodes");
-	inode_count = malloc(INODES + 1);
-	if (!inode_count)
-		die("Unable to allocate buffer for inode count");
-	zone_count = malloc(ZONES);
-	if (!zone_count)
-		die("Unable to allocate buffer for zone count");
+	inode_buffer = xmalloc(INODE_BUFFER_SIZE);
+	inode_count = xmalloc(INODES + 1);
+	zone_count = xmalloc(ZONES);
 	if (IMAPS * BLOCK_SIZE != read(IN, inode_map, IMAPS * BLOCK_SIZE))
 		die("Unable to read inode map");
 	if (ZMAPS * BLOCK_SIZE != read(IN, zone_map, ZMAPS * BLOCK_SIZE))
@@ -1247,18 +1237,9 @@
 {
 	int i;
 
-	name_list = malloc(sizeof(char *) * MAX_DEPTH);
-	if (!name_list) { 
-		fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno));
-		exit(1); 
-	}
-	for (i = 0; i < MAX_DEPTH; i++) {
-		name_list[i] = malloc(sizeof(char) * PATH_MAX + 1);
-		if (!name_list[i]) {
-			fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno));
-			exit(1); 
-		}
-	}
+	name_list = xmalloc(sizeof(char *) * MAX_DEPTH);
+	for (i = 0; i < MAX_DEPTH; i++)
+		name_list[i] = xmalloc(sizeof(char) * PATH_MAX + 1);
 }
 
 /* execute this atexit() to deallocate name_list[] */
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c
index 4435cb6..1ee3d4c 100644
--- a/util-linux/mkfs_minix.c
+++ b/util-linux/mkfs_minix.c
@@ -530,19 +530,15 @@
 		die("unable to allocate buffers for maps");
 	}
 	FIRSTZONE = NORM_FIRSTZONE;
-	inode_map = malloc(IMAPS * BLOCK_SIZE);
-	zone_map = malloc(ZMAPS * BLOCK_SIZE);
-	if (!inode_map || !zone_map)
-		die("unable to allocate buffers for maps");
+	inode_map = xmalloc(IMAPS * BLOCK_SIZE);
+	zone_map = xmalloc(ZMAPS * BLOCK_SIZE);
 	memset(inode_map, 0xff, IMAPS * BLOCK_SIZE);
 	memset(zone_map, 0xff, ZMAPS * BLOCK_SIZE);
 	for (i = FIRSTZONE; i < ZONES; i++)
 		unmark_zone(i);
 	for (i = MINIX_ROOT_INO; i <= INODES; i++)
 		unmark_inode(i);
-	inode_buffer = malloc(INODE_BUFFER_SIZE);
-	if (!inode_buffer)
-		die("unable to allocate buffer for inodes");
+	inode_buffer = xmalloc(INODE_BUFFER_SIZE);
 	memset(inode_buffer, 0, INODE_BUFFER_SIZE);
 	printf("%ld inodes\n", INODES);
 	printf("%ld blocks\n", ZONES);
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c
index 130d241..17866a7 100644
--- a/util-linux/mkswap.c
+++ b/util-linux/mkswap.c
@@ -116,7 +116,7 @@
 	if (pagesize != PAGE_SIZE)
 		fprintf(stderr, "Assuming pages of size %d\n", pagesize);
 #endif
-	signature_page = (int *) malloc(pagesize);
+	signature_page = (int *) xmalloc(pagesize);
 	memset(signature_page, 0, pagesize);
 	p = (struct swap_header_v1 *) signature_page;
 }
@@ -230,9 +230,7 @@
 	int do_seek = 1;
 	char *buffer;
 
-	buffer = malloc(pagesize);
-	if (!buffer)
-		die("Out of memory");
+	buffer = xmalloc(pagesize);
 	current_page = 0;
 	while (current_page < PAGES) {
 		if (!check) {
diff --git a/util-linux/umount.c b/util-linux/umount.c
index b0f393c..6661db8 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -89,8 +89,7 @@
 		return;
 	}
 	while ((e = getmntent(fp))) {
-		entry = malloc(sizeof(struct _mtab_entry_t));
-
+		entry = xmalloc(sizeof(struct _mtab_entry_t));
 		entry->device = strdup(e->mnt_fsname);
 		entry->mountpt = strdup(e->mnt_dir);
 		entry->next = mtab_cache;
diff --git a/utility.c b/utility.c
index c274bfa..29edbf1 100644
--- a/utility.c
+++ b/utility.c
@@ -172,9 +172,7 @@
     
 	i = hash_inode(statbuf->st_ino);
 	s = name ? strlen(name) : 0;
-	bucket = malloc(sizeof(ino_dev_hashtable_bucket_t) + s);
-	if (bucket == NULL)
-		fatalError("Not enough memory.");
+	bucket = xmalloc(sizeof(ino_dev_hashtable_bucket_t) + s);
 	bucket->ino = statbuf->st_ino;
 	bucket->dev = statbuf->st_dev;
 	if (name)
@@ -1003,7 +1001,7 @@
 	if (strcmp(needle, newNeedle) == 0)
 		return FALSE;
 
-	oldhayStack = (char *) malloc((unsigned) (strlen(haystack)));
+	oldhayStack = (char *) xmalloc((unsigned) (strlen(haystack)));
 	while (where != NULL) {
 		foundOne++;
 		strcpy(oldhayStack, haystack);
@@ -1364,22 +1362,16 @@
 #endif							/* BB_FEATURE_USE_DEVPS_PATCH */
 #endif							/* BB_KILLALL || ( BB_FEATURE_LINUXRC && ( BB_HALT || BB_REBOOT || BB_POWEROFF )) */
 
-#if defined BB_GUNZIP \
- || defined BB_GZIP   \
- || defined BB_PRINTF \
- || defined BB_TAIL
+/* this should really be farmed out to libbusybox.a */
 extern void *xmalloc(size_t size)
 {
 	void *cp = malloc(size);
 
-	if (cp == NULL) {
-		errorMsg("out of memory");
-	}
+	if (cp == NULL)
+		fatalError("out of memory");
 	return cp;
 }
 
-#endif							/* BB_GUNZIP || BB_GZIP || BB_PRINTF || BB_TAIL */
-
 #if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT)
 extern int vdprintf(int d, const char *format, va_list ap)
 {
