diff --git a/src/sbbs3/getstr.cpp b/src/sbbs3/getstr.cpp
index 3751c667ccf30a64de3e114cc1f440dbcc0201cb..a19a27f617ae24705a26685221adc1f70c075a30 100644
--- a/src/sbbs3/getstr.cpp
+++ b/src/sbbs3/getstr.cpp
@@ -53,7 +53,9 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
     uchar	ch;
 	uchar	atr;
 
-	console&=~(CON_UPARROW|CON_DOWNARROW|CON_LEFTARROW|CON_BACKSPACE);
+	console&=~(CON_UPARROW|CON_DOWNARROW|CON_LEFTARROW|CON_BACKSPACE|CON_DELETELINE);
+	if(!(mode&K_WRAP))
+		console&=~CON_INSERT;
 	sys_status&=~SS_ABORT;
 	if(mode&K_LINE && useron.misc&ANSI && !(mode&K_NOECHO)) {
 		attr(cfg.color[clr_inputline]);
@@ -117,9 +119,12 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
 		}
 	}
 
+	if(console&CON_INSERT && useron.misc&ANSI && !(mode&K_NOECHO))
+		insert_indicator();
+
 	while(!(sys_status&SS_ABORT) && online && input_thread_running) {
 		if(mode&K_LEFTEXIT
-			&& console&(CON_UPARROW|CON_LEFTARROW|CON_BACKSPACE))
+			&& console&(CON_UPARROW|CON_LEFTARROW|CON_BACKSPACE|CON_DELETELINE))
 			break;
 		if((ch=getkey(mode|K_GETSTR))==CR)
 			break;
@@ -344,16 +349,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
 				if(!(useron.misc&ANSI) || mode&K_NOECHO)
 					break;
 				console^=CON_INSERT;
-				ANSI_SAVE();
-				GOTOXY(80,1);
-				z=curatr;                       /* and go to EOL */
-				attr(BLINK|HIGH|LIGHTGRAY);
-				if(console&CON_INSERT)
-					outchar('�');
-				else
-					outchar(' ');
-				attr(z);
-				ANSI_RESTORE();
+				insert_indicator();
 				break;
 			case CTRL_W:    /* Ctrl-W   Delete word left */
 				if(i<l) {
@@ -419,7 +415,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
 					}
 				}
 				i=0;
-				console|=CON_BACKSPACE;
+				console|=CON_DELETELINE;
 				break;
 			case CTRL_Z:	/* Undo */
 				SAFECOPY(str1,undo);
@@ -635,3 +631,19 @@ long sbbs_t::getnum(ulong max)
 	}
 	return(0);
 }
+
+void sbbs_t::insert_indicator(void)
+{
+	ANSI_SAVE();
+	GOTOXY(80,1);
+	uchar z=curatr;                       /* and go to EOL */
+	if(console&CON_INSERT) {
+		attr(BLINK|BLACK|(LIGHTGRAY<<4));
+		outchar('I');
+	} else {
+		attr(LIGHTGRAY);
+		outchar(' ');
+	}
+	attr(z);
+	ANSI_RESTORE();
+}
\ No newline at end of file
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index d6f22e47e0eac36a6d23195dcaf9185fa125344c..1bee9ed1c46959c0293fa88cd4a5b3a4568a396e 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -475,6 +475,7 @@ public:
 	size_t	getstr_offset;
 	size_t	getstr(char *str, size_t length, long mode);
 	long	getnum(ulong max);
+	void	insert_indicator(void);
 
 	/* getkey.cpp */
 	char	getkey(long mode); 		/* Waits for a key hit local or remote  */
diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index 9972370ade19488c85d10aba0db6218d9d65a208..20ccf9f98e84adbcabba6a638942b8b3a4b7415d 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -464,6 +464,7 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define CON_BACKSPACE	(1<<14)	/* Backspace hit, exiting from getstr()		*/
 #define CON_LEFTARROW	(1<<15)	/* Left arrow hit, exiting from getstr()	*/
 #define CON_INSERT		(1<<16)	/* Insert mode, for getstr()				*/
+#define CON_DELETELINE	(1<<17)	/* Deleted line, exiting from getstr()		*/
 																			
 							/* Number of milliseconds						*/
 #define DELAY_HANGUP 250    /* Delay before modem drops carrier				*/