diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 6d2fef2..2fd84b0 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.1a.  Last change: 2006 Jul 18
+*cmdline.txt*   For Vim version 7.1b.  Last change: 2006 Jul 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/pi_tar.txt b/runtime/doc/pi_tar.txt
index 51c96cc..9e0375c 100644
--- a/runtime/doc/pi_tar.txt
+++ b/runtime/doc/pi_tar.txt
@@ -1,4 +1,4 @@
-*pi_tar.txt*	For Vim version 7.1a.  Last change: 2006 Sep 29
+*pi_tar.txt*	For Vim version 7.1b.  Last change: 2006 Sep 29
 
        	       	       +====================+
        	       	       | Tar File Interface |
diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim
index d621bfa..9a68e54 100644
--- a/runtime/indent/eruby.vim
+++ b/runtime/indent/eruby.vim
@@ -12,13 +12,27 @@
 
 runtime! indent/ruby.vim
 unlet! b:did_indent
+set indentexpr=
 
-runtime! indent/html.vim
+if exists("b:eruby_subtype")
+  exe "runtime! indent/".b:eruby_subtype.".vim"
+else
+  runtime! indent/html.vim
+endif
 unlet! b:did_indent
 
+if &l:indentexpr == ''
+  if &l:cindent
+    let &l:indentexpr = 'cindent(v:lnum)'
+  else
+    let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'
+  endif
+endif
+let b:eruby_subtype_indentexpr = &l:indentexpr
+
 let b:did_indent = 1
 
-setlocal indentexpr=GetErubyIndent(v:lnum)
+setlocal indentexpr=GetErubyIndent()
 setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
 
 " Only define the function once.
@@ -26,19 +40,19 @@
   finish
 endif
 
-function! GetErubyIndent(lnum)
+function! GetErubyIndent()
   let vcol = col('.')
-  call cursor(a:lnum,1)
+  call cursor(v:lnum,1)
   let inruby = searchpair('<%','','%>')
-  call cursor(a:lnum,vcol)
-  if inruby && getline(a:lnum) !~ '^<%'
+  call cursor(v:lnum,vcol)
+  if inruby && getline(v:lnum) !~ '^<%'
     let ind = GetRubyIndent()
   else
-    let ind = HtmlIndentGet(a:lnum)
+    exe "let ind = ".b:eruby_subtype_indentexpr
   endif
-  let lnum = prevnonblank(a:lnum-1)
+  let lnum = prevnonblank(v:lnum-1)
   let line = getline(lnum)
-  let cline = getline(a:lnum)
+  let cline = getline(v:lnum)
   if cline =~# '<%\s*\%(end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
     let ind = ind - &sw
   endif
diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim
index 3fe5a49..8412fbb 100644
--- a/runtime/indent/make.vim
+++ b/runtime/indent/make.vim
@@ -1,7 +1,7 @@
 " Vim indent file
-" Language:	    Makefile
-" Maintainer:	    Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-26
+" Language:         Makefile
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2007-05-07
 
 if exists("b:did_indent")
   finish
@@ -9,159 +9,108 @@
 let b:did_indent = 1
 
 setlocal indentexpr=GetMakeIndent()
-setlocal indentkeys=!^F,o,O
+setlocal indentkeys=!^F,o,O,<:>,=else,=endif
 setlocal nosmartindent
 
 if exists("*GetMakeIndent")
   finish
 endif
 
+let s:comment_rx = '^\s*#'
 let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
+let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)'
 let s:continuation_rx = '\\$'
-let s:assignment_rx = '^\s*\h\w*\s*+\==\s*\zs.*\\$'
+let s:assignment_rx = '^\s*\h\w*\s*[+?]\==\s*\zs.*\\$'
+let s:folded_assignment_rx = '^\s*\h\w*\s*[+?]\=='
+" TODO: This needs to be a lot more restrictive in what it matches.
+let s:just_inserted_rule_rx = '^\s*[^#:]\+:\{1,2}$'
+let s:conditional_directive_rx = '^ *\%(ifn\=\%(eq\|def\)\|else\)\>'
+let s:end_conditional_directive_rx = '^\s*\%(else\|endif\)\>'
 
-" TODO: Deal with comments, string, and all kinds of other crap, e.g., defines.
-" TODO: Unwrap the whole logic of this function into something that requires a
-" lot less 'return's.
+function s:remove_continuation(line)
+  return substitute(a:line, s:continuation_rx, "", "")
+endfunction
+
 function GetMakeIndent()
