diff -urN F:\FGCVS\tidy\build\msvc\tidy.dsp tidycvs6\build\msvc\tidy.dsp
--- F:\FGCVS\tidy\build\msvc\tidy.dsp    Thu Apr 17 17:48:03 2003
+++ tidycvs6\build\msvc\tidy.dsp   Mon Sep 25 19:58:44 2006
@@ -42,7 +42,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /Za /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /YX /FD /c
+# ADD CPP /nologo /MT /Za /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /c
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
 # ADD RSC /l 0x409 /d "NDEBUG"
 BSC32=bscmake.exe
@@ -66,7 +66,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /GZ /c
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
 # ADD RSC /l 0x409 /d "_DEBUG"
 BSC32=bscmake.exe
diff -urN F:\FGCVS\tidy\build\msvc\tidydll.dsp tidycvs6\build\msvc\tidydll.dsp
--- F:\FGCVS\tidy\build\msvc\tidydll.dsp Tue Sep 19 15:45:44 2006
+++ tidycvs6\build\msvc\tidydll.dsp Mon Sep 25 19:58:44 2006
@@ -43,7 +43,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /c
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -137,6 +137,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\src\iso639.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\src\istack.c
 # End Source File
 # Begin Source File
@@ -183,7 +187,7 @@
 
 SOURCE=..\..\src\utf8.c
 # End Source File
-# End Group
+# Begin Source File
 
 SOURCE=..\..\src\win32tc.c
 # End Source File
diff -urN F:\FGCVS\tidy\build\msvc\tidylib.dsp tidycvs6\build\msvc\tidylib.dsp
--- F:\FGCVS\tidy\build\msvc\tidylib.dsp Tue Sep 19 15:45:44 2006
+++ tidycvs6\build\msvc\tidylib.dsp Mon Sep 25 19:58:44 2006
@@ -41,7 +41,7 @@
 # PROP Intermediate_Dir "Release"
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W4 /GX /O2 /I "../../include" /D "NDEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /FD /c
+# ADD CPP /nologo /MT /W4 /GX /O2 /I "../../include" /D "NDEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /D "TIDY_STORE_ORIGINAL_TEXT" /FD /c
 # SUBTRACT CPP /YX
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
 # ADD RSC /l 0x409 /d "NDEBUG"
@@ -65,7 +65,7 @@
 # PROP Intermediate_Dir "Debug"
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /Za /W4 /Gm /ZI /Od /I "../../include" /D "_DEBUG" /D "_WIN32" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /U "WINDOWS" /FD /GZ /c
+# ADD CPP /nologo /MTd /Za /W4 /Gm /ZI /Od /I "../../include" /D "_DEBUG" /D "_WIN32" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /D "TIDY_STORE_ORIGINAL_TEXT" /U "WINDOWS" /FD /GZ /c
 # SUBTRACT CPP /YX
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
 # ADD RSC /l 0x409 /d "_DEBUG"
@@ -131,6 +131,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\src\iso639.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\src\istack.c
 # End Source File
 # Begin Source File
@@ -142,7 +146,7 @@
 SOURCE=..\..\src\localize.c
 # End Source File
 # Begin Source File
- 
+
 SOURCE=..\..\src\mappedio.c
 
 !IF  "$(CFG)" == "tidylib - Win32 Release"
@@ -173,6 +177,19 @@
 # Begin Source File
 
 SOURCE=..\..\src\tags.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\src\tidydebug.c
+
+!IF  "$(CFG)" == "tidylib - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "tidylib - Win32 Debug"
+
+# ADD CPP /Ze
+
+!ENDIF 
+
 # End Source File
 # Begin Source File
 
diff -urN F:\FGCVS\tidy\console\tidy.c tidycvs6\console\tidy.c
--- F:\FGCVS\tidy\console\tidy.c   Tue Feb 14 12:09:21 2006
+++ tidycvs6\console\tidy.c  Sun Sep 24 13:24:47 2006
@@ -1271,9 +1271,11 @@
         errout == stderr && !contentErrors)
         fprintf(errout, "\n");
 
