diff --git a/src/cut.c b/src/cut.c
index 43f87e2f7b85d6da0d536cccb71e54506753de92..b1b3fb586f869fd15135d6e2fbe0b738280a870f 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -291,8 +291,8 @@ void do_uncut_text(void)
     /* Mark the file as modified. */
     set_modified();
 
-    /* Update current_y to account for the inserted lines. */
-    place_the_cursor(TRUE);
+    /* Set the target row for the cursor in case it got pushed offscreen. */
+    openfile->current_y = editwinrows - 1;
 
     refresh_needed = TRUE;
 
diff --git a/src/files.c b/src/files.c
index bac0e1bf5918fd6c561c8a67948a9e021b850d50..d2a97182855d9d59ca19cfda5b9ac1ee6fbd837c 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1188,8 +1188,8 @@ void do_insertfile(void)
 			openfile->current_x != was_current_x)
 		    set_modified();
 
-		/* Update current_y to account for inserted lines. */
-		place_the_cursor(TRUE);
+		/* Set the target row for the cursor when pushed offscreen. */
+		openfile->current_y = editwinrows - 1;
 
 		refresh_needed = TRUE;
 	    }
diff --git a/src/winio.c b/src/winio.c
index eaf528cd7c8343bd30f87d4de37d345a50e5bbf8..dce6b252f7ca9e37406aad32ed7a4bbd95a9be36 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2803,10 +2803,6 @@ int go_back_chunks(int nrows, filestruct **line, size_t *leftedge)
 {
     int i;
 
-    /* Don't move more chunks than the window can hold. */
-    if (nrows > editwinrows - 1)
-	nrows = (editwinrows < 2) ? 1 : editwinrows - 1;
-
 #ifndef NANO_TINY
     if (ISSET(SOFTWRAP)) {
 	/* Recede through the requested number of chunks. */