-  let lnum = v:lnum - 1
-  if lnum == 0
+  " TODO: Should this perhaps be v:lnum -1?
+"  let prev_lnum = prevnonblank(v:lnum - 1)
+  let prev_lnum = v:lnum - 1
+  if prev_lnum == 0
     return 0
   endif
+  let prev_line = getline(prev_lnum)
 
-  " Figure out if the previous line is part of a rule or not.  If it is, then
-  " we more or less just indent by a 'tabstop', the previous' lines indent, or
-  " remove all indent if the current line is itself a rule.  Also, if the line
-  " in question is part of a continuation-line set constituting the rule line
-  " itself, we indent by either a 'shiftwidth', if the line is the first in the
-  " continuation, or use the indent of the previous line, if not.
-  while lnum > 0
-    let line = getline(lnum)
-    if line[0] != "\t"
-      " We found a non-shell-command line, i.e., one that doesn't have a
-      " leading tab.
-      if line =~ s:rule_rx
-	" The line looks like a rule line, so we must therefore either be inside a
-	" rule or we are a continuation line to that rule line.
-	if line =~ s:continuation_rx
-	  " Ah, the rule line was continued, so look up the last continuation
-	  " line that's above the current line.
-	  while line =~ s:continuation_rx && lnum < v:lnum
-	    let lnum += 1
-	    let line = getline(lnum)
-	  endwhile
-	  let lnum -= 1
-	  let line = getline(lnum)
-	endif
+  let prev_prev_lnum = prev_lnum - 1
+  let prev_prev_line = prev_prev_lnum != 0 ? getline(prev_prev_lnum) : ""
 
-	" If the line that we've found is right above the current line, deal
-	" with it specifically.
-	if lnum == v:lnum - 1
-	  " If it was continued, indent the current line by a shiftwidth, as it
-	  " is the first to follow it.  Otherwise, depending on if the current
-	  " line is a rule line, i.e, a rule line following another rule line,
-	  " then indent to the left margin.  Otherwise, the current line is the
-	  " first shell-command line in the rule, so indent by a 'tabstop'
-	  if line =~ s:continuation_rx
-	    return &sw
-	  else
-	    return getline(v:lnum) =~ s:rule_rx ? 0 : &ts
-	  endif
-	else
-	  " If the previous line was a continuation line, then unless it was
-	  " itself a part of a continuation line, add a 'shiftwidth''s worth of
-	  " indent.  Otherwise, just use the indent of the previous line.
-	  " Otherwise, if the previous line wasn't a continuation line, check
-	  " if the one above it was.  If it was then indent to whatever level
-	  " the 'owning' line had.  Otherwise, indent to the previous line's
-	  " level.
-	  let lnum = v:lnum - 1
-	  let line = getline(lnum)
-	  if line =~ s:continuation_rx
-	    let pnum = v:lnum - 2
-	    let pine = getline(pnum)
-	    if pine =~ s:continuation_rx
-	      return indent(lnum)
-	    else
-	      return indent(lnum) + &sw
-	    endif
-	  else
-	    let lnum = v:lnum - 2
-	    let line = getline(lnum)
-	    if line =~ s:continuation_rx
-	      while lnum > 0
-		if line !~ s:continuation_rx
-		  let lnum += 1
-		  let line = getline(lnum)
-		  break
-		endif
-		let lnum -= 1
-		let line = getline(lnum)
-	      endwhile
-	      " We've found the owning line.  Indent to it's level.
-	      return indent(lnum)
-	    else
-	      return indent(v:lnum - 1)
-	    endif
-	  endif
-	endif
-      endif
-
-      " The line wasn't a rule line, so the current line is part of a series
-      " of tab-indented lines that don't belong to any rule.
-      break
-    endif
-    let lnum -= 1
-  endwhile
-
-  " If the line before the one we are currently indenting ended with a
-  " continuation, then try to figure out what 'owns' that line and indent
-  " appropriately.
-  let lnum = v:lnum - 1
-  let line = getline(lnum)
-  if line =~ s:continuation_rx
-    let indent = indent(lnum)
-    if line =~ s:assignment_rx
-      " The previous line is a continuation line that begins a variable-
-      " assignment expression, so set the indent to just beyond the whitespace
-      " following the assignment operator ('=').
-      call cursor(lnum, 1)
+  " TODO: Deal with comments.  In comments, continuations aren't interesting.
+  if prev_line =~ s:continuation_rx
+    if prev_prev_line =~ s:continuation_rx
+      return indent(prev_lnum)
+    elseif prev_line =~ s:rule_rx
+      return &sw
+    elseif prev_line =~ s:assignment_rx
+      call cursor(prev_lnum, 1)
       if search(s:assignment_rx, 'W') != 0