-    if (contentErrors + contentWarnings > 0 && 
-         !tidyOptGetBool(tdoc, TidyQuiet))
-        tidyErrorSummary(tdoc);
+    if ( !tidyOptGetBool(tdoc, TidyQuiet) &&
+       (contentErrors + contentWarnings + accessWarnings > 0) )
+    {
+       tidyErrorSummary(tdoc);
+    }
 
     if (!tidyOptGetBool(tdoc, TidyQuiet))
         tidyGeneralInfo(tdoc);
diff -urN F:\FGCVS\tidy\src\access.c tidycvs6\src\access.c
--- F:\FGCVS\tidy\src\access.c     Sat Sep 16 11:39:23 2006
+++ tidycvs6\src\access.c    Mon Sep 25 19:50:46 2006
@@ -43,7 +43,6 @@
 #include "attrs.h"
 #include "tmbstr.h"
 
-
 /* 
     The accessibility checks to perform depending on user's desire.
 
@@ -157,6 +156,61 @@
 static void CheckEmbed( TidyDocImpl* doc, Node* node );
 static void CheckListUsage( TidyDocImpl* doc, Node* node );
 
+#ifdef TIDY_STORE_ORIGINAL_TEXT
+/*****************************************************
+* OriginalIsWhite
+*
+* See if the ORIGINAL text was ALL WHITE
+*****************************************************/
+uint OriginalIsWhite( TidyDocImpl* doc, Node* node, tmbstr srch )
+{
+   uint iswhite = no;
+   uint ulen = TY_(tmbstrlen)(srch);
+   tmbstr fnd = NULL;
+   if (node && node->otext && ulen)
+   {
+      tmbstr item = node->otext;
+      /* fnd = strstr(item, srch); */
+      if ( !fnd )
+      {
+         while( *item && (TY_(tmbstrlen)(item) > ulen) )
+         {
+            if ( TY_(tmbstrncasecmp)( item, srch, ulen ) == 0 )
+            {
+               fnd = item;
+               break;
+            }
+            item++;
+         }
+      }
+      if ( fnd )
+      {
+         fnd += TY_(tmbstrlen)(srch);
+         if ((*fnd == '"')||(*fnd == '\''))
+         {
+            tmbchar chr = *fnd; /* extract the character */
+            fnd++; /* proceed until the end, checking */
+            ulen = 0;   /* start counter of white */
+            while ( *fnd && (*fnd != chr) &&
+                   TY_(IsWhite)( *fnd ))
+            {
+               fnd++;
+               ulen++;
+            }
+            if (ulen && ( *fnd == chr ) )
+               iswhite = yes; /* all white space */
+         }
+         else
+         {
+            /* what to do if NO quote, or double quote delimiter? */
+         }
+      }
+   }
+   return iswhite;
+}
+
+#endif /* #ifdef TIDY_STORE_ORIGINAL_TEXT */
+
 /*
     GetFileExtension takes a path and returns the extension
     portion of the path (if any).
@@ -682,6 +736,8 @@
     Bool HasValidWidthBullet = no;
     Bool HasValidWidthHR = no; 
     Bool HasTriggeredMissingLongDesc = no;
+    int width = 0;
+    int height = 0;
 
     AttVal* av;
                 
@@ -746,7 +802,7 @@
                 /* Longdesc attribute needed if width attribute is not present. */
                 if ( hasValue(av) )
                 {
-                    int width = atoi( av->value );
+                    width = atoi( av->value );
                     if ( width < 30 )
                         HasValidWidthBullet = yes;
 
@@ -765,8 +821,12 @@
             else if ( attrIsHEIGHT(av) )
             {
                 /* Longdesc attribute needed if height attribute not present. */
-                if ( hasValue(av) && atoi(av->value) < 30 )
-                    HasValidHeight = yes;
+                if ( hasValue(av) )
+                {
+                   height = atoi(av->value);
+                   if ( height < 30 )
+                     HasValidHeight = yes;
+                }
             }
 
             /* 
@@ -860,12 +920,14 @@
             (HasValidWidthBullet == yes)&&
             (HasValidHeight == yes))
         {
+            TY_(ReportAccessError)( doc, node, IMG_MISSING_ALT_BULLET);
         }
 
         if ((HasAlt == no)&&
             (HasValidWidthHR == yes)&&
             (HasValidHeight == yes))
         {
+            TY_(ReportAccessError)( doc, node, IMG_MISSING_ALT_H_RULE);
         }
 
         if (HasAlt == no)
@@ -1277,15 +1339,19 @@
             if ((word != NULL)&&
                 (IsWhitespace (word) == no))
             {
-                if (TY_(tmbstrcmp) (word, "more") == 0)
+                if (TY_(tmbstrcasecmp) (word, "more") == 0)
                 {
                     HasTriggeredLink = yes;
-                }
-
-                if (TY_(tmbstrcmp) (word, "click here") == 0)
+                    TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_MORE);
+                } 
+                else if (TY_(tmbstrcasecmp) (word, "click here") == 0)
                 {
                     TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_CLICK_HERE);
                 }
+                else if (TY_(tmbstrcasecmp) (word, "follow this") == 0)
+                {
+                    TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_FOLLOW_THIS);
+                }
 
                 if (HasTriggeredLink == no)
                 {
@@ -1430,6 +1496,17 @@
                         numValidTH++;
                 }
             }
+            else if ( node->content && nodeIsTH( node->content ) )
+            {
+               Node * tmp = node->content;
+               doc->access.HasTH = yes;
+               if ( tmp->content && TY_(nodeIsText)(tmp->content) )
+               {
+                   ctmbstr word = textFromOneNode( doc, tmp->content);
+                   if ( !IsWhitespace(word) )
+                        numValidTH++;
+               }
+            }
         }
         
         node = node->next;
@@ -1495,7 +1572,6 @@
         doc->access.HasInvalidColumnHeader = yes;
 }
 
-
 /*****************************************************
 * CheckTH
 *
@@ -1528,7 +1604,18 @@
                     (TY_(tmbstrlen)(av->value) == 0))
                 {
                     HasAbbr = yes;
+#ifdef TIDY_STORE_ORIGINAL_TEXT
+                    {
+                       tmbstr srch = "abbr=";
+                       uint iswhite = OriginalIsWhite( doc, node, srch );
+                       if (iswhite)
+                          TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_SPACES);
+                       else
+                          TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_NULL);
+                    }
+#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT */
                     TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_NULL);
