diff --git a/init/init.c b/init/init.c
index 116d079..95c2322 100644
--- a/init/init.c
+++ b/init/init.c
@@ -97,7 +97,7 @@
 struct initActionTag {
     pid_t pid;
     char process[256];
-    char *console;
+    char console[256];
     initAction *nextPtr;
     initActionEnum action;
 };
@@ -496,9 +496,16 @@
 #endif
 
 void new_initAction (const struct initActionType *a, 
-	char* process, char* console)
+	char* process, char* cons)
 {
     initAction* newAction;
+
+    /* If BusyBox detects that a serial console is in use, 
+     * then entries containing non-empty id fields will _not_ be run.
+     */
+    if (second_console != NULL && *cons != '\0')
+	return;
+
     newAction = calloc ((size_t)(1), sizeof(initAction));
     if (!newAction) {
 	fprintf(stderr, "Memory allocation failure\n");
@@ -508,7 +515,10 @@
     initActionList = newAction;
     strncpy( newAction->process, process, 255);
     newAction->action = a->action;
-    newAction->console = console;
+    if (*cons != '\0')
+	strncpy(newAction->console, cons, 255);
+    else
+	strncpy(newAction->console, console, 255);
     newAction->pid = 0;
 }
 
@@ -524,11 +534,19 @@
     }
 }
 
+/* NOTE that if BB_FEATURE_USE_INITTAB is NOT defined,
+ * then parse_inittab() simply adds in some default
+ * actions(i.e runs INIT_SCRIPT and then starts a pair 
+ * of "askfirst" shells.  If BB_FEATURE_USE_INITTAB 
+ * _is_ defined, but /etc/inittab is missing == same
+ * default behavior.
+ * */
 void parse_inittab(void) 
 {
+#ifdef BB_FEATURE_USE_INITTAB
     FILE* file;
-    char buf[256];
-    char *p, *q, *r;
+    char buf[256], buf1[256];
+    char *p, *q, *r, *s;
     const struct initActionType *a = actions;
     int foundIt;
 
@@ -536,7 +554,7 @@
     file = fopen(INITTAB, "r");
     if (file == NULL) {
 	/* No inittab file -- set up some default behavior */
-
+#endif
 	/* Askfirst shell on tty1 */
 	new_initAction( &(actions[3]), SHELL, console );
 	/* Askfirst shell on tty2 */
@@ -546,6 +564,7 @@
 	new_initAction( &(actions[0]), INIT_SCRIPT, console );
 
 	return;
+#ifdef BB_FEATURE_USE_INITTAB
     }
 
     while ( fgets(buf, 255, file) != NULL) {
@@ -558,15 +577,22 @@
 	if (q != NULL)
 	    *q='\0';
 
-	/* Skip past the ID field and the runlevel 
-	 * field (both are ignored) */
+	/* Keep a copy around for posterity's sake (and error msgs) */
+	strcpy(buf1, buf);
+
+	/* Grab the ID field */
+	s=p;
 	p = strchr( p, ':');
+	if ( p != NULL || *(p+1) != '\0' ) {
+	    *p='\0';
+	    ++p;
+	}
 
 	/* Now peal off the process field from the end
 	 * of the string */
 	q = strrchr( p, ':');
 	if ( q == NULL || *(q+1) == '\0' ) {
-	    fprintf(stderr, "Bad inittab entry: %s\n", buf);
+	    fprintf(stderr, "Bad inittab entry: %s\n", buf1);
 	    continue;
 	} else {
 	    *q='\0';
@@ -576,7 +602,7 @@
 	/* Now peal off the action field */
 	r = strrchr( p, ':');
 	if ( r == NULL || *(r+1) == '\0') {
-	    fprintf(stderr, "Bad inittab entry: %s\n", buf);
+	    fprintf(stderr, "Bad inittab entry: %s\n", buf1);
 	    continue;
 	} else {
 	    ++r;
@@ -586,7 +612,7 @@
 	a = actions;
 	while (a->name != 0) {
 	    if (strcmp(a->name, r) == 0) {
-		new_initAction( a, q, NULL);
+		new_initAction( a, q, s);
 		foundIt=TRUE;
 	    }
 	    a++;
@@ -595,13 +621,13 @@
 	    continue;
 	else {
 	    /* Choke on an unknown action */
-	    fprintf(stderr, "Bad inittab entry: %s\n", buf);
+	    fprintf(stderr, "Bad inittab entry: %s\n", buf1);
 	}
     }
     return;
+#endif
 }
 
-
 extern int init_main(int argc, char **argv)
 {
     initAction *a;
@@ -675,6 +701,11 @@
 	new_initAction( &(actions[3]), SHELL, console);
     } else {
 	/* Not in single user mode -- see what inittab says */
+
+	/* NOTE that if BB_FEATURE_USE_INITTAB is NOT defined,
+	 * then parse_inittab() simply adds in some default
+	 * actions(i.e runs INIT_SCRIPT and then starts a pair 
+	 * of "askfirst" shells */
 	parse_inittab();
     }
 
