I am attaching a partial patch (see below for explanation of partial) along with sample files, I hope others here can help finish this. Goal: Produce well-formed XHTML. What I have Fixed: 0) Ensure all tagnames are lower case. 1) Emit correct doctype and xhtml namespace. 2) Emit /> to close meta tags. 3) Emit to close bullets (not all cases covered) 4) Ensured that all attribute values are quoted. ToDo: A) Emit closing li tags in all cases. B) Emit closing

to close paragraphs. C) Ensure that author and date bits on the bottom are wrapped in a

...

where xxx is author or date as appropriate. I'm attaching a bullets.org file, and the final xhtml output I'd like to produce. *** org.el 2006/05/26 01:29:49 1.1 --- org.el 2006/05/26 01:57:39 *************** *** 12609,12634 **** ;; File header (insert (format ! " ! %s ! ! ! ! %s " ! language (org-html-expand title) (or charset "iso-8859-1") date time author style)) (insert (or (plist-get opt-plist :preamble) "")) (when (plist-get opt-plist :auto-preamble) ! (if title (insert (concat "

" ! (org-html-expand title) "

\n"))) ; (if author (insert (concat (nth 1 lang-words) ": " author "\n"))) ; (if email (insert (concat "<" ; email ">\n"))) --- 12609,12636 ---- ;; File header (insert (format ! " ! ! %s ! ! ! ! %s " ! language language (org-html-expand title) (or charset "iso-8859-1") date time author style)) (insert (or (plist-get opt-plist :preamble) "")) (when (plist-get opt-plist :auto-preamble) ! (if title (insert (concat "

" ! (org-html-expand title) "

\n"))) ; (if author (insert (concat (nth 1 lang-words) ": " author "\n"))) ; (if email (insert (concat "<" ; email ">\n"))) *************** *** 12639,12645 **** (if org-export-with-toc (progn ! (insert (format "

%s

\n" (nth 3 lang-words))) (insert "