diff --git a/runtime/autoload/filetype.vim b/runtime/autoload/dist/ft.vim
similarity index 92%
rename from runtime/autoload/filetype.vim
rename to runtime/autoload/dist/ft.vim
index 66e64b2..2603c68 100644
--- a/runtime/autoload/filetype.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -1,7 +1,7 @@
 " Vim functions for file type detection
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 Nov 09
+" Last Change:	2017 Nov 11
 
 " These functions are moved here from runtime/filetype.vim to make startup
 " faster.
@@ -10,7 +10,7 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-func filetype#Check_inp()
+func dist#ft#Check_inp()
   if getline(1) =~ '^\*'
     setf abaqus
   else
@@ -32,14 +32,14 @@
 
 " This function checks for the kind of assembly that is wanted by the user, or
 " can be detected from the first five lines of the file.
-func filetype#FTasm()
+func dist#ft#FTasm()
   " make sure b:asmsyntax exists
   if !exists("b:asmsyntax")
     let b:asmsyntax = ""
   endif
 
   if b:asmsyntax == ""
-    call filetype#FTasmsyntax()
+    call dist#ft#FTasmsyntax()
   endif
 
   " if b:asmsyntax still isn't set, default to asmsyntax or GNU
@@ -54,7 +54,7 @@
   exe "setf " . fnameescape(b:asmsyntax)
 endfunc
 
-func filetype#FTasmsyntax()
+func dist#ft#FTasmsyntax()
   " see if file contains any asmsyntax=foo overrides. If so, change
   " b:asmsyntax appropriately
   let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
@@ -69,7 +69,7 @@
 
 " Check if one of the first five lines contains "VB_Name".  In that case it is
 " probably a Visual Basic file.  Otherwise it's assumed to be "alt" filetype.
-func filetype#FTVB(alt)
+func dist#ft#FTVB(alt)
   if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
     setf vb
   else
@@ -77,7 +77,7 @@
   endif
 endfunc
 
-func filetype#FTbtm()
+func dist#ft#FTbtm()
   if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
     setf dosbatch
   else
@@ -85,7 +85,7 @@
   endif
 endfunc
 
-func filetype#BindzoneCheck(default)
+func dist#ft#BindzoneCheck(default)
   if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
     setf bindzone
   elseif a:default != ''
@@ -93,7 +93,7 @@
   endif
 endfunc
 
-func filetype#FTlpc()
+func dist#ft#FTlpc()
   if exists("g:lpc_syntax_for_c")
     let lnum = 1
     while lnum <= 12
@@ -107,7 +107,7 @@
   setf c
 endfunc
 
-func filetype#FTheader()
+func dist#ft#FTheader()
   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
     if exists("g:c_syntax_for_h")
       setf objc
@@ -128,7 +128,7 @@
 " If the first line starts with # or ! it's probably a ch file.
 " If a line has "main", "include", "//" ir "/*" it's probably ch.
 " Otherwise CHILL is assumed.
-func filetype#FTchange()
+func dist#ft#FTchange()
   let lnum = 1
   while lnum <= 10
     if getline(lnum)[0] == '@'
@@ -152,7 +152,7 @@
   setf chill
 endfunc
 
-func filetype#FTent()
+func dist#ft#FTent()
   " This function checks for valid cl syntax in the first five lines.
   " Look for either an opening comment, '#', or a block start, '{".
   " If not found, assume SGML.
@@ -172,7 +172,7 @@
   setf dtd
 endfunc
 
-func filetype#EuphoriaCheck()
+func dist#ft#EuphoriaCheck()
   if exists('g:filetype_euphoria')
     exe 'setf ' . g:filetype_euphoria
   else
@@ -180,7 +180,7 @@
   endif
 endfunc
 
-func filetype#DtraceCheck()
+func dist#ft#DtraceCheck()
   let lines = getline(1, min([line("$"), 100]))
   if match(lines, '^module\>\|^import\>') > -1
     " D files often start with a module and/or import statement.
@@ -192,7 +192,7 @@
   endif
 endfunc
 
