diff --git a/src/tal/xmls.lisp b/src/tal/xmls.lisp
index 409d458..2135457 100644
--- a/src/tal/xmls.lisp
+++ b/src/tal/xmls.lisp
@@ -501,14 +501,18 @@ goes (assuming *convert-entities* is non-NIL)."
                                                             nil)
                                                         (state-nsstack s))))))
 
-(defrule comment ()
+(defrule comment ()  
   (and
    (match-seq #\! #\- #\-)
-   (progn
-     (loop until (match-seq #\- #\- #\>)
-           do (eat))
-     t)
-   (make-element :type 'comment)))
+   ;; The comment markers are included in the value so that
+   ;; no further special casing of rendering comment elements
+   ;; needs to be done in (defrule element)
+   (let ((val (with-output-to-string (out-val)
+		(write-sequence "<!--" out-val)
+		(loop until (match-seq #\- #\- #\>)
+		      do (write-char (eat) out-val))
+		(write-sequence "-->" out-val))))
+     (make-element :type 'comment :val (unless *strip-comments* val)))))
 
 (defrule comment-or-cdata ()
   (and