+#endif
                 }
                 
                 if ((IsWhitespace (av->value) == yes)&&
@@ -1660,7 +1747,6 @@
     }
 }
 
-
 /****************************************************
 * CheckTable
 *
@@ -1703,7 +1789,18 @@
                 if ( av->value == NULL || TY_(tmbstrlen)(av->value) == 0 )
                 {
                     HasSummary = yes;
+#ifdef TIDY_STORE_ORIGINAL_TEXT
+                    {
+                       tmbstr srch = "summary=";
+                       uint iswhite = OriginalIsWhite( doc, node, srch );
+                       if (iswhite)
+                          TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_SPACES );
+                       else
+                          TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_NULL );
+                    }
+#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT  */
                     TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_NULL );
+#endif
                 }
                 else if ( IsWhitespace(av->value) && TY_(tmbstrlen)(av->value) > 0 )
                 {
@@ -2068,7 +2165,6 @@
     }
 }
 
-
 /***************************************************************
 * CheckInputAttributes 
 *
@@ -2080,6 +2176,8 @@
 {
     Bool HasAlt = no;
     Bool MustHaveAlt = no;
+    Bool HasValue = no;
+    Bool WithValue = no;
     AttVal* av;
 
     /* Checks attributes within the INPUT element */
@@ -2102,6 +2200,15 @@
         {
             HasAlt = yes;
         }
+
+        if ( attrIsVALUE(av) )
+        {
+           HasValue = yes;
+           if ( hasValue(av) )
+           {
+              WithValue = yes;
+           }
+        }
     }
 
     if ( MustHaveAlt && !HasAlt )
@@ -2109,6 +2216,30 @@
         TY_(ReportAccessError)( doc, node, IMG_BUTTON_MISSING_ALT );
     }
 
