diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index d6bd0eb..bc2fcb7 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2113,7 +2113,7 @@
     buf_T	*buf;
 
 #ifdef FEAT_CMDHIST
-    prepare_viminfo_history(forceit ? 9999 : 0);
+    prepare_viminfo_history(forceit ? 9999 : 0, writing);
 #endif
     eof = viminfo_readline(virp);
     while (!eof && virp->vir_line[0] != '>')
@@ -2161,7 +2161,7 @@
 	    case '=':
 	    case '@':
 #ifdef FEAT_CMDHIST
-		eof = read_viminfo_history(virp);
+		eof = read_viminfo_history(virp, writing);
 #else
 		eof = viminfo_readline(virp);
 #endif
@@ -2182,7 +2182,8 @@
 
 #ifdef FEAT_CMDHIST
     /* Finish reading history items. */
-    finish_viminfo_history();
+    if (!writing)
+	finish_viminfo_history();
 #endif
 
     /* Change file names to buffer numbers for fmarks. */
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 1faadd6..c16c1ab 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -68,7 +68,7 @@
 
 static int	hist_char2type __ARGS((int c));
 
-static int	in_history __ARGS((int, char_u *, int, int));
+static int	in_history __ARGS((int, char_u *, int, int, int));
 # ifdef FEAT_EVAL
 static int	calc_hist_idx __ARGS((int histype, int num));
 # endif
@@ -5397,11 +5397,12 @@
  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
  */
     static int
-in_history(type, str, move_to_front, sep)
+in_history(type, str, move_to_front, sep, writing)
     int	    type;
     char_u  *str;
     int	    move_to_front;	/* Move the entry to the front if it exists */
     int	    sep;
+    int	    writing;		/* ignore entries read from viminfo */
 {
     int	    i;
     int	    last_i = -1;
@@ -5419,6 +5420,7 @@
 	 * well. */
 	p = history[type][i].hisstr;
 	if (STRCMP(str, p) == 0
+		&& !(writing && history[type][i].viminfo)
 		&& (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
 	{
 	    if (!move_to_front)
@@ -5513,7 +5515,7 @@
 	}
 	last_maptick = -1;
     }
-    if (!in_history(histype, new_entry, TRUE, sep))
+    if (!in_history(histype, new_entry, TRUE, sep, FALSE))
     {
 	if (++hisidx[histype] == hislen)
 	    hisidx[histype] = 0;
@@ -6032,8 +6034,9 @@
  * This allocates history arrays to store the read history lines.
  */
     void
-prepare_viminfo_history(asklen)
+prepare_viminfo_history(asklen, writing)
     int	    asklen;
+    int	    writing;
 {
     int	    i;
     int	    num;
@@ -6041,7 +6044,7 @@
     int	    len;
 
     init_history();
-    viminfo_add_at_front = (asklen != 0);
+    viminfo_add_at_front = (asklen != 0 && !writing);
     if (asklen > hislen)
 	asklen = hislen;
 
@@ -6073,8 +6076,9 @@
  * new.
  */
     int
-read_viminfo_history(virp)
+read_viminfo_history(virp, writing)
     vir_T	*virp;
+    int		writing;
 {
     int		type;
     long_u	len;
@@ -6090,7 +6094,7 @@
 	    int sep = (*val == ' ' ? NUL : *val);
 
 	    if (!in_history(type, val + (type == HIST_SEARCH),
-						   viminfo_add_at_front, sep))
+					  viminfo_add_at_front, sep, writing))
 	    {
 		/* Need to re-allocate to append the separator byte. */
 		len = STRLEN(val);
@@ -6120,6 +6124,9 @@
     return viminfo_readline(virp);
 }
 
+/*
+ * Finish reading history lines from viminfo.  Not used when writing viminfo.
+ */
     void
 finish_viminfo_history()
 {
@@ -6216,7 +6223,7 @@
 		{
 		    p = round == 1 ? history[type][i].hisstr
 						   : viminfo_history[type][i];
-		    if (p != NULL)
+		    if (p != NULL && (round == 2 || !history[type][i].viminfo))
 		    {
 			--num_saved;
 			fputc(hist_type2char(type, TRUE), fp);
@@ -6245,6 +6252,10 @@
 		    }
 		}
 	}
+	for (i = 0; i < viminfo_hisidx[type]; ++i)
+	    vim_free(viminfo_history[type][i]);
+	vim_free(viminfo_history[type]);
+	viminfo_history[type] = NULL;
     }
 }
 #endif /* FEAT_VIMINFO */
diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro
index 26eb00d..9c2b5f6 100644
--- a/src/proto/ex_getln.pro
+++ b/src/proto/ex_getln.pro
@@ -48,8 +48,8 @@
 void remove_key_from_history __ARGS((void));
 int get_list_range __ARGS((char_u **str, int *num1, int *num2));
 void ex_history __ARGS((exarg_T *eap));
-void prepare_viminfo_history __ARGS((int asklen));
-int read_viminfo_history __ARGS((vir_T *virp));
+void prepare_viminfo_history __ARGS((int asklen, int writing));
+int read_viminfo_history __ARGS((vir_T *virp, int writing));
 void finish_viminfo_history __ARGS((void));
 void write_viminfo_history __ARGS((FILE *fp));
 void cmd_pchar __ARGS((int c, int offset));
diff --git a/src/version.c b/src/version.c
index 75cbcdb..8683cec 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    892,
+/**/
     891,
 /**/
     890,