-func filetype#FTe()
+func dist#ft#FTe()
   if exists('g:filetype_euphoria')
     exe 'setf ' . g:filetype_euphoria
   else
@@ -209,7 +209,7 @@
 endfunc
 
 " Distinguish between HTML, XHTML and Django
-func filetype#FThtml()
+func dist#ft#FThtml()
   let n = 1
   while n < 10 && n < line("$")
     if getline(n) =~ '\<DTD\s\+XHTML\s'
@@ -226,7 +226,7 @@
 endfunc
 
 " Distinguish between standard IDL and MS-IDL
-func filetype#FTidl()
+func dist#ft#FTidl()
   let n = 1
   while n < 50 && n < line("$")
     if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
@@ -239,7 +239,7 @@
 endfunc
 
 " Distinguish between "default" and Cproto prototype file. */
-func filetype#ProtoCheck(default)
+func dist#ft#ProtoCheck(default)
   " Cproto files have a comment in the first line and a function prototype in
   " the second line, it always ends in ";".  Indent files may also have
   " comments, thus we can't match comments to see the difference.
@@ -252,7 +252,7 @@
   endif
 endfunc
 
-func filetype#FTm()
+func dist#ft#FTm()
   let n = 1
   let saw_comment = 0 " Whether we've seen a multiline comment leader.
   while n < 100
@@ -296,7 +296,7 @@
   endif
 endfunc
 
-func filetype#FTmms()
+func dist#ft#FTmms()
   let n = 1
   while n < 10
     let line = getline(n)
@@ -315,7 +315,7 @@
 
 " This function checks if one of the first five lines start with a dot.  In
 " that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-func filetype#FTnroff()
+func dist#ft#FTnroff()
   if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
     setf nroff
     return 1
@@ -323,7 +323,7 @@
   return 0
 endfunc
 
-func filetype#FTmm()
+func dist#ft#FTmm()
   let n = 1
   while n < 10
     let line = getline(n)
@@ -336,7 +336,7 @@
   setf nroff
 endfunc
 
-func filetype#FTpl()
+func dist#ft#FTpl()
   if exists("g:filetype_pl")
     exe "setf " . g:filetype_pl
   else
@@ -351,7 +351,7 @@
   endif
 endfunc
 
-func filetype#FTinc()
+func dist#ft#FTinc()
   if exists("g:filetype_inc")
     exe "setf " . g:filetype_inc
   else
@@ -363,7 +363,7 @@
     elseif lines =~ "<?"
       setf php
     else
-      call filetype#FTasmsyntax()
+      call dist#ft#FTasmsyntax()
       if exists("b:asmsyntax")
 	exe "setf " . fnameescape(b:asmsyntax)
       else
@@ -373,7 +373,7 @@
   endif
 endfunc
 
-func filetype#FTprogress_cweb()
+func dist#ft#FTprogress_cweb()
   if exists("g:filetype_w")
     exe "setf " . g:filetype_w
     return
@@ -385,7 +385,7 @@
   endif
 endfunc
 
-func filetype#FTprogress_asm()
+func dist#ft#FTprogress_asm()
   if exists("g:filetype_i")
     exe "setf " . g:filetype_i
     return
@@ -396,7 +396,7 @@
   while lnum <= 10 && lnum < line('$')
     let line = getline(lnum)
     if line =~ '^\s*;' || line =~ '^\*'
-      call filetype#FTasm()
+      call dist#ft#FTasm()
       return
     elseif line !~ '^\s*$' || line =~ '^/\*'
       " Not an empty line: Doesn't look like valid assembly code.
@@ -408,7 +408,7 @@
   setf progress
 endfunc
 
-func filetype#FTprogress_pascal()
+func dist#ft#FTprogress_pascal()
   if exists("g:filetype_p")
     exe "setf " . g:filetype_p
     return
@@ -433,7 +433,7 @@
   setf progress
 endfunc
 
-func filetype#FTr()
+func dist#ft#FTr()
   let max = line("$") > 50 ? 50 : line("$")
 
   for n in range(1, max)
@@ -466,7 +466,7 @@
   endif
 endfunc
 
