diff -ru cl-who-0.11.1.old/doc/index.html cl-who-0.11.1/doc/index.html
--- cl-who-0.11.1.old/doc/index.html	2010-08-14 00:24:46.000000000 +0300
+++ cl-who-0.11.1/doc/index.html	2010-08-15 18:11:10.000000000 +0300
@@ -436,7 +436,7 @@
 CL-WHO exports the following symbols:
 
 <p><br>[Macro]
-<br><a class=none name="with-html-output"><b>with-html-output</b> <i>(var <tt>&amp;optional</tt> stream <tt>&amp;key</tt> prologue indent) declaration* form*</i> =&gt; <i>result*</i></a>
+<br><a class=none name="with-html-output"><b>with-html-output</b> <i>(var <tt>&amp;optional</tt> stream <tt>&amp;key</tt> prologue indent downcase-tokens-p) declaration* form*</i> =&gt; <i>result*</i></a>
 
 <blockquote><br> This is the main macro of CL-WHO. It will transform
 its body by the transformation rules described
@@ -454,18 +454,22 @@
 is guaranteed to be the first thing sent to the stream from within the
 body of this macro. If <code><i>prologue</i></code> is <code>T</code>
 the prologue string is the value
-of <a href="#*prologue*"><code>*PROLOGUE*</code></a>. CL-WHO will
-usually try not to insert any unnecessary whitespace in order to save
-bandwidth. However, if <code><i>indent</i></code> is <em>true</em>
-line breaks will be inserted and nested tags will be indented
-properly. The value of <code><i>indent</i></code> - if it is an
-integer - will be taken as the initial indentation. If it is not an
-integer it is assumed to mean <code>0</code>. (But note that
-indentation might change the semantics of the generated HTML.  This is
-for example the case for the <code>PRE</code>
-and <code>TEXTAREA</code> tags, and in certain situations additional
-whitespace might also change the layout of tables.)
-The <code><i>results</i></code> are the values returned by
+of <a href="#*prologue*"><code>*PROLOGUE*</code></a>. <code><i>downcase-tokens-p</code></i>
+is a boolean whose default value is equal to
+<a href="#*downcase-tokens-p*"><code>*DOWNCASE-TOKENS-P*</code></a>.
+If <code><i>dowcase-tokens-p</i></code> is equal to <code>NIL</code>,
+then keyword symbols representing a tag or attributes will be
+case-sensitive.  CL-WHO will usually try not to insert any unnecessary
+whitespace in order to save bandwidth. However,
+if <code><i>indent</i></code> is <em>true</em> line breaks will be
+inserted and nested tags will be indented properly. The value
+of <code><i>indent</i></code> - if it is an integer - will be taken as
+the initial indentation. If it is not an integer it is assumed to
+mean <code>0</code>. (But note that indentation might change the
+semantics of the generated HTML.  This is for example the case for
+the <code>PRE</code> and <code>TEXTAREA</code> tags, and in certain
+situations additional whitespace might also change the layout of
+tables.)  The <code><i>results</i></code> are the values returned by
 the <code><i>forms</i></code>.
 <p>
 Note that the keyword arguments <code><i>prologue</i></code> and <code><i>indent</i></code> are used at macro expansion time.
@@ -494,7 +498,7 @@
 </blockquote>
 
 <p><br>[Macro]
-<br><a class=none name="with-html-output-to-string"><b>with-html-output-to-string</b> <i>(var <tt>&amp;optional</tt> string-form <tt>&amp;key</tt> element-type prologue indent) declaration* form*</i> =&gt; <i>result*</i></a>
+<br><a class=none name="with-html-output-to-string"><b>with-html-output-to-string</b> <i>(var <tt>&amp;optional</tt> string-form <tt>&amp;key</tt> element-type prologue indent dowcase-tokens-p) declaration* form*</i> =&gt; <i>result*</i></a>
 
 <blockquote><br>
 This is just a thin wrapper around <a href="#with-html-output"><code>WITH-HTML-OUTPUT</code></a>. Indeed, the wrapper is so thin that the best explanation probably is to show its definition:
