diff --git a/runtime/indent/ada.vim b/runtime/indent/ada.vim
index 9601181..8cf915d 100644
--- a/runtime/indent/ada.vim
+++ b/runtime/indent/ada.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Ada
 " Maintainer:	Neil Bird <neil@fnxweb.com>
-" Last Change:	2004 Nov 23
+" Last Change:	2006 Apr 30
 " Version:	$Id$
 " Look for the latest version at http://vim.sourceforge.net/
 "
@@ -44,25 +44,25 @@
    let line = substitute( getline(lnum), s:AdaComment, '', '' )
    while lnum > 1
       if a:stop_at != ''  &&  line =~ '^\s*' . a:stop_at  &&  indent(lnum) < a:prev_indent
-         return a:prev_indent
+	 return a:prev_indent
       elseif line =~ '^\s*' . a:blockstart
-         let ind = indent(lnum)
-         if ind < a:prev_indent
-            return ind
-         endif
+	 let ind = indent(lnum)
+	 if ind < a:prev_indent
+	    return ind
+	 endif
       endif
 
       let lnum = prevnonblank(lnum - 1)
       " Get previous non-blank/non-comment-only line
       while 1
-         let line = substitute( getline(lnum), s:AdaComment, '', '' )
-         if line !~ '^\s*$' && line !~ '^\s*#'
-            break
-         endif
-         let lnum = prevnonblank(lnum - 1)
-         if lnum <= 0
-            return a:prev_indent
-         endif
+	 let line = substitute( getline(lnum), s:AdaComment, '', '' )
+	 if line !~ '^\s*$' && line !~ '^\s*#'
+	    break
+	 endif
+	 let lnum = prevnonblank(lnum - 1)
+	 if lnum <= 0
+	    return a:prev_indent
+	 endif
       endwhile
    endwhile
    " Fallback - just move back one
@@ -82,15 +82,15 @@
    while lnum > 1
       if getline(lnum) =~ '^\s*' . a:blockstart
 	 let ind = indent(lnum)
-         if ends <= 0
-            if ind < a:prev_indent
+	 if ends <= 0
+	    if ind < a:prev_indent
 	       return ind
-            endif
-         else
-            let ends = ends - 1
+	    endif
+	 else
+	    let ends = ends - 1
 	 endif
       elseif getline(lnum) =~ '^\s*' . a:blockend
-         let ends = ends + 1
+	 let ends = ends + 1
       endif
 
       let lnum = prevnonblank(lnum - 1)
@@ -122,25 +122,25 @@
       let lnum = prevnonblank(lnum - 1)
       " Get previous non-blank/non-comment-only line
       while 1
-         let line = substitute( getline(lnum), s:AdaComment, '', '' )
-         if line !~ '^\s*$' && line !~ '^\s*#'
-            break
-         endif
-         let lnum = prevnonblank(lnum - 1)
-         if lnum <= 0
-            return a:current_indent
-         endif
+	 let line = substitute( getline(lnum), s:AdaComment, '', '' )
+	 if line !~ '^\s*$' && line !~ '^\s*#'
+	    break
+	 endif
+	 let lnum = prevnonblank(lnum - 1)
+	 if lnum <= 0
+	    return a:current_indent
+	 endif
       endwhile
       " Leave indent alone if our ';' line is part of a ';'-delineated
       " aggregate (e.g., procedure args.) or first line after a block start.
       if line =~ s:AdaBlockStart || line =~ '(\s*$'
-         return a:current_indent
+	 return a:current_indent
       endif
       if line !~ '[.=(]\s*$'
-         let ind = indent(prev_lnum)
-         if ind < a:current_indent
-            return ind
-         endif
+	 let ind = indent(prev_lnum)
+	 if ind < a:current_indent
+	    return ind
+	 endif
       endif
    endwhile
    " Fallback - just use current one
@@ -159,11 +159,11 @@
    while 1
       let line = substitute( getline(lnum), s:AdaComment, '', '' )
       if line !~ '^\s*$' && line !~ '^\s*#'
-         break
+	 break
       endif
       let lnum = prevnonblank(lnum - 1)
       if lnum <= 0
-         return ind
+	 return ind
       endif
    endwhile
 
@@ -176,15 +176,15 @@
       " Check for false matches to AdaBlockStart
       let false_match = 0
       if line =~ '^\s*\(procedure\|function\|package\)\>.*\<is\s*new\>'
-         " Generic instantiation
-         let false_match = 1
+	 " Generic instantiation
+	 let false_match = 1
       elseif line =~ ')\s*;\s*$'  ||  line =~ '^\([^(]*([^)]*)\)*[^(]*;\s*$'
-         " forward declaration
-         let false_match = 1
+	 " forward declaration
+	 let false_match = 1
       endif
       " Move indent in
       if ! false_match
-         let ind = ind + &sw
+	 let ind = ind + &sw
       endif
    elseif line =~ '^\s*\(case\|exception\)\>'
       " Move indent in twice (next 'when' will move back)
@@ -198,10 +198,10 @@
       exe lnum
       exe 'normal! $F)%'
       if getline('.') =~ '^\s*('
-         " Dire layout - use previous indent (could check for AdaComment here)
-         let ind = indent( prevnonblank( line('.')-1 ) )
+	 " Dire layout - use previous indent (could check for AdaComment here)
+	 let ind = indent( prevnonblank( line('.')-1 ) )
       else
-         let ind = indent('.')
+	 let ind = indent('.')
       endif
       exe v:lnum
    elseif line =~ '[.=(]\s*$'
@@ -227,7 +227,7 @@
    elseif continuation && line =~ '^\s*('
       " Don't do this if we've already indented due to the previous line
       if ind == initind
-         let ind = ind + &sw
+	 let ind = ind + &sw
       endif
    elseif line =~ '^\s*\(begin\|is\)\>'
       let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' )
