diff --git a/ChangeLog b/ChangeLog
index 85a40ab7c9e374223fa57cc41b1d8c1e9262e87b..3e76ba2931fda94b14c339186c247ee0c290e6ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,10 @@ CVS Code -
 	- Fix subexpression replacement to work consistently.
 	  Affects search.c:replace_regexp() and 
 	  utils.c:strstrwrapper() (David Benbennick).
+	- Fix cursor position being saved when escaping out 
+	  of nanogetstr with keys like ^Y and ^V.  New arg
+	  resetpos to nanogetstr(), added static int
+	  resetpos in statusq() (bug found by DLR).
 - cut.c:
   do_cut_text()
 	- Fix incorrect cursor location when cutting long lines
diff --git a/proto.h b/proto.h
index f981d98e93e6b01f2271374bd5c611366130a513..645e822604ec0940b912909772bd82814e9731cc 100644
--- a/proto.h
+++ b/proto.h
@@ -425,7 +425,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
 #ifndef DISABLE_TABCOMP
 		, int *list
 #endif
-		);
+		, int resetpos);
 void set_modified(void);
 void titlebar(const char *path);
 void bottombars(const shortcut *s);
diff --git a/winio.c b/winio.c
index 3ed476261580457a7c46e2ddcb6ba3559767763a..1f221bd9bdededc368c4a31fe0821e9f51b4d63a 100644
--- a/winio.c
+++ b/winio.c
@@ -194,7 +194,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
 #ifndef DISABLE_TABCOMP
 		, int *list
 #endif
-		)
+		, int resetpos)
 {
     int kbinput;
     static int x = -1;
@@ -218,7 +218,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
        it would be past the end of the string as it is.  Otherwise,
        leave it alone.  This is so the cursor position stays at the same
        place if a prompt-changing toggle is pressed. */
-    if (x == -1 || x > xend)
+    if (x == -1 || x > xend || resetpos)
 	x = xend;
 
     answer = (char *)nrealloc(answer, xend + 1);
@@ -1175,6 +1175,8 @@ int statusq(int tabs, const shortcut *s, const char *def,
 #ifndef DISABLE_TABCOMP
     int list = 0;
 #endif
+    static int resetpos = 0;	/* Do we need to scrap the cursor position 
+				   on the statusbar? */
 
     bottombars(s);
 
@@ -1191,18 +1193,22 @@ int statusq(int tabs, const shortcut *s, const char *def,
 #ifndef DISABLE_TABCOMP
 		, &list
 #endif
-		);
+		, resetpos);
     free(foo);
+    resetpos = 0;
 
     switch (ret) {
     case NANO_FIRSTLINE_KEY:
 	do_first_line();
+	resetpos = 1;
 	break;
     case NANO_LASTLINE_KEY:
 	do_last_line();
+	resetpos = 1;
 	break;
     case NANO_CANCEL_KEY:
 	ret = -1;
+	resetpos = 1;
 	break;
     default:
 	blank_statusbar();