diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 8d05b03..de31381 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,8 +2,9 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2005 Nobember 21st
-" Version: 1.20
+" Last Change:  2006 January 15th
+" Newsletter:   http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
+" Version:	1.23
 "
 "  The change log and all the comments have been removed from this file.
 "
@@ -11,14 +12,14 @@
 "  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 break the algorithm.
+"  with an example of code that breaks the algorithm.
 "
 "
 "	Thanks a lot for using this script.
 "
 "
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
-"	script by Lutz Eymers (http://www.isp.de/data/php.vim ) that's the script bundled with Gvim.
+"	script by Lutz Eymers ( http://www.isp.de/data/php.vim ) that's the script bundled with Vim.
 "
 "
 "	In the case you have syntax errors in your script such as end of HereDoc
@@ -69,6 +70,10 @@
 
 
 
+
+
+
+
 if exists("b:did_indent")
     finish
 endif
@@ -127,7 +132,7 @@
 endif
 
 if exists("*GetPhpIndent")
-   finish " XXX
+    finish " XXX
 endif
 
 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
@@ -136,7 +141,13 @@
 
 
 function! GetLastRealCodeLNum(startline) " {{{
+    
     let lnum = a:startline
+    
+    if b:GetLastRealCodeLNum_ADD && b:GetLastRealCodeLNum_ADD == lnum + 1
+	let lnum = b:GetLastRealCodeLNum_ADD
+    endif
+    
     let old_lnum = lnum
 
     while lnum > 1
@@ -288,7 +299,7 @@
 endfunction " }}}
 
 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\);'
-let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|[|&]\)'
+let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\|[|&]\)'
 
 let s:autorestoptions = 0
 if ! s:autorestoptions
@@ -316,6 +327,8 @@
 
 function! GetPhpIndent()
 
+    let b:GetLastRealCodeLNum_ADD = 0
+
     let UserIsEditing=0
     if	b:PHP_oldchangetick != b:changedtick
 	let b:PHP_oldchangetick = b:changedtick
@@ -361,7 +374,10 @@
     if !b:InPHPcode_checked " {{{ One time check
 	let b:InPHPcode_checked = 1
 
-	let synname = IslinePHP (prevnonblank(v:lnum), "")
+	let synname = ""
+	if cline !~ '<?.*?>'
+	    let synname = IslinePHP (prevnonblank(v:lnum), "")
+	endif
 
 	if synname!=""
 	    if synname != "phpHereDoc"
@@ -425,6 +441,7 @@
 
 	    elseif cline =~? '<script\>'
 		let b:InPHPcode_and_script = 1
+		let b:GetLastRealCodeLNum_ADD = v:lnum
 	    endif
 	endif
     endif
@@ -453,11 +470,11 @@
 	endif
     endif " }}}
 
+    
     if !b:InPHPcode && !b:InPHPcode_and_script
 	return -1
     endif
 
-
     " Indent successive // or # comment the same way the first is {{{
     if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
 	if b:PHP_LastIndentedWasComment == 1
@@ -482,9 +499,11 @@
 	endif
     endif
 
-    if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*'
+    if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' && cline !~ '\*/\s*$'
+	if getline(v:lnum + 1) !~ '^\s*\*'
+	    return -1
+	endif
 	let b:PHP_InsideMultilineComment = 1
-	return -1
     endif " }}}
 
 
@@ -504,6 +523,7 @@
     let s:level = 0
 
     let lnum = GetLastRealCodeLNum(v:lnum - 1)
+
     let last_line = getline(lnum)
     let ind = indent(lnum)
     let endline= s:endline