+    if (Level3_Enabled( doc ))
+    {
+       if ( HasValue )
+       {
+          if ( !WithValue )
+          {
+#ifdef TIDY_STORE_ORIGINAL_TEXT
+             /* now we can differentiate by checking the ORIGINAL */
+             tmbstr srch = "value=";
+             uint iswhite = OriginalIsWhite( doc, node, srch );
+             if (iswhite)
+                TY_(ReportAccessWarning)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_SPACES);
+             else
+                TY_(ReportAccessWarning)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_NULL);
+#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT */
+              TY_(ReportAccessError)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_NULL );
+#endif /* #ifdef TIDY_STORE_ORIGINAL_TEXT */
+          }
+       }
+       else
+       {
+           TY_(ReportAccessError)( doc, node, FORM_CONTROL_REQUIRES_DEFAULT_TEXT );
+       }
+    }
 }
 
 
@@ -2128,6 +2259,11 @@
 
     if (Level1_Enabled( doc ))
     {
+        if ( doc->badAccess & ACC_NOFRAMES_INVALID_LINK )
+        {
+           TY_(ReportAccessError)( doc, node, NOFRAMES_INVALID_LINK);
+           doc->badAccess &= ~(ACC_NOFRAMES_INVALID_LINK); /* emit only once */
+        }
         if (node->content != NULL)
         {
             temp = node->content;
@@ -2863,6 +2999,9 @@
     {
         Node* DTnode = TY_(FindDocType)(doc);
 
+        if (DTnode && DTnode->implicit) /* this has been added by tidy, so */
+           DTnode = NULL;  /* the document had NO doctype */
+
         /* If the doctype has been added by tidy, DTnode->end will be 0. */
         if (DTnode && DTnode->end != 0)
         {
@@ -3000,8 +3139,11 @@
 
     if ( msgcode )
     {
-        if ( !nodeIsLI(node->content) )
+       if ( !nodeIsLI(node->content) ) {
             TY_(ReportAccessWarning)( doc, node, msgcode );
+       } else if ( node->implicit ) {  /* if a tidy added node */
+            TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_LI );
+       }
     }
     else if ( nodeIsLI(node) )
     {
@@ -3013,10 +3155,90 @@
              ( !nodeIsOL(node->parent) && !nodeIsUL(node->parent) ) )
         {
             TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_LI );
+        } else if ( node->implicit && node->parent &&
+            ( nodeIsOL(node->parent) || nodeIsUL(node->parent) ) ) {
+           /* if a tidy added LI node, then */
+           if ( nodeIsUL(node->parent) )
+              TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_UL );
+           else
+              TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_OL );
+
         }
     }
 }
 
+typedef struct tagFORMORDER {
+   uint order;
+   uint ordlabel;
+   uint ordinput;
+   uint ordtext;
+} FORMORDER, * PFORMORDER;
+
+static void CheckFORMOrder(TidyDocImpl* doc, Node* node, PFORMORDER pfo)
+{
+   if ( pfo->ordlabel && pfo->ordinput && pfo->ordtext )
+   {
+      if ( (pfo->ordlabel < pfo->ordtext) && (pfo->ordtext < pfo->ordinput) )
+      {
+         /* some TEXT occurs between LABEL and INPUT */
+         TY_(ReportAccessError)( doc, node, LABEL_NEEDS_REPOSITIONING_BEFORE_INPUT );
+         pfo->ordtext = 0;
+      }
+      else if ( (pfo->ordinput < pfo->ordtext) && (pfo->ordtext < pfo->ordlabel) )
+      {
+         /* some TEXT occurs between INPUT and LABEL */
+         TY_(ReportAccessError)( doc, node, LABEL_NEEDS_REPOSITIONING_AFTER_INPUT );
+         pfo->ordtext = 0;
+      }
+   }
+}
+
+static void SetFORMOrder(TidyDocImpl* doc, Node* node, PFORMORDER pfo)
+{
+   if ( nodeIsLABEL(node) )
+   {
+      pfo->ordlabel = pfo->order;
+   }
+   else if ( nodeIsINPUT( node ) )
+   {
+      pfo->ordinput = pfo->order;
+   }
+   else if ( TY_(nodeIsText)(node) )
+   {
+      ctmbstr word = textFromOneNode( doc, node );
+      if ( word != NULL && !IsWhitespace(word) )
+         pfo->ordtext = pfo->order;
+   }
+}
+
+/******************************************************
+* CheckFORM
+*
+* Ensures that text is not between any label and input,
+* and not between input and label ...
+******************************************************/
+static void CheckFORM( TidyDocImpl* doc, Node* node )
+{
+   if (Level2_Enabled( doc ))
+   {
+      Node* child;
+      static FORMORDER _s_fo;
+      PFORMORDER pfo = &_s_fo;
+      pfo->order = 0;
+      pfo->ordlabel = 0;
+      pfo->ordinput = 0;
+      pfo->ordtext = 0;
+      /* check all children of FORM */
+      for ( child = node->content; child != NULL; child = child->next )
+      {
+         pfo->order++;
+         SetFORMOrder( doc, child, pfo );
+         CheckFORMOrder( doc, child, pfo );
+      }
+   }
+}
+
+
 /************************************************************
 * InitAccessibilityChecks
 *
@@ -3263,6 +3485,12 @@
     {
         CheckListUsage( doc, node );
     }
+    /* Check 'FORM' */
+    else if ( nodeIsFORM(node) )
+    {
+        CheckFORM( doc, node );
+    }
+
 
     /* Recursively check all child nodes.
     */
