diff --git a/runtime/indent/d.vim b/runtime/indent/d.vim
new file mode 100644
index 0000000..b5dd5e8
--- /dev/null
+++ b/runtime/indent/d.vim
@@ -0,0 +1,22 @@
+" Vim indent file for the D programming language (version 0.137).
+"
+" Language:	D
+" Maintainer:	Jason Mills<jmills@cs.mun.ca>
+" Last Change:	2005 Nov 22
+" Version:	0.1
+"
+" Please email me with bugs, comments, and suggestion. Put vim in the subject
+" to ensure the email will not be marked has spam.
+"
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+
+let b:did_indent = 1
+
+" D indenting is a lot like the built-in C indenting.
+setlocal cindent
+
+" vim: ts=8 noet
diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim
index 81f7c1a..b62a024 100644
--- a/runtime/indent/eruby.vim
+++ b/runtime/indent/eruby.vim
@@ -2,14 +2,8 @@
 " Language:	Ruby
 " Maintainer:	Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
 " Info:		$Id$
-" URL:		http://vim-ruby.rubyforge.org/
+" URL:		http://vim-ruby.rubyforge.org
 " Anon CVS:	See above site
-" Licence:	GPL (http://www.gnu.org)
-" Disclaimer:
-"    This program is distributed in the hope that it will be useful,
-"    but WITHOUT ANY WARRANTY; without even the implied warranty of
-"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-"    GNU General Public License for more details.
 " ----------------------------------------------------------------------------
 
 " Only load this indent file when no other was loaded.
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 22210ce..8d05b03 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,17 +2,19 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2005 September 22th
-" Version: 1.181
+" Last Change: 2005 Nobember 21st
+" Version: 1.20
 "
-" The change log and all the comments have been removed from this file.
+"  The change log and all the comments have been removed from this file.
 "
-" For a complete change log and fully commented code, download the script on
-" 2072productions.com at the URI provided above.
-"
-"
+"  For a complete change log and fully commented code, download the script on
+"  2072productions.com at the URI provided above.
+" 
 "  If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr
-"  with an example of code that breaks the algorithm.
+"  with an example of code that break the algorithm.
+"
+"
+"	Thanks a lot for using this script.
 "
 "
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
@@ -23,6 +25,7 @@
 "	tags not at col 1 you'll have to indent your file 2 times (This script 
 "	will automatically put HereDoc end tags at col 1).
 " 
+"
 " NOTE: If you are editing file in Unix file format and that (by accident)
 " there are '\r' before new lines, this script won't be able to proceed
 " correctly and will make many mistakes because it won't be able to match
@@ -34,31 +37,36 @@
 " or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
 " silently remove them when VIM load this script (at each bufread).
 
+
+" Options: PHP_autoformatcomment = 0 to not enable autoformating of comment by
+"		    default, if set to 0, this script will let the 'formatoptions' setting intact.
+" 
 " Options: PHP_default_indenting = # of sw (default is 0), # of sw will be
-"	   added to the indent of each line of PHP code.
+"		   added to the indent of each line of PHP code.
 "
 " Options: PHP_removeCRwhenUnix = 1 to make the script automatically remove CR
-"	   at end of lines (by default this option is unset), NOTE that you
-"	   MUST remove CR when the fileformat is UNIX else the indentation
-"	   won't be correct...
+"		   at end of lines (by default this option is unset), NOTE that you
+"		   MUST remove CR when the fileformat is UNIX else the indentation
+"		   won't be correct...
 "
 " Options: PHP_BracesAtCodeLevel = 1 to indent the '{' and '}' at the same
-"	   level than the code they contain.
-"	   Exemple:
-"		Instead of:
-"			if ($foo)
-"			{
-"				foo();
-"			}
-"
-"		You will write:
-"			if ($foo)
+"		   level than the code they contain.
+"		   Exemple:
+"			Instead of:
+"				if ($foo)
 "				{
-"				foo();
+"					foo();
 "				}
 "
-"		NOTE: The script will be a bit slower if you use this option because
-"		some optimizations won't be available.
+"			You will write:
+"				if ($foo)
+"					{
+"					foo();
+"					}
+"
+"			NOTE: The script will be a bit slower if you use this option because
+"			some optimizations won't be available.
+
 
 
 if exists("b:did_indent")