@@ -502,19 +506,23 @@
 (defmacro with-html-output-to-string ((var &amp;optional string-form
                                            &amp;key (element-type 'character)
                                                 prologue
-                                                indent)
+                                                indent
+						(downcase-tokens-p *dowcase-tokens-p*)
                                       &amp;body body)
   &quot;Transform the enclosed BODY consisting of HTML as s-expressions
 into Lisp code which creates the corresponding HTML as a string.&quot;
   `(with-output-to-string (,var ,string-form :elementy-type ,element-type)
-    (with-html-output (,var nil :prologue ,prologue :indent ,indent)
+    (with-html-output (,var nil
+                            :prologue ,prologue
+                            :indent ,indent
+                            :dowcase-tokens-p ,dowcase-tokens-p)
       ,@body)))
 </pre>
 Note that the <code><i>results</i></code> of this macro are determined by the behaviour of <a href="http://www.lispworks.com/reference/HyperSpec/Body/m_w_out_.htm"><code>WITH-OUTPUT-TO-STRING</code></a>.
 </blockquote>
 
 <p><br>[Macro]
-<br><a class=none name="show-html-expansion"><b>show-html-expansion</b> <i>(var <tt>&amp;optional</tt> stream <tt>&amp;key</tt> prologue indent) declaration* form*</i> =&gt;  <tt>&lt;no values&gt;</tt></a>
+<br><a class=none name="show-html-expansion"><b>show-html-expansion</b> <i>(var <tt>&amp;optional</tt> stream <tt>&amp;key</tt> prologue indent downcase-tokens-p) declaration* form*</i> =&gt;  <tt>&lt;no values&gt;</tt></a>
 
 <blockquote><br>
 This macro is intended for debugging purposes. It'll print to <code>*STANDARD-OUTPUT*</code> the code which would have been generated by <a href="#with-html-output"><code>WITH-HTML-OUTPUT</code></a> had it been invoked with the same arguments.
diff -ru cl-who-0.11.1.old/who.lisp cl-who-0.11.1/who.lisp
--- cl-who-0.11.1.old/who.lisp	2010-08-14 00:24:46.000000000 +0300
+++ cl-who-0.11.1/who.lisp	2010-08-14 00:36:04.000000000 +0300
@@ -439,7 +439,8 @@
 
 (defmacro with-html-output ((var &optional stream
                                  &key prologue
-                                      ((:indent *indent*) *indent*))
+                                      ((:indent *indent*) *indent*)
+                                      (downcase-tokens-p *downcase-tokens-p*))
                             &body body)
   "Transform the enclosed BODY consisting of HTML as s-expressions
 into Lisp code to write the corresponding HTML as strings to VAR -
@@ -451,24 +452,30 @@
   (when (eq prologue t)
     (setq prologue *prologue*))
   `(let ((,var ,(or stream var)))
-    ,(tree-to-commands body var prologue)))
+     ,(let ((*downcase-tokens-p* downcase-tokens-p))
+        (tree-to-commands body var prologue))))
 
 (defmacro with-html-output-to-string ((var &optional string-form
                                            &key (element-type ''character)
                                                 prologue
-                                                indent)
+                                                indent
+                                                (downcase-tokens-p *downcase-tokens-p*))
                                       &body body)
   "Transform the enclosed BODY consisting of HTML as s-expressions
 into Lisp code which creates the corresponding HTML as a string."
   `(with-output-to-string (,var ,string-form
                                 #-(or :ecl :cmu :sbcl) :element-type
                                 #-(or :ecl :cmu :sbcl) ,element-type)
-    (with-html-output (,var nil :prologue ,prologue :indent ,indent)
+    (with-html-output (,var nil
+                            :prologue ,prologue
+                            :indent ,indent
+                            :downcase-tokens-p ,downcase-tokens-p)
       ,@body)))
 
 (defmacro show-html-expansion ((var &optional stream
                                     &key prologue
-                                         ((:indent *indent*) *indent*))
+                                         ((:indent *indent*) *indent*)
+                                         (downcase-tokens-p *downcase-tokens-p*))
                                &body body)
   "Show the macro expansion of WITH-HTML-OUTPUT."
   (when (and *indent*
@@ -477,7 +484,8 @@
   (when (eq prologue t)
     (setq prologue *prologue*))
   `(pprint '(let ((,var ,(or stream var)))
-             ,(tree-to-commands body var prologue))))
+             ,(let ((*downcase-tokens-p* downcase-tokens-p))
+                (tree-to-commands body var prologue)))))
 
 ;; stuff for Nikodemus Siivola's HYPERDOC
 ;; see <http://common-lisp.net/project/hyperdoc/>