@@ -3323,6 +3551,7 @@
     /* Cleanup */
     FreeAccessibilityChecks( doc );
 }
+
 
 #endif
 
diff -urN F:\FGCVS\tidy\src\iso639.c tidycvs6\src\iso639.c
--- F:\FGCVS\tidy\src\iso639.c     Thu Jan 01 01:00:00 1970
+++ tidycvs6\src\iso639.c    Mon Sep 25 19:50:34 2006
@@ -0,0 +1,85 @@
+
+/* iso639.c -- carry out language check
+
+  Copyright University of Toronto
+  Portions (c) 1998-2006 (W3C) MIT, ERCIM, Keio University
+  See tidy.h for the copyright notice.
+  
+*/
+
+#include "tidy-int.h"
+
+#if SUPPORT_ACCESSIBILITY_CHECKS
+
+#include "tmbstr.h"
+
+tmbstr ISO639_2[] = {
+"aar", "abk", "ace", "ach", "ada", "ady", "afa", "afh", "afr", "ain", "aka", 
+"akk", "alb", "ale", "alg", "alt", "amh", "ang", "anp", "apa", "ara", "arc", 
+"arg", "arm", "arn", "arp", "art", "arw", "asm", "ast", "ath", "aus", "ava", 
+"ave", "awa", "aym", "aze", "bad", "bai", "bak", "bal", "bam", "ban", "baq", 
+"bas", "bat", "bej", "bel", "bem", "ben", "ber", "bho", "bih", "bik", "bin", 
+"bis", "bla", "bnt", "bod", "bos", "bra", "bre", "btk", "bua", "bug", "bul", 
+"bur", "byn", "cad", "cai", "car", "cat", "cau", "ceb", "cel", "ces", "cha", 
+"chb", "che", "chg", "chi", "chk", "chm", "chn", "cho", "chp", "chr", "chu", 
+"chv", "chy", "cmc", "cop", "cor", "cos", "cpe", "cpf", "cpp", "cre", "crh", 
+"crp", "csb", "cus", "cym", "cze", "dak", "dan", "dar", "day", "del", "den", 
+"deu", "dgr", "din", "div", "doi", "dra", "dsb", "dua", "dum", "dut", "dyu", 
+"dzo", "efi", "egy", "eka", "ell", "elx", "eng", "enm", "epo", "est", "eus", 
+"ewe", "ewo", "fan", "fao", "fas", "fat", "fij", "fil", "fin", "fiu", "fon", 
+"fra", "fre", "frm", "fro", "frr", "frs", "fry", "ful", "fur", "gaa", "gay", 
+"gba", "gem", "geo", "ger", "gez", "gil", "gla", "gle", "glg", "glv", "gmh", 
+"goh", "gon", "gor", "got", "grb", "grc", "gre", "grn", "gsw", "guj", "gwi", 
+"hai", "hat", "hau", "haw", "heb", "her", "hil", "him", "hin", "hit", "hmn", 
+"hmo", "hrv", "hsb", "hun", "hup", "hye", "iba", "ibo", "ice", "ido", "iii", 
+"ijo", "iku", "ile", "ilo", "ina", "inc", "ind", "ine", "inh", "ipk", "ira", 
+"iro", "isl", "ita", "jav", "jbo", "jpn", "jpr", "jrb", "kaa", "kab", "kac", 
+"kal", "kam", "kan", "kar", "kas", "kat", "kau", "kaw", "kaz", "kbd", "kha", 
+"khi", "khm", "kho", "kik", "kin", "kir", "kmb", "kok", "kom", "kon", "kor", 
+"kos", "kpe", "krc", "krl", "kro", "kru", "kua", "kum", "kur", "kut", "lad", 
+"lah", "lam", "lao", "lat", "lav", "lez", "lim", "lin", "lit", "lol", "loz", 
+"ltz", "lua", "lub", "lug", "lui", "lun", "luo", "lus", "mac", "mad", "mag", 
+"mah", "mai", "mak", "mal", "man", "mao", "map", "mar", "mas", "may", "mdf", 
+"mdr", "men", "mga", "mic", "min", "mis", "mkd", "mkh", "mlg", "mlt", "mnc", 
+"mni", "mno", "moh", "mol", "mon", "mos", "mri", "msa", "mul", "mun", "mus", 
+"mwl", "mwr", "mya", "myn", "myv", "nah", "nai", "nap", "nau", "nav", "nbl", 
+"nde", "ndo", "nds", "nep", "new", "nia", "nic", "niu", "nld", "nno", "nob", 
+"nog", "non", "nor", "nqo", "nso", "nub", "nwc", "nya", "nym", "nyn", "nyo", 
+"nzi", "oci", "oji", "ori", "orm", "osa", "oss", "ota", "oto", "paa", "pag", 
+"pal", "pam", "pan", "pap", "pau", "peo", "per", "phi", "phn", "pli", "pol", 
+"pon", "por", "pra", "pro", "pus", "qaa-qtz", "que", "raj", "rap", "rar", "roa", 
+"roh", "rom", "ron", "rum", "run", "rup", "rus", "sad", "sag", "sah", "sai", 
+"sal", "sam", "san", "sas", "sat", "scc", "scn", "sco", "scr", "sel", "sem", 
+"sga", "sgn", "shn", "sid", "sin", "sio", "sit", "sla", "slk", "slo", "slv", 
+"sma", "sme", "smi", "smj", "smn", "smo", "sms", "sna", "snd", "snk", "sog", 
+"som", "son", "sot", "spa", "sqi", "srd", "srn", "srp", "srr", "ssa", "ssw", 
+"suk", "sun", "sus", "sux", "swa", "swe", "syr", "tah", "tai", "tam", "tat", 
+"tel", "tem", "ter", "tet", "tgk", "tgl", "tha", "tib", "tig", "tir", "tiv", 
+"tkl", "tlh", "tli", "tmh", "tog", "ton", "tpi", "tsi", "tsn", "tso", "tuk", 
+"tum", "tup", "tur", "tut", "tvl", "twi", "tyv", "udm", "uga", "uig", "ukr", 
+"umb", "und", "urd", "uzb", "vai", "ven", "vie", "vol", "vot", "wak", "wal", 
+"war", "was", "wel", "wen", "wln", "wol", "xal", "xho", "yao", "yap", "yid", 
+"yor", "ypk", "zap", "zen", "zha", "zho", "znd", "zul", "zun", "zxx", 
+ 0 };
+
+tmbstr ISO639_1[] = {
+"aa", "ab", "ae", "af", "ak", "am", "an", "ar", "as", "av", "ay", "az", "ba", 
+"be", "bg", "bh", "bi", "bm", "bn", "bo", "br", "bs", "ca", "ce", "ch", "co", 
+"cr", "cs", "cu", "cv", "cy", "da", "de", "dv", "dz", "ee", "el", "en", "eo", 
+"es", "et", "eu", "fa", "ff", "fi", "fj", "fo", "fr", "fy", "ga", "gd", "gl", 
+"gn", "gu", "gv", "ha", "he", "hi", "ho", "hr", "ht", "hu", "hy", "hz", "ia", 
+"id", "ie", "ig", "ii", "ik", "io", "is", "it", "iu", "ja", "jv", "ka", "kg", 
+"ki", "kj", "kk", "kl", "km", "kn", "ko", "kr", "ks", "ku", "kv", "kw", "ky", 
+"la", "lb", "lg", "li", "ln", "lo", "lt", "lu", "lv", "mg", "mh", "mi", "mk", 
+"ml", "mn", "mo", "mr", "ms", "mt", "my", "na", "nb", "nd", "ne", "ng", "nl", 
+"nn", "no", "nr", "nv", "ny", "oc", "oj", "om", "or", "os", "pa", "pi", "pl", 
+"ps", "pt", "qu", "rm", "rn", "ro", "ru", "rw", "sa", "sc", "sd", "se", "sg", 
+"si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "ss", "st", "su", "sv", "sw", 
+"ta", "te", "tg", "th", "ti", "tk", "tl", "tn", "to", "tr", "ts", "tt", "tw", 
+"ty", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "wo", "xh", "yi", "yo", 
+"za", "zh", "zu", 
+ 0 };
+
+#endif /* #if SUPPORT_ACCESSIBILITY_CHECKS */
+
+/* eof - iso639.c */
diff -urN F:\FGCVS\tidy\src\lexer.c tidycvs6\src\lexer.c
--- F:\FGCVS\tidy\src\lexer.c Sat Sep 16 11:39:25 2006
+++ tidycvs6\src\lexer.c     Fri Sep 22 11:21:18 2006
@@ -1648,6 +1648,7 @@
     else
     {
         doctype = NewDocTypeNode(doc);
+        doctype->implicit = 1;   /* Tidy added this doctype! */
         doctype->element = TY_(tmbstrdup)("html");
     }
 
