diff --git a/controls/edit.c b/controls/edit.c
index 8e33a0b..cebb44c 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -207,7 +207,7 @@
 static INT	EDIT_EM_LineLength(WND *wnd, EDITSTATE *es, INT index);
 static BOOL	EDIT_EM_LineScroll(WND *wnd, EDITSTATE *es, INT dx, INT dy);
 static LRESULT	EDIT_EM_PosFromChar(WND *wnd, EDITSTATE *es, INT index, BOOL after_wrap);
-static void	EDIT_EM_ReplaceSel(WND *wnd, EDITSTATE *es, BOOL can_undo, LPCSTR lpsz_replace);
+static void	EDIT_EM_ReplaceSel(WND *wnd, EDITSTATE *es, BOOL can_undo, LPCSTR lpsz_replace, BOOL send_update);
 static LRESULT	EDIT_EM_Scroll(WND *wnd, EDITSTATE *es, INT action);
 static void	EDIT_EM_ScrollCaret(WND *wnd, EDITSTATE *es);
 static void	EDIT_EM_SetHandle(WND *wnd, EDITSTATE *es, HLOCAL hloc);
@@ -283,7 +283,7 @@
  */
 static inline void EDIT_WM_Clear(WND *wnd, EDITSTATE *es)
 {
-	EDIT_EM_ReplaceSel(wnd, es, TRUE, "");
+	EDIT_EM_ReplaceSel(wnd, es, TRUE, "", TRUE);
 
 	if (es->flags & EF_UPDATE) {
 		es->flags &= ~EF_UPDATE;
@@ -572,7 +572,7 @@
 		/* fall through */
 	case EM_REPLACESEL:
 		DPRINTF_EDIT_MSG32("EM_REPLACESEL");
-		EDIT_EM_ReplaceSel(wnd, es, (BOOL)wParam, (LPCSTR)lParam);
+		EDIT_EM_ReplaceSel(wnd, es, (BOOL)wParam, (LPCSTR)lParam, TRUE);
 		if (es->flags & EF_UPDATE) {
 			es->flags &= ~EF_UPDATE;
 			EDIT_NOTIFY_PARENT(wnd, EN_CHANGE, "EN_CHANGE");
@@ -2443,7 +2443,7 @@
  *	FIXME: handle ES_NUMBER and ES_OEMCONVERT here
  *
  */
-static void EDIT_EM_ReplaceSel(WND *wnd, EDITSTATE *es, BOOL can_undo, LPCSTR lpsz_replace)
+static void EDIT_EM_ReplaceSel(WND *wnd, EDITSTATE *es, BOOL can_undo, LPCSTR lpsz_replace, BOOL send_update)
 {
 	INT strl = strlen(lpsz_replace);
 	INT tl = strlen(es->text);
@@ -2533,7 +2533,7 @@
 
 	EDIT_EM_SetSel(wnd, es, s, s, FALSE);
 	es->flags |= EF_MODIFIED;
-	es->flags |= EF_UPDATE;
+	if (send_update) es->flags |= EF_UPDATE;
 	EDIT_EM_ScrollCaret(wnd, es);
 
 	/* FIXME: really inefficient */
@@ -2973,7 +2973,7 @@
 
 	EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
 	EDIT_EM_EmptyUndoBuffer(wnd, es);
-	EDIT_EM_ReplaceSel(wnd, es, TRUE, utext);
+	EDIT_EM_ReplaceSel(wnd, es, TRUE, utext, TRUE);
 	EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
 	HeapFree(es->heap, 0, utext);
 
@@ -3008,7 +3008,7 @@
 				EDIT_MoveHome(wnd, es, FALSE);
 				EDIT_MoveDown_ML(wnd, es, FALSE);
 			} else {
-				EDIT_EM_ReplaceSel(wnd, es, TRUE, "\r\n");
+				EDIT_EM_ReplaceSel(wnd, es, TRUE, "\r\n", TRUE);
 				if (es->flags & EF_UPDATE) {
 					es->flags &= ~EF_UPDATE;
 					EDIT_NOTIFY_PARENT(wnd, EN_CHANGE, "EN_CHANGE");
@@ -3019,7 +3019,7 @@
 	case '\t':
 		if ((es->style & ES_MULTILINE) && !(es->style & ES_READONLY))
 		{
-			EDIT_EM_ReplaceSel(wnd, es, TRUE, "\t");
+			EDIT_EM_ReplaceSel(wnd, es, TRUE, "\t", TRUE);
 			if (es->flags & EF_UPDATE) {
 				es->flags &= ~EF_UPDATE;
 				EDIT_NOTIFY_PARENT(wnd, EN_CHANGE, "EN_CHANGE");
@@ -3053,7 +3053,7 @@
 			char str[2];
  			str[0] = c;
  			str[1] = '\0';
- 			EDIT_EM_ReplaceSel(wnd, es, TRUE, str);
+ 			EDIT_EM_ReplaceSel(wnd, es, TRUE, str, TRUE);
 			if (es->flags & EF_UPDATE) {
 				es->flags &= ~EF_UPDATE;
 				EDIT_NOTIFY_PARENT(wnd, EN_CHANGE, "EN_CHANGE");
@@ -3187,7 +3187,7 @@
         EDIT_EM_EmptyUndoBuffer(wnd, es);
 
        if (cs->lpszName && *(cs->lpszName) != '\0') {
-	   EDIT_EM_ReplaceSel(wnd, es, FALSE, cs->lpszName);
+	   EDIT_EM_ReplaceSel(wnd, es, FALSE, cs->lpszName, TRUE);
 	   /* if we insert text to the editline, the text scrolls out
             * of the window, as the caret is placed after the insert
             * pos normally; thus we reset es->selection... to 0 and
@@ -3931,7 +3931,7 @@
 	OpenClipboard(wnd->hwndSelf);
 	if ((hsrc = GetClipboardData(CF_TEXT))) {
 		src = (LPSTR)GlobalLock(hsrc);
-		EDIT_EM_ReplaceSel(wnd, es, TRUE, src);
+		EDIT_EM_ReplaceSel(wnd, es, TRUE, src, TRUE);
 		GlobalUnlock(hsrc);
 
 		if (es->flags & EF_UPDATE) {
@@ -4027,17 +4027,12 @@
 	EDIT_EM_SetSel(wnd, es, 0, -1, FALSE);
 	if (text) {
 		TRACE("\t'%p'\n", text);
-		EDIT_EM_ReplaceSel(wnd, es, FALSE, text);
+		EDIT_EM_ReplaceSel(wnd, es, FALSE, text, !(es->style & ES_MULTILINE));
 	} else {
 		TRACE("\t<NULL>\n");
-		EDIT_EM_ReplaceSel(wnd, es, FALSE, "");
+		EDIT_EM_ReplaceSel(wnd, es, FALSE, "", !(es->style & ES_MULTILINE));
 	}
 	es->x_offset = 0;
-	if (es->style & ES_MULTILINE) {
-		es->flags &= ~EF_UPDATE;
-	} else {
-		es->flags |= EF_UPDATE;
-	}
 	es->flags &= ~EF_MODIFIED;
 	EDIT_EM_SetSel(wnd, es, 0, 0, FALSE);
 	EDIT_EM_ScrollCaret(wnd, es);
