diff --git a/Changelog b/Changelog
index fd560a8..ebc69bd 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,9 @@
 0.43
+	* Busybox can now work perfectly when /proc is disabled, thereby 
+	    saving a bunch of memory (kernel /proc support is not thin).
+	    This is done by making use of some nice kernel patches I 
+	    wrote up to support the features that busybox requires and
+	    that /proc usually provides.
 	* Wrote basename, killall, and uptime.
 	* Added freeramdisk, which will free up all memory associated
 	    with a ram disk.  Contributed by Emanuele Caratti <wiz@iol.it>
@@ -36,7 +41,8 @@
 	* An initial telnet implementation was added by 
 	    Randolph Chung <tausq@debian.org>.
 	* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
-	    would go into an infinite loop.
+	* ps now supports BB_FEATURE_AUTOWIDTH, and can adjust its width
+	    to match the terminal (defaults to width=79 when this is off).
 
 
 	-Erik Andersen
diff --git a/halt.c b/halt.c
index f2c9828..81d24cf 100644
--- a/halt.c
+++ b/halt.c
@@ -26,6 +26,10 @@
 
 extern int halt_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGUSR1));
+#else
+	exit(kill(1, SIGUSR1));
+#endif
 }
diff --git a/init.c b/init.c
index 8e28f07..c6052f8 100644
--- a/init.c
+++ b/init.c
@@ -336,10 +336,6 @@
 
 
 	if ((pid = fork()) == 0) {
-#ifdef DEBUG_INIT
-		pid_t shell_pgid = getpid();
-#endif
-
 		/* Clean up */
 		close(0);
 		close(1);
@@ -373,8 +369,8 @@
 			 * specifies.
 			 */
 			char c;
-
 #ifdef DEBUG_INIT
+			pid_t shell_pgid = getpid();
 			message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
 					command, shell_pgid, terminal);
 #endif
diff --git a/init/halt.c b/init/halt.c
index f2c9828..81d24cf 100644
--- a/init/halt.c
+++ b/init/halt.c
@@ -26,6 +26,10 @@
 
 extern int halt_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGUSR1));
+#else
+	exit(kill(1, SIGUSR1));
+#endif
 }
diff --git a/init/init.c b/init/init.c
index 8e28f07..c6052f8 100644
--- a/init/init.c
+++ b/init/init.c
@@ -336,10 +336,6 @@
 
 
 	if ((pid = fork()) == 0) {
-#ifdef DEBUG_INIT
-		pid_t shell_pgid = getpid();
-#endif
-
 		/* Clean up */
 		close(0);
 		close(1);
@@ -373,8 +369,8 @@
 			 * specifies.
 			 */
 			char c;
-
 #ifdef DEBUG_INIT
+			pid_t shell_pgid = getpid();
 			message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
 					command, shell_pgid, terminal);
 #endif
diff --git a/init/poweroff.c b/init/poweroff.c
index 14dc2f5..0f23b95 100644
--- a/init/poweroff.c
+++ b/init/poweroff.c
@@ -26,6 +26,10 @@
 
 extern int poweroff_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGUSR2));
+#else
+	exit(kill(1, SIGUSR2));
+#endif
 }
diff --git a/init/reboot.c b/init/reboot.c
index fc01ea0..2f8b2b4 100644
--- a/init/reboot.c
+++ b/init/reboot.c
@@ -26,8 +26,12 @@
 
 extern int reboot_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGINT));
