diff --git a/ChangeLog b/ChangeLog
index 44d1ef1c119189c7b421a5b1a7831c51f3568bc0..213019f6096f815db31251dd19ba666fab462182 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -141,6 +141,10 @@ CVS code -
   do_next_word()
 	- Rework to be more like do_prev_word(), to avoid a potential
 	  problem if we start at the end of a line. (DLR)
+  do_mouse()
+	- Avoid redundant screen updates by using edit_redraw() instead
+	  of edit_refresh(), and remove now-erroneous code that disables
+	  setting the mark while in view mode. (DLR)
   do_output()
 	- When adding a character, just add its length in bytes to
 	  current_x instead of calling do_right(), and set placewewant
diff --git a/src/nano.c b/src/nano.c
index d9e5d5ff385bd5cd78019a92c3d6a88199a74a58..41c2d1932bcdc82a264ed6e9849cc23011158f9b 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1728,8 +1728,9 @@ bool do_mouse(void)
 	    bool sameline;
 		/* Did they click on the line with the cursor?  If they
 		 * clicked on the cursor, we set the mark. */
-	    size_t xcur;
-		/* The character they clicked on. */
+	    const filestruct *current_save = openfile->current;
+	    size_t current_x_save = openfile->current_x;
+	    size_t pww_save = openfile->placewewant;
 
 	    /* Subtract out the size of topwin. */
 	    mouse_y -= 2 - no_more_space();
@@ -1744,25 +1745,19 @@ bool do_mouse(void)
 		openfile->current->prev != NULL; openfile->current_y--)
 		openfile->current = openfile->current->prev;
 
-	    xcur = actual_x(openfile->current->data,
+	    openfile->current_x = actual_x(openfile->current->data,
 		get_page_start(xplustabs()) + mouse_x);
+	    openfile->placewewant = xplustabs();
 
 #ifndef NANO_SMALL
 	    /* Clicking where the cursor is toggles the mark, as does
 	     * clicking beyond the line length with the cursor at the
 	     * end of the line. */
-	    if (sameline && xcur == openfile->current_x) {
-		if (ISSET(VIEW_MODE)) {
-		    print_view_warning();
-		    return retval;
-		}
+	    if (sameline && openfile->current_x == current_x_save)
 		do_mark();
-	    }
 #endif
 
-	    openfile->current_x = xcur;
-	    openfile->placewewant = xplustabs();
-	    edit_refresh();
+	    edit_redraw(current_save, pww_save);
 	}
     }