diff --git a/ChangeLog b/ChangeLog
index 5261319a01d223b80221b3b0d507c7ca6861578d..1bf3c0e1066fcc8ac2a51e7011a5f54896563d5b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -238,6 +238,9 @@ CVS code -
 	- If the spell-checker printed any error messages onscreen, call
 	  total_refresh() to make sure they're cleared off. (DLR, found
 	  by CHAO Wei-Lun)
+  do_justify()
+	- Save placewewant, and restore it if we unjustify, in order to
+	  avoid a potential screen update problem. (DLR)
   do_output()
 	- Properly allow wrapping when we insert a tab, for consistency.
 	  (DLR)
diff --git a/src/nano.c b/src/nano.c
index a495221da0e5cddd8157cc1b8e924347a796e0b1..bf9930fa2886e57803083dd36226553efe79d1cd 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -3146,7 +3146,7 @@ void do_justify(bool full_justify)
 
     /* We save these global variables to be restored if the user
      * unjustifies.  Note that we don't need to save totlines. */
-    size_t current_x_save = current_x;
+    size_t current_x_save = current_x, pww_save = placewewant;
     int current_y_save = current_y;
     unsigned long flags_save = flags;
     size_t totsize_save = totsize;
@@ -3419,6 +3419,7 @@ void do_justify(bool full_justify)
 	/* Restore the justify we just did (ungrateful user!). */
 	current = current_save;
 	current_x = current_x_save;
+	placewewant = pww_save;
 	current_y = current_y_save;
 	edittop = edittop_save;