@@ -82,6 +90,11 @@
     let b:PHP_BracesAtCodeLevel = 0
 endif
 
+if exists("PHP_autoformatcomment")
+    let b:PHP_autoformatcomment = PHP_autoformatcomment
+else
+    let b:PHP_autoformatcomment = 1
+endif
 
 let b:PHP_lastindented = 0
 let b:PHP_indentbeforelast = 0
@@ -114,12 +127,12 @@
 endif
 
 if exists("*GetPhpIndent")
-    finish " XXX
+   finish " XXX
 endif
 
 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
-"setlocal debug=msg " XXX
+" setlocal debug=msg " XXX
 
 
 function! GetLastRealCodeLNum(startline) " {{{
@@ -141,7 +154,7 @@
 	    if lastline !~ '^\*/'
 		call search('\*/', 'W')
 	    endif
-	    let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
+	    let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')
 
 	    let lastline = getline(lnum)
 	    if lastline =~ '^\s*/\*'
@@ -184,6 +197,17 @@
     return lnum
 endfunction " }}}
 
+function! Skippmatch2()
+
+    let line = getline(".")
+
+   if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(//.*\)\@<=/\*'
+       return 1
+   else
+       return 0
+   endif
+endfun
+
 function! Skippmatch()  " {{{
     let synname = synIDattr(synID(line("."), col("."), 0), "name")
     if synname == "Delimiter" || synname == "phpParent" || synname == "javaScriptBraces" || synname == "phpComment" && b:UserIsTypingComment
@@ -245,7 +269,7 @@
     let cline = getline(a:lnum)
 
     if a:tofind==""
-	let tofind = "^\\s*[\"']*\s*\\zs\\S"
+	let tofind = "^\\s*[\"']*\\s*\\zs\\S"
     else
 	let tofind = a:tofind
     endif
@@ -264,17 +288,28 @@
 endfunction " }}}
 
 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\);'
-let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|[|&]\)'
+let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|[|&]\)'
 
 let s:autorestoptions = 0
 if ! s:autorestoptions
-    au BufWinEnter,Syntax *.php,*.php3,*.php4,*.php5 call ResetOptions()
+    au BufWinEnter,Syntax	*.php,*.php3,*.php4,*.php5	call ResetOptions()
     let s:autorestoptions = 1
 endif
 
 function! ResetOptions()
     if ! b:optionsset
-	setlocal formatoptions=qroc
+	if b:PHP_autoformatcomment
+
+	    setlocal comments=s1:/*,mb:*,ex:*/,://,:#
+	    
+	    setlocal formatoptions-=t
+	    setlocal formatoptions+=q
+	    setlocal formatoptions+=r
+	    setlocal formatoptions+=o
+	    setlocal formatoptions+=w
+	    setlocal formatoptions+=c
+	    setlocal formatoptions+=b
+	endif
 	let b:optionsset = 1
     endif
 endfunc
@@ -376,7 +411,7 @@
 		if cline !~ '^\*/'
 		    call search('\*/', 'W')
 		endif
-		let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
+		let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')
 
 		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 
@@ -493,7 +528,7 @@
 	if cline !~ '^\*/'
 	    call search('\*/', 'W')
 	endif
-	let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
+	let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')
 
 	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
index e5946eb..5d48a79 100644
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -1,16 +1,10 @@
 " Vim indent file
-" Language:     Ruby
-" Maintainer:   Gavin Sinclair <gsinclair at soyabean.com.au>
-" Developer:    Nikolai Weibull <source at pcppopper.org>
-" Info:         $Id$
-" URL:          http://vim-ruby.rubyforge.org/
-" Anon CVS:     See above site
-" Licence:      GPL (http://www.gnu.org)
-" Disclaimer:
-"    This program is distributed in the hope that it will be useful,
-"    but WITHOUT ANY WARRANTY; without even the implied warranty of
-"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-"    GNU General Public License for more details.
+" Language:	Ruby
+" Maintainer:	Gavin Sinclair <gsinclair at soyabean.com.au>
+" Developer:	Nikolai Weibull <source at pcppopper.org>
+" Info:		$Id$
+" URL:		http://vim-ruby.rubyforge.org
+" Anon CVS:	See above site
 " ----------------------------------------------------------------------------
 
 " 0. Initialization {{{1