-	let indent = virtcol('.') - 1
+        return virtcol('.') - 1
+      else
+        " TODO: ?
+        return &sw
       endif
+    else
+      " TODO: OK, this might be a continued shell command, so perhaps indent
+      " properly here?  Leave this out for now, but in the next release this
+      " should be using indent/sh.vim somehow.
+      "if prev_line =~ '^\t' " s:rule_command_rx
+      "  if prev_line =~ '^\s\+[@-]\%(if\)\>'
+      "    return indent(prev_lnum) + 2
+      "  endif
+      "endif
+      return indent(prev_lnum) + &sw
     endif
-
-    " The previous line didn't constitute an assignment, so just indent to
-    " whatever level it had.
-    return indent
-  endif
-
-  " If the line above the line above the current line ended was continued,
-  " then the line above the current line was part of a continued line.  Find
-  " the 'owning' line and indent to its level.
-  let lnum = v:lnum - 2
-  let line = getline(lnum)
-  if line =~ s:continuation_rx
-    while lnum > 0
-      if line !~ s:continuation_rx
-	let lnum += 1
-	let line = getline(lnum)
-	break
-      endif
+  elseif prev_prev_line =~ s:continuation_rx
+    let folded_line = s:remove_continuation(prev_prev_line) . ' ' . s:remove_continuation(prev_line)
+    let lnum = prev_prev_lnum - 1
+    let line = getline(lnum)
+    while line =~ s:continuation_rx
+      let folded_line = s:remove_continuation(line) . ' ' . folded_line
       let lnum -= 1
       let line = getline(lnum)
     endwhile
-    " We've found the owning line.  Indent to it's level.
-    return indent(lnum)
-  endif
-
-  " If nothing else caught on, then check if this line is a rule line.  If it
-  " is, indent it to the left margin.  Otherwise, simply use the indent of the
-  " previous line.
-  let line = getline(v:lnum)
-  if line =~ s:rule_rx
-    return 0
+    let folded_lnum = lnum + 1
+    if folded_line =~ s:rule_rx
+      if getline(v:lnum) =~ s:rule_rx
+        return 0
+      else
+        return &ts
+      endif
+    else
+"    elseif folded_line =~ s:folded_assignment_rx
+      if getline(v:lnum) =~ s:rule_rx
+        return 0
+      else
+        return indent(folded_lnum)
+      endif
+"    else
+"      " TODO: ?
+"      return indent(prev_lnum)
+    endif
+  elseif prev_line =~ s:rule_rx
+    if getline(v:lnum) =~ s:rule_rx
+      return 0
+    else
+      return &ts
+    endif
+  elseif prev_line =~ s:conditional_directive_rx
+    return &sw
   else
-    return indent(v:lnum - 1)
+    let line = getline(v:lnum)
+    if line =~ s:just_inserted_rule_rx
+      return 0
+    elseif line =~ s:end_conditional_directive_rx
+      return v:lnum - 1 == 0 ? 0 : indent(v:lnum - 1) - &sw
+    else
+      return v:lnum - 1 == 0 ? 0 : indent(v:lnum - 1)
+    endif
   endif
 endfunction
diff --git a/runtime/syntax/gpg.vim b/runtime/syntax/gpg.vim
index 0fc8f00..b7307b9 100644
--- a/runtime/syntax/gpg.vim
+++ b/runtime/syntax/gpg.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         gpg(1) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2007-05-06
 
 if exists("b:current_syntax")
   finish
@@ -54,7 +54,7 @@
                         \ personal-digest-preferences photo-viewer
                         \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
                         \ secret-keyring set-filename set-policy-url status-fd
-                        \ trusted-key
+                        \ trusted-key verify-options
 syn keyword gpgOption   contained skipwhite nextgroup=gpgArgError
                         \ allow-freeform-uid allow-non-selfsigned-uid
                         \ allow-secret-key-import always-trust
