diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 8aa8299e9185244418f34fe1f5e3273a5c95a3a7..5de02e686c6678014a9fe835129437576338067b 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Jan 13
+*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Jan 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,6 +30,9 @@ be worked on, but only if you sponsor Vim development.  See |sponsor|.
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+When the file "" exists, then ":!ls aap<Tab>" should put backslashes before
+'&', ';', '<' and '>'.
+
 Evaluating CTRL-R = in the sandbox causes trouble (G. Sumner Hayes).  Can the
 rules for the commandline window be used?
 
@@ -67,7 +70,6 @@ ccomplete:
     Can't reproduce it right now...
 
 spelling:
-- NL woordenlijst naar Adri sturen.
 - Include script to cleanup a .add file. (Antonio Colombo, Jan 9)
 - suggestions for "macARONI" doesn't include "macaroni", they are all allcap.
   suggestion for "KG" to "kg" when it's keepcase.
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 36345b4f2805eb167bcb7402e175f65c17ac6dac..00830d98dbc7260b21be0a61f90639778cb1ea72 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Jan 13
+*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Jan 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1558,4 +1558,12 @@ happens to be after the end of the line then it continued in the next line and
 stopped at the region end match, making the region continue after that.
 Now check for the column being past the end of the line in syn_add_end_off().
 
+When changing a file, setting 'swapfile' off and then on again, making another
+change and killing Vim, then some blocks may be missing from the swapfile.
+When 'swapfile' is switched back on mark all blocks in the swapfile as dirty.
+Added mf_set_dirty().
+
+Expanding wildcards in a command like ":e aap;<>!" didn't work.  Put
+backslashes before characters that are special to the shell. (Adri Verhoef)
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/src/eval.c b/src/eval.c
index 48235933171f2d24e942c38217c390a92b63a366..c18b42d0f3e1a863d9cecc574ab573b6bc388ccf 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -17667,7 +17667,18 @@ trans_function_name(pp, skip, flags, fdp)
     }
 
     if (lv.ll_exp_name != NULL)
+    {
 	len = STRLEN(lv.ll_exp_name);
+	if (lead <= 2 && lv.ll_name == lv.ll_exp_name
+					 && STRNCMP(lv.ll_name, "s:", 2) == 0)
+	{
+	    /* When there was "s:" already or the name expanded to get a
+	     * leading "s:" then remove it. */
+	    lv.ll_name += 2;
+	    len -= 2;
+	    lead = 2;
+	}
+    }
     else
     {
 	if (lead == 2)	/* skip over "s:" */
diff --git a/src/memfile.c b/src/memfile.c
index e1a6b603b9a125a96310fd88e5aca9fbca35e03e..bac84fed9419b8a9d62efd9be07f49ba2ccdb22c 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -700,6 +700,23 @@ mf_sync(mfp, flags)
     return status;
 }
 
+/*
+ * For all blocks in memory file *mfp that have a positive block number set
+ * the dirty flag.  These are blocks that need to be written to a newly
+ * created swapfile.
+ */
+    void
+mf_set_dirty(mfp)
+    memfile_T	*mfp;
+{
+    bhdr_T	*hp;
+
+    for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev)
+	if (hp->bh_bnum > 0)
+	    hp->bh_flags |= BH_DIRTY;
+    mfp->mf_dirty = TRUE;
+}
+
 /*
  * insert block *hp in front of hashlist of memfile *mfp
  */
diff --git a/src/memline.c b/src/memline.c
index 9abf15523465a2139fe0f1453b4269acdefa83f5..c87a955ad0bf3d80105f21498bc07c7f22202346 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -563,7 +563,13 @@ ml_open_file(buf)
 
 	    /* Flush block zero, so others can read it */
 	    if (mf_sync(mfp, MFS_ZERO) == OK)
+	    {
+		/* Mark all blocks that should be in the swapfile as dirty.
+		 * Needed for when the 'swapfile' option was reset, so that
+		 * the swap file was deleted, and then on again. */
+		mf_set_dirty(mfp);
 		break;
+	    }
 	    /* Writing block 0 failed: close the file and try another dir */
 	    mf_close_file(buf, FALSE);
 	}