diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 8ba3b2e..d73460d 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,7 +2,7 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change:  2007 February 25th
+" Last Change:  2007 Jun 24
 " Newsletter:   http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
 " Version:	1.24
 "
@@ -310,11 +310,11 @@
 
 	    setlocal comments=s1:/*,mb:*,ex:*/,://,:#
 
-	    setlocal formatoptions-=t
+	    " setlocal formatoptions-=t
 	    setlocal formatoptions+=q
 	    setlocal formatoptions+=r
 	    setlocal formatoptions+=o
-	    setlocal formatoptions+=w
+	    " setlocal formatoptions+=w
 	    setlocal formatoptions+=c
 	    setlocal formatoptions+=b
 	endif
diff --git a/runtime/indent/sql.vim b/runtime/indent/sql.vim
index f7cf834..4f82b96 100644
--- a/runtime/indent/sql.vim
+++ b/runtime/indent/sql.vim
@@ -36,4 +36,4 @@
 exec 'runtime indent/'.filename.'.vim'
 
 
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/sqlanywhere.vim b/runtime/indent/sqlanywhere.vim
index c2f527e..fdafb62 100644
--- a/runtime/indent/sqlanywhere.vim
+++ b/runtime/indent/sqlanywhere.vim
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:    SQL
 " Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Wed Sep 14 2005 10:21:15 PM
-" Version:     1.4
+" Last Change: Mon Apr 02 2007 9:13:47 AM
+" Version:     1.5
 " Download:    http://vim.sourceforge.net/script.php?script_id=495
 
 " Notes:
@@ -106,7 +106,7 @@
 
         " if getline(".") =~ '^)'
         let matching_paran = searchpair('(', '', ')', 'bW',
-                    \ 'IsColComment(line("."), col("."))')
+                    \ 's:IsColComment(line("."), col("."))')
 
         if matching_paran < 1
             " No match found
@@ -165,7 +165,7 @@
                     \ '\%(\%(\<end\s\+\)\@<!\<if\>\)'.
                     \ '\)'
         let matching_lnum = searchpair(stmts, '', '\<end\>\zs', 'bW',
-                    \ 'IsColComment(line("."), col(".")) == 1')
+                    \ 's:IsColComment(line("."), col(".")) == 1')
         exec 'normal! $'
         if matching_lnum > 0 && matching_lnum < a:curr_lnum
             let ind = indent(matching_lnum)
@@ -177,7 +177,7 @@
                     \ '',
                     \ '\%(\%(\<when\s\+others\>\)\|\%(\<end\s\+case\>\)\)',
                     \ 'bW',
-                    \ 'IsColComment(line("."), col(".")) == 1')
+                    \ 's:IsColComment(line("."), col(".")) == 1')
         exec 'normal! $'
         if matching_lnum > 0 && matching_lnum < a:curr_lnum
             let ind = indent(matching_lnum)
@@ -191,7 +191,7 @@
 
 
 " Check if the line is a comment
-function IsLineComment(lnum)
+function s:IsLineComment(lnum)
     let rc = synIDattr(
                 \ synID(a:lnum,
                 \     match(getline(a:lnum), '\S')+1, 0)
@@ -203,7 +203,7 @@
 
 
 " Check if the column is a comment
-function IsColComment(lnum, cnum)
+function s:IsColComment(lnum, cnum)
     let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
                 \           =~? "comment"
 
@@ -211,8 +211,9 @@
 endfunction
 
 
-" Check if the column is a comment
-function ModuloIndent(ind)
+" Instead of returning a column position, return
+" an appropriate value as a factor of shiftwidth.
+function s:ModuloIndent(ind)
     let ind = a:ind
 
     if ind > 0
@@ -235,7 +236,7 @@
     " If the current line is a comment, leave the indent as is
     " Comment out this additional check since it affects the
     " indenting of =, and will not reindent comments as it should
-    " if IsLineComment(lnum) == 1
+    " if s:IsLineComment(lnum) == 1
     "     return ind
     " endif
 
@@ -246,9 +247,9 @@
             return ind
         endif
 
-        if IsLineComment(prevlnum) == 1
+        if s:IsLineComment(prevlnum) == 1
             if getline(v:lnum) =~ '^\s*\*'
-                let ind = ModuloIndent(indent(prevlnum))
+                let ind = s:ModuloIndent(indent(prevlnum))
                 return ind + 1
             endif
             " If the previous line is a comment, then return -1
@@ -378,7 +379,7 @@
     endif
 
     " echom 'final - indent ' . ind
-    return ModuloIndent(ind)
+    return s:ModuloIndent(ind)
 endfunction
 
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/vhdl.vim b/runtime/indent/vhdl.vim
index d288be4..9940cc5 100644
--- a/runtime/indent/vhdl.vim
+++ b/runtime/indent/vhdl.vim
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.50
-" Last Change: 2007 Jan 29
+" Version:     1.54
+" Last Change: 2007 Aug 17
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -28,13 +28,13 @@
 let s:NE = '\%(\<end\s\+\)\@<!'
 
 " option to disable alignment of generic/port mappings
-if !exists("g:vhdl_align_genportmap")
-  let g:vhdl_align_genportmap = 1
+if !exists("g:vhdl_indent_genportmap")
+  let g:vhdl_indent_genportmap = 1
 endif
 
 " option to disable alignment of right-hand side assignment "<=" statements
-if !exists("g:vhdl_align_rhsassign")
-  let g:vhdl_align_rhsassign = 1
+if !exists("g:vhdl_indent_rhsassign")
+  let g:vhdl_indent_rhsassign = 1
 endif
 
 " only define indent function once
@@ -54,6 +54,7 @@
     let prevn = prevnonblank(prevn - 1)
     let prevs = getline(prevn)
   endwhile
+  let prevs_noi = substitute(prevs, '^\s*', '', '')
 
   " default indent starts as previous non-comment line's indent
   let ind = prevn > 0 ? indent(prevn) : 0
@@ -77,8 +78,8 @@
   if curs =~ '^\s*--'
     let pn = curn - 1
     let ps = getline(pn)
-    if ps =~ '--'
-      return stridx(ps, '--')
+    if curs =~ '^\s*--\s' && ps =~ '--'
+      return indent(pn) + stridx(substitute(ps, '^\s*', '', ''), '--')
     else
       " find nextnonblank line that is not a comment
       let nn = nextnonblank(curn + 1)
@@ -106,14 +107,14 @@
   if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
     " align closing ")" with opening "("
     if curs =~ '^\s*)'
-      return stridx(prevs, '(')
+      return ind2 + stridx(prevs_noi, '(')
     endif
-    let m = matchend(prevs, '(\s*\ze\w')
+    let m = matchend(prevs_noi, '(\s*\ze\w')
     if m != -1
-      return m
+      return ind2 + m
     else
-      if g:vhdl_align_genportmap
-        return stridx(prevs, '(') + &sw
+      if g:vhdl_indent_genportmap
+        return ind2 + stridx(prevs_noi, '(') + &sw
       else
         return ind2 + &sw
       endif
@@ -124,8 +125,8 @@
   " keywords: variable + "<=" without ";" ending
   " where:    start of previous line
   if prevs =~? '^\s*\S\+\s*<=[^;]*'.s:ES
-    if g:vhdl_align_rhsassign
-      return matchend(prevs, '<=\s*\ze.')
+    if g:vhdl_indent_rhsassign
+      return ind2 + matchend(prevs_noi, '<=\s*\ze.')
     else
       return ind2 + &sw
     endif
