diff --git a/Changelog b/Changelog
index 44bcd37..911fedf 100644
--- a/Changelog
+++ b/Changelog
@@ -34,6 +34,9 @@
 	* zcat now works (wasn't working since option parsing was broken)
 	* Renamed "mnc" to the more correct "nc" (for netcat).
 	* Makefile intelligence updates
+	* Changed the way init parses /etc/inittab entries to avoid problems
+	    with commands that contain colons in them.  Fix thanks to 
+	    Pavel Roskin <pavel_roskin@geocities.com>
 	* More doc updates
 
 
diff --git a/TODO b/TODO
index c06f4c3..4082cfc 100644
--- a/TODO
+++ b/TODO
@@ -21,6 +21,18 @@
  - 'grep foo$ file' doesn't work
  - 'grep *foo file' segfaults
  - ps dirent race bug (need to stat the file before attempting chdir)
+ - The following commands segfault:
+	chmod -R
+	chown -R
+	chgrp -R
+	cp -a -a
+	ln -s -s
+	rm -f
+	touch -c
+  - I believe that swaponoff may also be also broken (check it).
+  - It used to be that BusyBox tar would happily overwrite existing files on
+  an extraction.  However, as of 0.42, BusyBox tar simply dies as soon as an 
+  existing file is found.
 
 
 -----------
diff --git a/docs/busybox.net/index.html b/docs/busybox.net/index.html
index ea46709..81fb4ba 100644
--- a/docs/busybox.net/index.html
+++ b/docs/busybox.net/index.html
@@ -248,7 +248,7 @@
 <TR><TD BGCOLOR="#eeeee0">
 Current documentation for BusyBox includes: 
 <ul>
-    <li> <a href="BusyBox.html">BusyBox.html</a>
+    <li> <a href="ftp://ftp.lineo.com/pub/busybox/BusyBox.html">BusyBox.html</a>
 		This is a list of the all the available commands in BusyBox with complete 
 		usage information and examples of how to use each app.  I spent 
 		a <em>lot</em> of time updating these docs and trying to make them 
diff --git a/init.c b/init.c
index 38e9131..0e12610 100644
--- a/init.c
+++ b/init.c
@@ -745,7 +745,7 @@
 #ifdef BB_FEATURE_USE_INITTAB
 	FILE *file;
 	char buf[256], lineAsRead[256], tmpConsole[256];
-	char *p, *q, *r, *s;
+	char *id, *runlev, *action, *process, *eol;
 	const struct initActionType *a = actions;
 	int foundIt;
 
@@ -772,64 +772,69 @@
 
 	while (fgets(buf, 255, file) != NULL) {
 		foundIt = FALSE;
-		for (p = buf; *p == ' ' || *p == '\t'; p++);
-		if (*p == '#' || *p == '\n')
+		/* Skip leading spaces */
+		for (id = buf; *id == ' ' || *id == '\t'; id++);
+
+		/* Skip the line if it's a comment */
+		if (*id == '#' || *id == '\n')
 			continue;
 
 		/* Trim the trailing \n */
-		q = strrchr(p, '\n');
-		if (q != NULL)
-			*q = '\0';
+		eol = strrchr(id, '\n');
+		if (eol != NULL)
+			*eol = '\0';
 
 		/* Keep a copy around for posterity's sake (and error msgs) */
 		strcpy(lineAsRead, buf);
 
-		/* Grab the ID field */
-		s = p;
-		p = strchr(p, ':');
-		if (p != NULL || *(p + 1) != '\0') {
-			*p = '\0';
-			++p;
-		}
-
-		/* Now peel off the process field from the end
-		 * of the string */
-		q = strrchr(p, ':');
-		if (q == NULL || *(q + 1) == '\0') {
+		/* Separate the ID field from the runlevels */
+		runlev = strchr(id, ':');
+		if (runlev == NULL || *(runlev + 1) == '\0') {
 			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
 			continue;
 		} else {
-			*q = '\0';
-			++q;
+			*runlev = '\0';
+			++runlev;
 		}
 
-		/* Now peel off the action field */
-		r = strrchr(p, ':');
-		if (r == NULL || *(r + 1) == '\0') {
+		/* Separate the runlevels from the action */
+		action = strchr(runlev, ':');
+		if (action == NULL || *(action + 1) == '\0') {
 			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
 			continue;
 		} else {
-			++r;
+			*action = '\0';
+			++action;
+		}
+
+		/* Separate the action from the process */
+		process = strchr(action, ':');
+		if (process == NULL || *(process + 1) == '\0') {
+			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
+			continue;
+		} else {
+			*process = '\0';
+			++process;
 		}
 
 		/* Ok, now process it */
 		a = actions;
 		while (a->name != 0) {
-			if (strcmp(a->name, r) == 0) {
-				if (*s != '\0') {
+			if (strcmp(a->name, action) == 0) {
+				if (*id != '\0') {
 					struct stat statBuf;
 
 					strcpy(tmpConsole, "/dev/");
-					strncat(tmpConsole, s, 200);
+					strncat(tmpConsole, id, 200);
 					if (stat(tmpConsole, &statBuf) != 0) {
 						message(LOG | CONSOLE,
 								"device '%s' does not exist.  Did you read the directions?\n",
 								tmpConsole);
 						break;
 					}
-					s = tmpConsole;
+					id = tmpConsole;
 				}
-				new_initAction(a->action, q, s);
+				new_initAction(a->action, process, id);
 				foundIt = TRUE;
 			}
 			a++;
diff --git a/init/init.c b/init/init.c
index 38e9131..0e12610 100644
--- a/init/init.c
+++ b/init/init.c
@@ -745,7 +745,7 @@
 #ifdef BB_FEATURE_USE_INITTAB
 	FILE *file;
 	char buf[256], lineAsRead[256], tmpConsole[256];
-	char *p, *q, *r, *s;
+	char *id, *runlev, *action, *process, *eol;
 	const struct initActionType *a = actions;
 	int foundIt;
 
@@ -772,64 +772,69 @@
 
 	while (fgets(buf, 255, file) != NULL) {
 		foundIt = FALSE;
-		for (p = buf; *p == ' ' || *p == '\t'; p++);
-		if (*p == '#' || *p == '\n')
+		/* Skip leading spaces */
+		for (id = buf; *id == ' ' || *id == '\t'; id++);
+
+		/* Skip the line if it's a comment */
+		if (*id == '#' || *id == '\n')
 			continue;
 
 		/* Trim the trailing \n */
-		q = strrchr(p, '\n');
-		if (q != NULL)
-			*q = '\0';
+		eol = strrchr(id, '\n');
+		if (eol != NULL)
+			*eol = '\0';
 
 		/* Keep a copy around for posterity's sake (and error msgs) */
 		strcpy(lineAsRead, buf);
 
-		/* Grab the ID field */
-		s = p;
-		p = strchr(p, ':');
-		if (p != NULL || *(p + 1) != '\0') {
-			*p = '\0';
-			++p;
-		}
-
-		/* Now peel off the process field from the end
-		 * of the string */
-		q = strrchr(p, ':');
-		if (q == NULL || *(q + 1) == '\0') {
+		/* Separate the ID field from the runlevels */
+		runlev = strchr(id, ':');
+		if (runlev == NULL || *(runlev + 1) == '\0') {
 			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
 			continue;
 		} else {
-			*q = '\0';
-			++q;
+			*runlev = '\0';
+			++runlev;
 		}
 
-		/* Now peel off the action field */
-		r = strrchr(p, ':');
-		if (r == NULL || *(r + 1) == '\0') {
+		/* Separate the runlevels from the action */
+		action = strchr(runlev, ':');
+		if (action == NULL || *(action + 1) == '\0') {
 			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
 			continue;
 		} else {
-			++r;
+			*action = '\0';
+			++action;
+		}
+
+		/* Separate the action from the process */
+		process = strchr(action, ':');
+		if (process == NULL || *(process + 1) == '\0') {
+			message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead);
+			continue;
+		} else {
+			*process = '\0';
+			++process;
 		}
 
 		/* Ok, now process it */
 		a = actions;
 		while (a->name != 0) {
-			if (strcmp(a->name, r) == 0) {
-				if (*s != '\0') {
+			if (strcmp(a->name, action) == 0) {
+				if (*id != '\0') {
 					struct stat statBuf;
 
 					strcpy(tmpConsole, "/dev/");
-					strncat(tmpConsole, s, 200);
+					strncat(tmpConsole, id, 200);
 					if (stat(tmpConsole, &statBuf) != 0) {
 						message(LOG | CONSOLE,
 								"device '%s' does not exist.  Did you read the directions?\n",
 								tmpConsole);
 						break;
 					}
-					s = tmpConsole;
+					id = tmpConsole;
 				}
-				new_initAction(a->action, q, s);
+				new_initAction(a->action, process, id);
 				foundIt = TRUE;
 			}
 			a++;
