diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
index 2bc6045e9e431b49194f97b124aeeebd7553f1f3..092faa92d6bcc8db78714d447cae6ad3e2ac8860 100644
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Feb 28, 2006
-" Version:	32
+" Last Change:	Mar 06, 2006
+" Version:	33
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
@@ -186,6 +186,11 @@ syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained
 syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
 syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName
 
+" Preamble syntax-based folding support: {{{1
+if g:tex_fold_enabled && has("folding")
+ syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=@texMatchGroup
+endif
+
 " TeX input: {{{1
 syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
 syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies
diff --git a/src/structs.h b/src/structs.h
index 8f554fea02ccb4ae6f690ac38f716a43155b8251..26fee9a65136d78d94c6f7affc537ce36892f3b7 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1249,13 +1249,16 @@ struct file_buffer
      * The following only used in undo.c.
      */
     u_header_T	*b_u_oldhead;	/* pointer to oldest header */
-    u_header_T	*b_u_newhead;	/* pointer to newest header */
+    u_header_T	*b_u_newhead;	/* pointer to newest header; may not be valid
+				   if b_u_curhead is not NULL */
     u_header_T	*b_u_curhead;	/* pointer to current header */
     int		b_u_numhead;	/* current number of headers */
     int		b_u_synced;	/* entry lists are synced */
     long	b_u_seq_last;	/* last used undo sequence number plus 1 */
     long	b_u_seq_cur;	/* undo sequence number of last header used
 				   plus 1 */
+    time_t	b_u_seq_time;	/* uh_time of the last header used plus 1 or
+				   uh_time of current header */
 
     /*
      * variables for "U" command in undo.c