diff --git a/src/sbbs3/getstr.cpp b/src/sbbs3/getstr.cpp
index bcff9bc7de6e04ad096970b658b71156c713e083..944f07696a58008e566b297bc85a08b6f8feae56 100644
--- a/src/sbbs3/getstr.cpp
+++ b/src/sbbs3/getstr.cpp
@@ -35,6 +35,7 @@
  ****************************************************************************/
 
 #include "sbbs.h"
+#include "utf8.h"
 
 /****************************************************************************/
 /* Waits for remote or local user to input a CR terminated string. 'length' */
@@ -52,13 +53,14 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode, const str_list_t h
     uchar	ch;
 	uint	atr;
 	int		hidx = -1;
+	long	org_column = column;
 
 	long term = term_supports();
 	console&=~(CON_UPARROW|CON_DOWNARROW|CON_LEFTARROW|CON_BACKSPACE|CON_DELETELINE);
 	if(!(mode&K_WRAP))
 		console&=~CON_INSERT;
 	sys_status&=~SS_ABORT;
-	if(cols >= TERM_COLS_MIN
+	if(cols >= TERM_COLS_MIN && !(mode&K_NOECHO) && !(console&CON_R_ECHOX)
 		&& column + (long)maxlen >= cols)	/* Don't allow the terminal to auto line-wrap */
 		maxlen = cols-column-1;
 	if(mode&K_LINE && (term&(ANSI|PETSCII)) && !(mode&K_NOECHO)) {
@@ -85,7 +87,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode, const str_list_t h
 			i|=(cfg.color[clr_inputline]&0x77)>>4;
 			attr(i); 
 		}
-		column+=bputs(str1, P_AUTO_UTF8);
+		bputs(str1, P_AUTO_UTF8);
 		if(mode&K_EDIT && !(mode&(K_LINE|K_AUTODEL)))
 			cleartoeol();  /* destroy to eol */ 
 	}
@@ -364,7 +366,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode, const str_list_t h
 				break;
 			case CTRL_R:    /* Ctrl-R Redraw Line */
 				if(!(mode&K_NOECHO))
-					redrwstr(str1,i,l,0);
+					redrwstr(str1,i,l,K_GETSTR);
 				break;
 			case TERM_KEY_INSERT:	/* Ctrl-V			Toggles Insert/Overwrite */
 				if(mode&K_NOECHO)
@@ -600,7 +602,9 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode, const str_list_t h
 						if((term&UTF8) && (ch&0x80)) {
 							if(i>l)
 								l=i;
-							redrwstr(str1, i, l, P_UTF8);
+							str1[l]=0;
+							if(utf8_str_is_valid(str1))
+								redrwstr(str1, column - org_column, l, P_UTF8);
 						} else {
 							outchar(ch);
 						}