+#else
+	exit(kill(1, SIGINT));
+#endif
 }
 
 /*
diff --git a/lsmod.c b/lsmod.c
index d9c40ea..b0b37bd 100644
--- a/lsmod.c
+++ b/lsmod.c
@@ -25,9 +25,9 @@
 #include <stdio.h>
 
 
-#if ! defined BB_FEATURE_USE_PROCFS
-#error Sorry, I depend on the /proc filesystem right now.
-#endif
+//#if ! defined BB_FEATURE_USE_PROCFS
+//#error Sorry, I depend on the /proc filesystem right now.
+//#endif
 
 extern int lsmod_main(int argc, char **argv)
 {
diff --git a/modutils/lsmod.c b/modutils/lsmod.c
index d9c40ea..b0b37bd 100644
--- a/modutils/lsmod.c
+++ b/modutils/lsmod.c
@@ -25,9 +25,9 @@
 #include <stdio.h>
 
 
-#if ! defined BB_FEATURE_USE_PROCFS
-#error Sorry, I depend on the /proc filesystem right now.
-#endif
+//#if ! defined BB_FEATURE_USE_PROCFS
+//#error Sorry, I depend on the /proc filesystem right now.
+//#endif
 
 extern int lsmod_main(int argc, char **argv)
 {
diff --git a/poweroff.c b/poweroff.c
index 14dc2f5..0f23b95 100644
--- a/poweroff.c
+++ b/poweroff.c
@@ -26,6 +26,10 @@
 
 extern int poweroff_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGUSR2));
+#else
+	exit(kill(1, SIGUSR2));
+#endif
 }
diff --git a/procps/ps.c b/procps/ps.c
index b0933ab..b9ff5bd 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -35,6 +35,8 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <ctype.h>
+#include <sys/ioctl.h>
+
 
 #if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
 
@@ -116,7 +118,15 @@
 	char path[32], sbuf[512];
 	char uidName[10] = "";
 	char groupName[10] = "";
-	int i, c;
+	int len, i, c;
+#ifdef BB_FEATURE_AUTOWIDTH
+	struct winsize win = { 0, 0 };
+	int terminal_width = 0;
+#else
+#define terminal_width  79
+#endif
+
+
 
 	if (argc > 1 && **(argv + 1) == '-')
 		usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
@@ -125,6 +135,12 @@
 	if (!dir)
 		fatalError("Can't open /proc");
 
+#ifdef BB_FEATURE_AUTOWIDTH
+		ioctl(fileno(stdout), TIOCGWINSZ, &win);
+		if (win.ws_col > 0)
+			terminal_width = win.ws_col - 1;
+#endif
+
 	fprintf(stdout, "%5s  %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
 			"State", "Command");
 	while ((entry = readdir(dir)) != NULL) {
@@ -146,21 +162,21 @@
 		if (*groupName == '\0')
 			sprintf(groupName, "%d", p.rgid);
 
-		fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
+		len = fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
 				p.state);
 		sprintf(path, "/proc/%s/cmdline", entry->d_name);
 		file = fopen(path, "r");
 		if (file == NULL)
 			fatalError("Can't open %s: %s\n", path, strerror(errno));
 		i = 0;
-		while (((c = getc(file)) != EOF) && (i < 53)) {
+		while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
 			i++;
 			if (c == '\0')
 				c = ' ';
 			putc(c, stdout);
 		}
 		if (i == 0)
-			fprintf(stdout, "%s", p.cmd);
+			fprintf(stdout, "[%s]", p.cmd);
 		fprintf(stdout, "\n");
 	}
 	closedir(dir);
@@ -175,19 +191,24 @@
  * this one uses the nifty new devps kernel device.
  */
 
-#include <sys/ioctl.h>
 #include <linux/devps.h>
 
 
 extern int ps_main(int argc, char **argv)
 {
 	char device[] = "/dev/ps";
-	int i, fd;
+	int i, j, len, fd;
 	pid_t num_pids;
 	pid_t* pid_array = NULL;
 	struct pid_info info;
 	char uidName[10] = "";
 	char groupName[10] = "";
+#ifdef BB_FEATURE_AUTOWIDTH
+	struct winsize win = { 0, 0 };
+	int terminal_width = 0;
+#else
+#define terminal_width  79
+#endif
 
 	if (argc > 1 && **(argv + 1) == '-') 
 		usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
@@ -212,6 +233,12 @@
 	if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0) 
 		fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
 
