diff --git a/src/text.c b/src/text.c
index a5cdcbac5264c8f4edafcf971aad19227139b5e3..6a0678ae628a0bd9ee6ca51014f442fd0208c198 100644
--- a/src/text.c
+++ b/src/text.c
@@ -659,7 +659,7 @@ void handle_comment_action(undo *u, bool undoing, bool add_comment)
 void undo_cut(undo *u)
 {
 	/* Get to where we need to uncut from. */
-	if (u->xflags == WAS_WHOLE_LINE)
+	if (u->xflags & WAS_WHOLE_LINE)
 		goto_line_posx(u->mark_begin_lineno, 0);
 	else
 		goto_line_posx(u->mark_begin_lineno, u->mark_begin_x);
@@ -670,7 +670,7 @@ void undo_cut(undo *u)
 
 	copy_from_buffer(u->cutbuffer);
 
-	if (u->xflags != WAS_MARKED_FORWARD && u->type != PASTE)
+	if (!(u->xflags & WAS_MARKED_FORWARD) && u->type != PASTE)
 		goto_line_posx(u->mark_begin_lineno, u->mark_begin_x);
 }
 
@@ -689,7 +689,7 @@ void redo_cut(undo *u)
 	cutbottom = NULL;
 
 	openfile->mark = fsfromline(u->mark_begin_lineno);
-	openfile->mark_x = (u->xflags == WAS_WHOLE_LINE) ? 0 : u->mark_begin_x;
+	openfile->mark_x = (u->xflags & WAS_WHOLE_LINE) ? 0 : u->mark_begin_x;
 
 	do_cut_text(FALSE, TRUE, FALSE, u->type == ZAP);
 
@@ -724,7 +724,7 @@ void do_undo(void)
 		/* TRANSLATORS: The next thirteen strings describe actions
 		 * that are undone or redone.  They are all nouns, not verbs. */
 		undidmsg = _("text add");
-		if (u->xflags == WAS_FINAL_LINE && !ISSET(NO_NEWLINES))
+		if ((u->xflags & WAS_FINAL_LINE) && !ISSET(NO_NEWLINES))
 			remove_magicline();
 		data = charalloc(strlen(f->data) - strlen(u->strdata) + 1);
 		strncpy(data, f->data, u->begin);
@@ -764,7 +764,7 @@ void do_undo(void)
 		/* When the join was done by a Backspace at the tail of the file,
 		 * and the nonewlines flag isn't set, do not re-add a newline that
 		 * wasn't actually deleted; just position the cursor. */
-		if (u->xflags == WAS_FINAL_BACKSPACE && !ISSET(NO_NEWLINES)) {
+		if ((u->xflags & WAS_FINAL_BACKSPACE) && !ISSET(NO_NEWLINES)) {
 			goto_line_posx(openfile->filebot->lineno, 0);
 			break;
 		}
@@ -906,7 +906,7 @@ void do_redo(void)
 	switch (u->type) {
 	case ADD:
 		redidmsg = _("text add");
-		if (u->xflags == WAS_FINAL_LINE && !ISSET(NO_NEWLINES))
+		if ((u->xflags & WAS_FINAL_LINE) && !ISSET(NO_NEWLINES))
 			new_magicline();
 		data = charalloc(strlen(f->data) + strlen(u->strdata) + 1);
 		strncpy(data, f->data, u->begin);
@@ -947,7 +947,7 @@ void do_redo(void)
 		/* When the join was done by a Backspace at the tail of the file,
 		 * and the nonewlines flag isn't set, do not join anything, as
 		 * nothing was actually deleted; just position the cursor. */
-		if (u->xflags == WAS_FINAL_BACKSPACE && !ISSET(NO_NEWLINES)) {
+		if ((u->xflags & WAS_FINAL_BACKSPACE) && !ISSET(NO_NEWLINES)) {
 			goto_line_posx(u->mark_begin_lineno, u->mark_begin_x);
 			break;
 		}
@@ -1369,7 +1369,7 @@ void add_undo(undo_type action)
 	case ADD:
 		/* If a new magic line will be added, an undo should remove it. */
 		if (openfile->current == openfile->filebot)
-			u->xflags = WAS_FINAL_LINE;
+			u->xflags |= WAS_FINAL_LINE;
 		u->wassize--;
 		break;
 	case ENTER:
@@ -1379,7 +1379,7 @@ void add_undo(undo_type action)
 		 * backspace, as it won't actually have deleted anything. */
 		if (openfile->current->next == openfile->filebot &&
 						openfile->current->data[0] != '\0')
-			u->xflags = WAS_FINAL_BACKSPACE;
+			u->xflags |= WAS_FINAL_BACKSPACE;
 	case DEL:
 		/* When not at the end of a line, store the deleted character,
 		 * else purposely fall into the line-joining code. */
@@ -1420,11 +1420,11 @@ void add_undo(undo_type action)
 		if (openfile->mark) {
 			u->mark_begin_lineno = openfile->mark->lineno;
 			u->mark_begin_x = openfile->mark_x;
-			u->xflags = MARK_WAS_SET;
+			u->xflags |= MARK_WAS_SET;
 		} else if (!ISSET(CUT_FROM_CURSOR)) {
 			/* The entire line is being cut regardless of the cursor position. */
 			u->begin = 0;
-			u->xflags = WAS_WHOLE_LINE;
+			u->xflags |= WAS_WHOLE_LINE;
 		}
 		break;
 	case PASTE:
@@ -1553,7 +1553,7 @@ void update_undo(undo_type action)
 			free_filestruct(u->cutbuffer);
 			u->cutbuffer = copy_filestruct(cutbuffer);
 		}
-		if (u->xflags == MARK_WAS_SET) {
+		if (u->xflags & MARK_WAS_SET) {
 			/* If the "marking" operation was from right-->left or
 			 * bottom-->top, then swap the mark points. */
 			if ((u->lineno == u->mark_begin_lineno && u->begin < u->mark_begin_x)
@@ -1567,7 +1567,7 @@ void update_undo(undo_type action)
 				u->lineno = u->mark_begin_lineno;
 				u->mark_begin_lineno = line;
 			} else
-				u->xflags = WAS_MARKED_FORWARD;
+				u->xflags |= WAS_MARKED_FORWARD;
 		} else {
 			/* Compute the end of the cut for the undo, using our copy. */
 			u->cutbottom = u->cutbuffer;