diff --git a/runtime/autoload/spellfile.vim b/runtime/autoload/spellfile.vim
new file mode 100644
index 0000000..387f189
--- /dev/null
+++ b/runtime/autoload/spellfile.vim
@@ -0,0 +1,111 @@
+" Vim script to download a missing spell file
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2006 Feb 01
+
+if !exists('g:spellfile_URL')
+  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
+endif
+let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
+
+" This function is used for the spellfile plugin.
+function! spellfile#LoadFile(lang)
+  " If the netrw plugin isn't loaded we silently skip everything.
+  if !exists(":Nread")
+    if &verbose
+      echomsg 'spellfile#LoadFile(): Nread command is not available.'
+    endif
+    return
+  endif
+
+  " If the URL changes we try all files again.
+  if s:spellfile_URL != g:spellfile_URL
+    let s:donedict = {}
+    let s:spellfile_URL = g:spellfile_URL
+  endif
+
+  " I will say this only once!
+  if has_key(s:donedict, a:lang . &enc)
+    if &verbose
+      echomsg 'spellfile#LoadFile(): Tried this language/encoding before.'
+    endif
+    return
+  endif
+  let s:donedict[a:lang . &enc] = 1
+
+  " Find spell directories we can write in.
+  let dirlist = []
+  let dirchoices = '&Cancel'
+  for dir in split(globpath(&rtp, 'spell'), "\n")
+    if filewritable(dir) == 2
+      call add(dirlist, dir)
+      let dirchoices .= "\n&" . len(dirlist)
+    endif
+  endfor
+  if len(dirlist) == 0
+    if &verbose
+      echomsg 'spellfile#LoadFile(): There is no writable spell directory.'
+    endif
+    return
+  endif
+
+  let msg = 'Cannot find spell file for "' . a:lang . '" in ' . &enc
+  let msg .= "\nDo you want me to try downloading it?"
+  if confirm(msg, "&Yes\n&No", 2) == 1
+    let enc = &encoding
+    if enc == 'iso-8859-15'
+      let enc = 'latin1'
+    endif
+    let fname = a:lang . '.' . enc . '.spl'
+
+    " Split the window, read the file into a new buffer.
+    new
+    setlocal bin
+    echo 'Downloading ' . fname . '...'
+    exe 'Nread ' g:spellfile_URL . '/' . fname
+    if getline(2) !~ 'VIMspell'
+      " Didn't work, perhaps there is an ASCII one.
+      g/^/d
+      let fname = a:lang . '.ascii.spl'
+      echo 'Could not find it, trying ' . fname . '...'
+      exe 'Nread ' g:spellfile_URL . '/' . fname
+      if getline(2) !~ 'VIMspell'
+	echo 'Sorry, downloading failed'
+	bwipe!
+	return
+      endif
+    endif
+
+    " Delete the empty first line and mark the file unmodified.
+    1d
+    set nomod
+
+    let msg = "In which directory do you want to write the file:"
+    for i in range(len(dirlist))
+      let msg .= "\n" . (i + 1) . '. ' . dirlist[i]
+    endfor
+    let dirchoice = confirm(msg, dirchoices) - 2
+    if dirchoice >= 0
+      exe "write " . escape(dirlist[dirchoice], ' ') . '/' . fname
+
+      " Also download the .sug file, if the user wants to.
+      let msg = "Do you want me to try getting the .sug file?\n"
+      let msg .= "This will improve making suggestions for spelling mistakes,\n"
+      let msg .= "but it uses quite a bit of memory."
+      if confirm(msg, "&No\n&Yes") == 2
+	g/^/d
+	let fname = substitute(fname, '\.spl$', '.sug', '')
+	echo 'Downloading ' . fname . '...'
+	exe 'Nread ' g:spellfile_URL . '/' . fname
+	if getline(2) !~ 'VIMsug'
+	  echo 'Sorry, downloading failed'
+	else
+	  1d
+	  exe "write " . escape(dirlist[dirchoice], ' ') . '/' . fname
+	endif
+	set nomod
+      endif
+    endif
+
+    bwipe
+  endif
+endfunc