+#ifdef BB_FEATURE_AUTOWIDTH
+		ioctl(fileno(stdout), TIOCGWINSZ, &win);
+		if (win.ws_col > 0)
+			terminal_width = win.ws_col - 1;
+#endif
+
 	/* Print up a ps listing */
 	fprintf(stdout, "%5s  %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
 			"State", "Command");
@@ -232,13 +259,19 @@
 		if (*groupName == '\0')
 			sprintf(groupName, "%ld", info.egid);
 
-		fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
+		len = fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
 
-		if (strlen(info.command_line) > 1)
+		if (strlen(info.command_line) > 1) {
+			for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
+				if (*(info.command_line+j) == '\0' && *(info.command_line+j+1) != '\0') {
+					*(info.command_line+j) = ' ';
+				}
+			}
+			*(info.command_line+j) = '\0';
 			fprintf(stdout, "%s\n", info.command_line);
-		else
+		} else {
 			fprintf(stdout, "[%s]\n", info.name);
-
+		}
 	}
 
 	/* Free memory */
diff --git a/ps.c b/ps.c
index b0933ab..b9ff5bd 100644
--- a/ps.c
+++ b/ps.c
@@ -35,6 +35,8 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <ctype.h>
+#include <sys/ioctl.h>
+
 
 #if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
 
@@ -116,7 +118,15 @@
 	char path[32], sbuf[512];
 	char uidName[10] = "";
 	char groupName[10] = "";
-	int i, c;
+	int len, i, c;
+#ifdef BB_FEATURE_AUTOWIDTH
+	struct winsize win = { 0, 0 };
+	int terminal_width = 0;
+#else
+#define terminal_width  79
+#endif
+
+
 
 	if (argc > 1 && **(argv + 1) == '-')
 		usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
@@ -125,6 +135,12 @@
 	if (!dir)
 		fatalError("Can't open /proc");
 
+#ifdef BB_FEATURE_AUTOWIDTH
+		ioctl(fileno(stdout), TIOCGWINSZ, &win);
+		if (win.ws_col > 0)
+			terminal_width = win.ws_col - 1;
+#endif
+
 	fprintf(stdout, "%5s  %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
 			"State", "Command");
 	while ((entry = readdir(dir)) != NULL) {
@@ -146,21 +162,21 @@
 		if (*groupName == '\0')
 			sprintf(groupName, "%d", p.rgid);
 
-		fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
+		len = fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
 				p.state);
 		sprintf(path, "/proc/%s/cmdline", entry->d_name);
 		file = fopen(path, "r");
 		if (file == NULL)
 			fatalError("Can't open %s: %s\n", path, strerror(errno));
 		i = 0;
-		while (((c = getc(file)) != EOF) && (i < 53)) {
+		while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
 			i++;
 			if (c == '\0')
 				c = ' ';
 			putc(c, stdout);
 		}
 		if (i == 0)
-			fprintf(stdout, "%s", p.cmd);
+			fprintf(stdout, "[%s]", p.cmd);
 		fprintf(stdout, "\n");
 	}
 	closedir(dir);
@@ -175,19 +191,24 @@
  * this one uses the nifty new devps kernel device.
  */
 
-#include <sys/ioctl.h>
 #include <linux/devps.h>
 
 
 extern int ps_main(int argc, char **argv)
 {
 	char device[] = "/dev/ps";
-	int i, fd;
+	int i, j, len, fd;
 	pid_t num_pids;
 	pid_t* pid_array = NULL;
 	struct pid_info info;
 	char uidName[10] = "";
 	char groupName[10] = "";
+#ifdef BB_FEATURE_AUTOWIDTH
+	struct winsize win = { 0, 0 };
+	int terminal_width = 0;
+#else
+#define terminal_width  79
+#endif
 
 	if (argc > 1 && **(argv + 1) == '-') 
 		usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
@@ -212,6 +233,12 @@
 	if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0) 
 		fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
 