@@ -42,17 +36,13 @@
 let s:syng_strcom = '\<ruby\%(String\|StringDelimiter\|ASCIICode' .
       \ '\|Interpolation\|NoInterpolation\|Escape\|Comment\|Documentation\)\>'
 
-" Regex of syntax group names that are strings or comments.
-let s:syng_strcom2 = '\<ruby\%(String' .
-      \ '\|Interpolation\|NoInterpolation\|Escape\|Comment\|Documentation\)\>'
-
 " Regex of syntax group names that are strings.
 let s:syng_string =
-      \ '\<ruby\%(String\|Interpolation\|NoInterpolation\|Escape\)\>'
+      \ '\<ruby\%(String\|StringDelimiter\|Interpolation\|NoInterpolation\|Escape\)\>'
 
 " Regex of syntax group names that are strings or documentation.
 let s:syng_stringdoc =
-  \'\<ruby\%(String\|Interpolation\|NoInterpolation\|Escape\|Documentation\)\>'
+  \'\<ruby\%(String\|StringDelimiter\|Interpolation\|NoInterpolation\|Escape\|Documentation\)\>'
 
 " Expression used to check whether we should skip a match with searchpair().
 let s:skip_expr =
@@ -109,11 +99,6 @@
   return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_strcom
 endfunction
 
-" Check if the character at lnum:col is inside a string or comment.
-function s:IsInStringOrComment2(lnum, col)
-  return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_strcom2
-endfunction
-
 " Check if the character at lnum:col is inside a string.
 function s:IsInString(lnum, col)
   return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_string
@@ -134,14 +119,14 @@
     let line = getline(lnum)
     if line =~ '^=begin$'
       if in_block
-        let in_block = 0
+	let in_block = 0
       else
-        break
+	break
       endif
     elseif !in_block && line =~ '^=end$'
       let in_block = 1
     elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
-          \ && s:IsInStringOrComment(lnum, strlen(line)))
+	  \ && s:IsInStringOrComment(lnum, strlen(line)))
       break
     endif
     let lnum = prevnonblank(lnum - 1)
@@ -160,7 +145,7 @@
     let line = getline(lnum)
     let col = match(line, s:continuation_regex2) + 1
     if (col > 0 && !s:IsInStringOrComment(lnum, col))
-          \ || s:IsInString(lnum, strlen(line))
+	  \ || s:IsInString(lnum, strlen(line))
       let msl = lnum
     else
       break
@@ -181,9 +166,9 @@
     if !s:IsInStringOrComment(a:lnum, pos + 1)
       let idx = stridx('(){}[]', line[pos])
       if idx % 2 == 0
-        let open_{idx} = open_{idx} + 1
+	let open_{idx} = open_{idx} + 1
       else
-        let open_{idx - 1} = open_{idx - 1} - 1
+	let open_{idx - 1} = open_{idx - 1} - 1
       endif
     endif
     let pos = match(line, '[][(){}]', pos + 1)
@@ -246,13 +231,13 @@
   if s:Match(v:lnum, s:ruby_deindent_keywords)
     call cursor(v:lnum, 1)
     if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
-            \ s:end_skip_expr) > 0
+	    \ s:end_skip_expr) > 0
       let line = getline('.')
       if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
        \ strpart(line, col('.') - 1, 2) !~ 'do'
-        let ind = virtcol('.') - 1
+	let ind = virtcol('.') - 1
       else
-        let ind = indent('.')
+	let ind = indent('.')
       endif
     endif
     return ind
@@ -302,12 +287,12 @@
   if col > 0
     call cursor(lnum, col)
     if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
-                \ s:end_skip_expr) > 0
+		\ s:end_skip_expr) > 0
       let n = line('.')
       let ind = indent('.')
       let msl = s:GetMSL(n)
       if msl != n
-        let ind = indent(msl)
+	let ind = indent(msl)
       end
       return ind
     endif
