diff --git a/Config.h b/Config.h
index b11d849..3a5aa61 100644
--- a/Config.h
+++ b/Config.h
@@ -262,9 +262,15 @@
 // Only relevant if BB_SH is enabled.
 #define BB_FEATURE_SH_TAB_COMPLETION
 //
+// Enable a simpler shell prompt of the form "path #" instead of the default
+// "[username@hostname path]#".  Some deeply embedded systems don't have
+// usernames or even hostnames and the default prompt can look rather hideous
+// on them. Uncomment this option for a simpler, path-only prompt (which was
+// the default until around BusyBox-0.48):
+#define BB_FEATURE_SH_SIMPLE_PROMPT
+//
 // Attempts to match usernames in a ~-prefixed path
-// XXX: Doesn't work without NSS, off by default
-//#define BB_FEATURE_USERNAME_COMPLETION  /* require NSS */
+//#define BB_FEATURE_USERNAME_COMPLETION
 //
 //Turn on extra fbset options
 //#define BB_FEATURE_FBSET_FANCY
diff --git a/lash.c b/lash.c
index bd69456..b3bdcc9 100644
--- a/lash.c
+++ b/lash.c
@@ -779,6 +779,24 @@
 	}
 }
 
+#if defined(BB_FEATURE_SH_SIMPLE_PROMPT)
+static char* setup_prompt_string(int state)
+{
+       char prompt_str[BUFSIZ];
+
+       /* Set up the prompt */
+       if (state == 0) {
+               /* simple prompt */
+               sprintf(prompt_str, "%s %s", cwd, ( geteuid() != 0 ) ?  "$ ":"# ");
+       } else {
+               strcpy(prompt_str,"> ");
+       }
+
+       return(strdup(prompt_str));  /* Must free this memory */
+}
+
+#else
+
 static char* setup_prompt_string(int state)
 {
 	char user[9],buf[255],*s;
@@ -810,6 +828,8 @@
 	return(strdup(prompt_str));  /* Must free this memory */
 }
 
+#endif 
+
 static int get_command(FILE * source, char *command)
 {
 	char *prompt_str;
diff --git a/sh.c b/sh.c
index bd69456..b3bdcc9 100644
--- a/sh.c
+++ b/sh.c
@@ -779,6 +779,24 @@
 	}
 }
 
+#if defined(BB_FEATURE_SH_SIMPLE_PROMPT)
+static char* setup_prompt_string(int state)
+{
+       char prompt_str[BUFSIZ];
+
+       /* Set up the prompt */
+       if (state == 0) {
+               /* simple prompt */
+               sprintf(prompt_str, "%s %s", cwd, ( geteuid() != 0 ) ?  "$ ":"# ");
+       } else {
+               strcpy(prompt_str,"> ");
+       }
+
+       return(strdup(prompt_str));  /* Must free this memory */
+}
+
+#else
+
 static char* setup_prompt_string(int state)
 {
 	char user[9],buf[255],*s;
@@ -810,6 +828,8 @@
 	return(strdup(prompt_str));  /* Must free this memory */
 }
 
+#endif 
+
 static int get_command(FILE * source, char *command)
 {
 	char *prompt_str;
diff --git a/shell/lash.c b/shell/lash.c
index bd69456..b3bdcc9 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -779,6 +779,24 @@
 	}
 }
 
+#if defined(BB_FEATURE_SH_SIMPLE_PROMPT)
+static char* setup_prompt_string(int state)
+{
+       char prompt_str[BUFSIZ];
+
+       /* Set up the prompt */
+       if (state == 0) {
+               /* simple prompt */
+               sprintf(prompt_str, "%s %s", cwd, ( geteuid() != 0 ) ?  "$ ":"# ");
+       } else {
+               strcpy(prompt_str,"> ");
+       }
+
+       return(strdup(prompt_str));  /* Must free this memory */
+}
+
+#else
+
 static char* setup_prompt_string(int state)
 {
 	char user[9],buf[255],*s;
@@ -810,6 +828,8 @@
 	return(strdup(prompt_str));  /* Must free this memory */
 }
 
+#endif 
+
 static int get_command(FILE * source, char *command)
 {
 	char *prompt_str;
