diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim
new file mode 100644
index 0000000..4899020
--- /dev/null
+++ b/runtime/ftplugin/erlang.vim
@@ -0,0 +1,150 @@
+" Vim ftplugin file
+" Language:     Erlang
+" Author:       Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+"               Eduardo Lopez (http://github.com/tapichu)
+" License:      Vim license
+" Version:      2011/11/21
+
+if exists('b:did_ftplugin')
+	finish
+else
+	let b:did_ftplugin = 1
+endif
+
+if exists('s:did_function_definitions')
+	call s:SetErlangOptions()
+	finish
+else
+	let s:did_function_definitions = 1
+endif
+
+if !exists('g:erlang_keywordprg')
+	let g:erlang_keywordprg = 'erl -man'
+endif
+
+if !exists('g:erlang_folding')
+	let g:erlang_folding = 0
+endif
+
+" Local settings
+function s:SetErlangOptions()
+	compiler erlang
+	if version >= 700
+		setlocal omnifunc=erlang_complete#Complete
+	endif
+
+	if g:erlang_folding
+		setlocal foldmethod=expr
+		setlocal foldexpr=GetErlangFold(v:lnum)
+		setlocal foldtext=ErlangFoldText()
+	endif
+
+	setlocal comments=:%%%,:%%,:%
+	setlocal commentstring=%%s
+
+	setlocal formatoptions+=ro
+	let &l:keywordprg = g:erlang_keywordprg
+endfunction
+
+" Define folding functions
+if !exists('*GetErlangFold')
+	" Folding params
+	let s:erlang_fun_begin  = '^\a\w*(.*$'
+	let s:erlang_fun_end    = '^[^%]*\.\s*\(%.*\)\?$'
+	let s:erlang_blank_line = '^\s*\(%.*\)\?$'
+
+	" Auxiliary fold functions
+	function s:GetNextNonBlank(lnum)
+		let lnum = nextnonblank(a:lnum + 1)
+		let line = getline(lnum)
+		while line =~ s:erlang_blank_line && 0 != lnum
+			let lnum = nextnonblank(lnum + 1)
+			let line = getline(lnum)
+		endwhile
+		return lnum
+	endfunction
+
+	function s:GetFunName(str)
+		return matchstr(a:str, '^\a\w*(\@=')
+	endfunction
+
+	function s:GetFunArgs(str, lnum)
+		let str = a:str
+		let lnum = a:lnum
+		while str !~ '->\s*\(%.*\)\?$'
+			let lnum = s:GetNextNonBlank(lnum)
+			if 0 == lnum " EOF
+				return ''
+			endif
+			let str .= getline(lnum)
+		endwhile
+		return matchstr(str, 
+			\ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
+	endfunction
+
+	function s:CountFunArgs(arguments)
+		let pos = 0
+		let ac = 0 " arg count
+		let arguments = a:arguments
+		
+		" Change list / tuples into just one A(rgument)
+		let erlang_tuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
+		let erlang_list  = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
+
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_tuple
+			let arguments = substitute(arguments, erlang_tuple, 'A', 'g')
+		endwhile
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_list
+			let arguments = substitute(arguments, erlang_list, 'A', 'g')
+		endwhile
+		
+		let len = strlen(arguments)
+		while pos < len && pos > -1
+			let ac += 1
+			let pos = matchend(arguments, ',\s*', pos)
+		endwhile
+		return ac
+	endfunction
+
+	" Main fold function
+	function GetErlangFold(lnum)
+		let lnum = a:lnum
+		let line = getline(lnum)
+
+		if line =~ s:erlang_fun_end
+			return '<1'
+		endif
+
+		if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+			return '1'
+		endif
+
+		if line =~ s:erlang_fun_begin
+			return '>1'
+		endif
+
+		return '='
+	endfunction
+
+	" Erlang fold description (foldtext function)
+	function ErlangFoldText()
+		let foldlen = v:foldend - v:foldstart
+		if 1 < foldlen
+			let lines = 'lines'
+		else
+			let lines = 'line'
+		endif
+		let line = getline(v:foldstart)
+		let name = s:GetFunName(line)
+		let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
+		let argcount = s:CountFunArgs(arguments)
+		let retval = '+' . v:folddashes . ' ' . name . '/' . argcount
+		let retval .= ' (' . foldlen . ' ' . lines . ')'
+		return retval
+	endfunction
+endif
+
+call s:SetErlangOptions()
diff --git a/runtime/ftplugin/logcheck.vim b/runtime/ftplugin/logcheck.vim
index 765f6b4..7d4671d 100644
--- a/runtime/ftplugin/logcheck.vim
+++ b/runtime/ftplugin/logcheck.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:    Logcheck
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Last Change: 2010 Jul 29
-" License:     GNU GPL, version 2.0
+" Last Change: 2012 Jan 15
+" License:     Vim License
 " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/logcheck.vim
 
 if exists("b:did_ftplugin")
diff --git a/runtime/ftplugin/postscr.vim b/runtime/ftplugin/postscr.vim
index 56f4e24..f7c96a2 100644
--- a/runtime/ftplugin/postscr.vim
+++ b/runtime/ftplugin/postscr.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
-" Language:     PostScript
-" Maintainer:   Mike Williams <mrw@eandem.co.uk>
-" Last Change:  27th June 2002
+" Language:	PostScript
+" Maintainer:	Mike Williams <mrw@eandem.co.uk>
+" Last Change:  16th January 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " PS comment formatting
 setlocal comments=b:%
 setlocal formatoptions-=t formatoptions+=rol
@@ -21,11 +24,12 @@
   let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
 endif
 
-set cpo-=C
-
 " Define patterns for the browse file filter
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
     \ "EPS Files (*.eps)\t*.eps\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
