diff --git a/src/move.c b/src/move.c
index c98f3043025c7558ef6fc0d3a8100ee61fc5a756..09ce649c197dc549f3bb140963454830165415e9 100644
--- a/src/move.c
+++ b/src/move.c
@@ -65,7 +65,12 @@ void do_page_up(void)
 
 #ifndef NANO_TINY
     if (ISSET(SOFTWRAP)) {
-	leftedge = (openfile->placewewant / editwincols) * editwincols;
+	size_t realspan = strlenpt(openfile->current->data);
+
+	if (openfile->placewewant < realspan)
+	    realspan = openfile->placewewant;
+
+	leftedge = (realspan / editwincols) * editwincols;
 	target_column = openfile->placewewant % editwincols;
     } else
 #endif
@@ -103,7 +108,12 @@ void do_page_down(void)
 
 #ifndef NANO_TINY
     if (ISSET(SOFTWRAP)) {
-	leftedge = (openfile->placewewant / editwincols) * editwincols;
+	size_t realspan = strlenpt(openfile->current->data);
+
+	if (openfile->placewewant < realspan)
+	    realspan = openfile->placewewant;
+
+	leftedge = (realspan / editwincols) * editwincols;
 	target_column = openfile->placewewant % editwincols;
     } else
 #endif