-func filetype#McSetf()
+func dist#ft#McSetf()
   " Rely on the file to start with a comment.
   " MS message text files use ';', Sendmail files use '#' or 'dnl'
   for lnum in range(1, min([line("$"), 20]))
@@ -483,21 +483,21 @@
 endfunc
 
 " Called from filetype.vim and scripts.vim.
-func filetype#SetFileTypeSH(name)
+func dist#ft#SetFileTypeSH(name)
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
   if a:name =~ '\<csh\>'
     " Some .sh scripts contain #!/bin/csh.
-    call filetype#SetFileTypeShell("csh")
+    call dist#ft#SetFileTypeShell("csh")
     return
   elseif a:name =~ '\<tcsh\>'
     " Some .sh scripts contain #!/bin/tcsh.
-    call filetype#SetFileTypeShell("tcsh")
+    call dist#ft#SetFileTypeShell("tcsh")
     return
   elseif a:name =~ '\<zsh\>'
     " Some .sh scripts contain #!/bin/zsh.
-    call filetype#SetFileTypeShell("zsh")
+    call dist#ft#SetFileTypeShell("zsh")
     return
   elseif a:name =~ '\<ksh\>'
     let b:is_kornshell = 1
@@ -524,13 +524,13 @@
       unlet b:is_bash
     endif
   endif
-  call filetype#SetFileTypeShell("sh")
+  call dist#ft#SetFileTypeShell("sh")
 endfunc
 
 " For shell-like file types, check for an "exec" command hidden in a comment,
 " as used for Tcl.
 " Also called from scripts.vim, thus can't be local to this script.
-func filetype#SetFileTypeShell(name)
+func dist#ft#SetFileTypeShell(name)
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
@@ -550,18 +550,18 @@
   exe "setf " . a:name
 endfunc
 
-func filetype#CSH()
+func dist#ft#CSH()
   if exists("g:filetype_csh")
-    call filetype#SetFileTypeShell(g:filetype_csh)
+    call dist#ft#SetFileTypeShell(g:filetype_csh)
   elseif &shell =~ "tcsh"
-    call filetype#SetFileTypeShell("tcsh")
+    call dist#ft#SetFileTypeShell("tcsh")
   else
-    call filetype#SetFileTypeShell("csh")
+    call dist#ft#SetFileTypeShell("csh")
   endif
 endfunc
 
 let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
-func filetype#FTRules()
+func dist#ft#FTRules()
   let path = expand('<amatch>:p')
   if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
     setf udevrules
@@ -594,7 +594,7 @@
   setf hog
 endfunc
 
-func filetype#SQL()
+func dist#ft#SQL()
   if exists("g:filetype_sql")
     exe "setf " . g:filetype_sql
   else
@@ -608,7 +608,7 @@
 " file.
 " (Slow test) If a file contains a 'use' statement then it is almost certainly
 " a Perl file.
-func filetype#FTperl()
+func dist#ft#FTperl()
   let dirname = expand("%:p:h:t")
   if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
     setf perl
@@ -629,7 +629,7 @@
 " 1. Check the first line of the file for "%&<format>".
 " 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
 " 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
-func filetype#FTtex()
+func dist#ft#FTtex()
   let firstline = getline(1)
   if firstline =~ '^%&\s*\a\+'
     let format = tolower(matchstr(firstline, '\a\+'))
@@ -681,7 +681,7 @@
   return
 endfunc
 
-func filetype#FTxml()
+func dist#ft#FTxml()
   let n = 1
   while n < 100 && n < line("$")
     let line = getline(n)
@@ -707,7 +707,7 @@
   setf xml
 endfunc
 
-func filetype#FTy()
+func dist#ft#FTy()
   let n = 1
   while n < 100 && n < line("$")
     let line = getline(n)
@@ -724,7 +724,7 @@
   setf yacc
 endfunc
 
-func filetype#Redif()
+func dist#ft#Redif()
   let lnum = 1
   while lnum <= 5 && lnum < line('$')
     if getline(lnum) =~ "^\ctemplate-type:"