+#ifdef BB_FEATURE_AUTOWIDTH
+		ioctl(fileno(stdout), TIOCGWINSZ, &win);
+		if (win.ws_col > 0)
+			terminal_width = win.ws_col - 1;
+#endif
+
 	/* Print up a ps listing */
 	fprintf(stdout, "%5s  %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
 			"State", "Command");
@@ -232,13 +259,19 @@
 		if (*groupName == '\0')
 			sprintf(groupName, "%ld", info.egid);
 
-		fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
+		len = fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
 
-		if (strlen(info.command_line) > 1)
+		if (strlen(info.command_line) > 1) {
+			for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
+				if (*(info.command_line+j) == '\0' && *(info.command_line+j+1) != '\0') {
+					*(info.command_line+j) = ' ';
+				}
+			}
+			*(info.command_line+j) = '\0';
 			fprintf(stdout, "%s\n", info.command_line);
-		else
+		} else {
 			fprintf(stdout, "[%s]\n", info.name);
-
+		}
 	}
 
 	/* Free memory */
diff --git a/reboot.c b/reboot.c
index fc01ea0..2f8b2b4 100644
--- a/reboot.c
+++ b/reboot.c
@@ -26,8 +26,12 @@
 
 extern int reboot_main(int argc, char **argv)
 {
+#ifdef BB_FEATURE_LINUXRC
 	/* don't assume init's pid == 1 */
 	exit(kill(findPidByName("init"), SIGINT));
+#else
+	exit(kill(1, SIGINT));
+#endif
 }
 
 /*
diff --git a/utility.c b/utility.c
index 789c6f2..c3f9947 100644
--- a/utility.c
+++ b/utility.c
@@ -1247,7 +1247,7 @@
 #endif							/* BB_INIT BB_SYSLOGD */
 
 
-#if defined BB_INIT || defined BB_HALT || defined BB_REBOOT || defined BB_KILLALL
+#if defined BB_KILLALL || defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF )
 
 #ifdef BB_FEATURE_USE_DEVPS_N_DEVMTAB
 #include <linux/devps.h>
@@ -1318,6 +1318,7 @@
 #if ! defined BB_FEATURE_USE_PROCFS
 #error Sorry, I depend on the /proc filesystem right now.
 #endif
+
 /* findPidByName()
  *  
  *  This finds the pid of the specified process.
@@ -1330,15 +1331,24 @@
  */
 extern pid_t findPidByName( char* pidName)
 {
-	pid_t thePid;
-	char filename[256];
-	char buffer[256];
+	DIR *dir;
+	struct dirent *next;
 
-	/* no need to opendir ;) */
-	for (thePid = 1; thePid < 65536; thePid++) {
+	dir = opendir("/proc");
+	if (!dir)
+		fatalError( "Cannot open /proc: %s\n", strerror (errno));
+	
+	while ((next = readdir(dir)) != NULL) {
 		FILE *status;
+		char filename[256];
+		char buffer[256];
 
-		sprintf(filename, "/proc/%d/cmdline", thePid);
+		/* If it isn't a number, we don't want it */
+		if (!isdigit(*next->d_name))
+			continue;
+
+		/* Now open the command line file */
+		sprintf(filename, "/proc/%s/status", next->d_name);
 		status = fopen(filename, "r");
 		if (!status) {
 			continue;
@@ -1347,13 +1357,13 @@
 		fclose(status);
 
 		if ((strstr(buffer, pidName) != NULL)) {
-			return thePid;
+			return strtol(next->d_name, NULL, 0);
 		}
 	}
 	return 0;
 }
 #endif							/* BB_FEATURE_USE_DEVPS_N_DEVMTAB */
-#endif							/* BB_INIT || BB_HALT || BB_REBOOT || KILLALL */
+#endif							/* BB_INIT || BB_HALT || BB_REBOOT || BB_KILLALL || BB_POWEROFF */
 
 #if defined BB_GUNZIP \
  || defined BB_GZIP   \