diff -urN F:\FGCVS\tidy\src\localize.c tidycvs6\src\localize.c
--- F:\FGCVS\tidy\src\localize.c   Sat Sep 16 11:39:25 2006
+++ tidycvs6\src\localize.c  Sun Sep 24 14:46:50 2006
@@ -168,6 +168,8 @@
   { IMG_ALT_SUSPICIOUS_FILE_SIZE,                  "[1.1.1.3]: suspicious 'alt' text (file size)."                            }, /* Access */
   { IMG_ALT_SUSPICIOUS_PLACEHOLDER,                "[1.1.1.4]: suspicious 'alt' text (placeholder)."                          }, /* Access */
   { IMG_ALT_SUSPICIOUS_TOO_LONG,                   "[1.1.1.10]: suspicious 'alt' text (too long)."                            }, /* Access */
+  { IMG_MISSING_ALT_BULLET,                        "[1.1.1.11]: ![]() missing 'alt' text (bullet)."                           }, /* Access */
+  { IMG_MISSING_ALT_H_RULE,                        "[1.1.1.12]:
 missing 'alt' text (bullet)."                           }, /* Access */
+  { IMG_MISSING_ALT_H_RULE,                        "[1.1.1.12]: ![]() missing 'alt' text (horizontal rule)."                  }, /* Access */
   { IMG_MISSING_LONGDESC_DLINK,                    "[1.1.2.1]:
 missing 'alt' text (horizontal rule)."                  }, /* Access */
   { IMG_MISSING_LONGDESC_DLINK,                    "[1.1.2.1]: ![]() missing 'longdesc' and d-link."                          }, /* Access */
   { IMG_MISSING_DLINK,                             "[1.1.2.2]:
 missing 'longdesc' and d-link."                          }, /* Access */
   { IMG_MISSING_DLINK,                             "[1.1.2.2]: ![]() missing d-link."                                         }, /* Access */
   { IMG_MISSING_LONGDESC,                          "[1.1.2.3]:
 missing d-link."                                         }, /* Access */
   { IMG_MISSING_LONGDESC,                          "[1.1.2.3]: ![]() missing 'longdesc'."                                     }, /* Access */
@@ -260,6 +262,8 @@
   { SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE,  "[9.3.1.6]: 
+
 missing 'longdesc'."                                     }, /* Access */
@@ -260,6 +262,8 @@
   { SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE,  "[9.3.1.6]: 
+