diff --git a/ChangeLog b/ChangeLog
index 1fbba0910fc3f2f6fd8764457c3ebee5e96830fc..ccac3105b3514b8c6857d9e6c696b92c4823b8f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -70,9 +70,11 @@ CVS code -
 	  do_cursorpos(). (DLR)
 	- Change the NANO_WIDE #define to ENABLE_UTF8, as the latter is
 	  clearer. (DLR)
-	- Make sure that the current position in the history list is
-	  properly set to the bottom if we cancel out of the prompt.
-	  New function history_reset(); changes to nanogetstr(). (DLR)
+	- Minor history code fixes: Make sure that the current position
+	  in the history list is properly set to the bottom if we cancel
+	  out of the prompt, and that magichistory is properly updated
+	  when we change it and then move up.  New function
+	  history_reset(); changes to nanogetstr(). (DLR)
 - chars.c:
   mbstrchr()
 	- Don't count matches between valid and invalid multibyte
diff --git a/src/winio.c b/src/winio.c
index d9f9c574580753c352b8fde5408f1a817a99e5c2..a9c6583535d058165aebb5c0e9f207a530ba3872 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2576,12 +2576,12 @@ int nanogetstr(bool allow_tabs, const char *buf, const char *curranswer,
 #ifndef NANO_SMALL
 		if (history_list != NULL) {
 		    /* If we're scrolling up at the bottom of the
-		     * history list, answer isn't blank, and
-		     * magichistory isn't set, save answer in
-		     * magichistory. */
+		     * history list and answer isn't blank, save answer
+		     * in magichistory. */
 		    if ((*history_list)->next == NULL &&
-			answer[0] != '\0' && magichistory == NULL)
-			magichistory = mallocstrcpy(NULL, answer);
+			answer[0] != '\0')
+			magichistory = mallocstrcpy(magichistory,
+				answer);
 
 		    /* Get the older search from the history list and
 		     * save it in answer.  If there is no older search,