diff -Naur hunchentoot-0.9.1/specials.lisp hunchentoot-new/specials.lisp
--- hunchentoot-0.9.1/specials.lisp	2007-04-19 18:10:39.000000000 +0900
+++ hunchentoot-new/specials.lisp	2007-05-01 10:57:23.000000000 +0900
@@ -37,56 +37,59 @@
       (defvar ,name)
       (setf (documentation ',name 'variable) ,doc-string)))
 
-  (defmacro def-http-return-code (name value)
+  (defconstant +http-code-reason-table+ (make-hash-table :test #'eq))
+  
+  (defmacro def-http-return-code (name value &optional (doc-string "One of the common HTTP return codes."))
     "Shortcut to define constants for return codes."
     `(eval-when (:compile-toplevel :execute :load-toplevel)
-       (defconstant ,name ,value "One of the common HTTP return codes."))))
+       (defconstant ,name ,value ,(format nil "HTTP return code for ~A" doc-string))
+       (setf (gethash ,value +http-code-reason-table+) ,doc-string))))
 
 (defconstant +crlf+ #.(format nil "~C~C" #\Return #\Linefeed)
   "A constant string consisting of the two ASCII characters CR and LF.")
 
-(def-http-return-code +http-continue+ 100)
-(def-http-return-code +http-switching-protocols+ 101)
-(def-http-return-code +http-ok+ 200)
-(def-http-return-code +http-created+ 201)
-(def-http-return-code +http-accepted+ 202)
-(def-http-return-code +http-non-authoritative-information+ 203)
-(def-http-return-code +http-no-content+ 204)
-(def-http-return-code +http-reset-content+ 205)
-(def-http-return-code +http-partial-content+ 206)
-(def-http-return-code +http-multi-status+ 207)
-(def-http-return-code +http-multiple-choices+ 300)
-(def-http-return-code +http-moved-permanently+ 301)
-(def-http-return-code +http-moved-temporarily+ 302)
-(def-http-return-code +http-see-other+ 303)
-(def-http-return-code +http-not-modified+ 304)
-(def-http-return-code +http-use-proxy+ 305)
-(def-http-return-code +http-temporary-redirect+ 307)
-(def-http-return-code +http-bad-request+ 400)
-(def-http-return-code +http-authorization-required+ 401)
-(def-http-return-code +http-payment-required+ 402)
-(def-http-return-code +http-forbidden+ 403)
-(def-http-return-code +http-not-found+ 404)
-(def-http-return-code +http-method-not-allowed+ 405)
-(def-http-return-code +http-not-acceptable+ 406)
-(def-http-return-code +http-proxy-authentication-required+ 407)
-(def-http-return-code +http-request-time-out+ 408)
-(def-http-return-code +http-conflict+ 409)
-(def-http-return-code +http-gone+ 410)
-(def-http-return-code +http-length-required+ 411)
-(def-http-return-code +http-precondition-failed+ 412)
-(def-http-return-code +http-request-entity-too-large+ 413)
-(def-http-return-code +http-request-uri-too-large+ 414)
-(def-http-return-code +http-unsupported-media-type+ 415)
-(def-http-return-code +http-requested-range-not-satisfiable+ 416)
-(def-http-return-code +http-expectation-failed+ 417)
-(def-http-return-code +http-failed-dependency+ 424)
-(def-http-return-code +http-internal-server-error+ 500)
-(def-http-return-code +http-not-implemented+ 501)
-(def-http-return-code +http-bad-gateway+ 502)
-(def-http-return-code +http-service-unavailable+ 503)
-(def-http-return-code +http-gateway-time-out+ 504)
-(def-http-return-code +http-version-not-supported+ 505)
+(def-http-return-code +http-continue+ 100 "Continue")
+(def-http-return-code +http-switching-protocols+ 101 "Switching Protocols")
+(def-http-return-code +http-ok+ 200 "OK")
+(def-http-return-code +http-created+ 201 "Created")
+(def-http-return-code +http-accepted+ 202 "Accepted")
+(def-http-return-code +http-non-authoritative-information+ 203 "Non-Authoritative Information")
+(def-http-return-code +http-no-content+ 204 "No Content")
+(def-http-return-code +http-reset-content+ 205 "Reset Content")
+(def-http-return-code +http-partial-content+ 206 "Partial Content")
+(def-http-return-code +http-multi-status+ 207 "Multi-Status")
+(def-http-return-code +http-multiple-choices+ 300 "Multiple Choices")
+(def-http-return-code +http-moved-permanently+ 301 "Moved Permanently")
+(def-http-return-code +http-moved-temporarily+ 302 "Moved Temporarily")
+(def-http-return-code +http-see-other+ 303 "See Other")
+(def-http-return-code +http-not-modified+ 304 "Not Modified")
+(def-http-return-code +http-use-proxy+ 305 "Use Proxy")
+(def-http-return-code +http-temporary-redirect+ 307 "Temporary Redirect")
+(def-http-return-code +http-bad-request+ 400 "Bad Request")
+(def-http-return-code +http-authorization-required+ 401 "Authorization Required")
+(def-http-return-code +http-payment-required+ 402  "Payment Required")
+(def-http-return-code +http-forbidden+ 403 "Forbidden")
+(def-http-return-code +http-not-found+ 404 "Not Found")
+(def-http-return-code +http-method-not-allowed+ 405 "Method Not Allowed")
+(def-http-return-code +http-not-acceptable+ 406 "Not Acceptable")
+(def-http-return-code +http-proxy-authentication-required+ 407 "Proxy Authentication Required")
+(def-http-return-code +http-request-time-out+ 408 "Request Time-out")
+(def-http-return-code +http-conflict+ 409 "Conflict")
+(def-http-return-code +http-gone+ 410 "Gone")
+(def-http-return-code +http-length-required+ 411 "Length Required")
+(def-http-return-code +http-precondition-failed+ 412 "Precondition Failed")
+(def-http-return-code +http-request-entity-too-large+ 413 "Request Entity Too Large")
+(def-http-return-code +http-request-uri-too-large+ 414 "Request-URI Too Large")
+(def-http-return-code +http-unsupported-media-type+ 415 "Unsupported Media Type")
+(def-http-return-code +http-requested-range-not-satisfiable+ 416 "Requested range not satisfiable")
+(def-http-return-code +http-expectation-failed+ 417 "Expectation Failed")
+(def-http-return-code +http-failed-dependency+ 424 "Failed Dependency")
+(def-http-return-code +http-internal-server-error+ 500 "Internal Server Error")
+(def-http-return-code +http-not-implemented+ 501 "Not Implemented")
+(def-http-return-code +http-bad-gateway+ 502 "Bad Gateway")
+(def-http-return-code +http-service-unavailable+ 503 "Service Unavailable")
+(def-http-return-code +http-gateway-time-out+ 504 "Gateway Time-out")
+(def-http-return-code +http-version-not-supported+ 505 "Version not supported")
 
 (defvar *approved-return-codes* '(#.+http-ok+ #.+http-no-content+
                                               #.+http-multi-status+
diff -Naur hunchentoot-0.9.1/util.lisp hunchentoot-new/util.lisp
--- hunchentoot-0.9.1/util.lisp	2007-04-04 16:52:06.000000000 +0900
+++ hunchentoot-new/util.lisp	2007-05-01 10:58:18.000000000 +0900
@@ -154,48 +154,7 @@
   "Returns a reason phrase for the HTTP return code RETURN-CODE
 \(which should be an integer) or NIL for return codes Hunchentoot
 doesn't know."
-  (case return-code
-    ((#.+http-ok+) "OK")
-    ((#.+http-moved-permanently+) "Moved Permanently")
-    ((#.+http-moved-temporarily+) "Moved Temporarily")
-    ((#.+http-not-modified+) "Not Modified")
-    ((#.+http-authorization-required+) "Authorization Required")
-    ((#.+http-forbidden+) "Forbidden")
-    ((#.+http-not-found+) "Not Found")
-    ((#.+http-internal-server-error+) "Internal Server Error")
-    ((#.+http-continue+) "Continue")
-    ((#.+http-switching-protocols+) "Switching Protocols")
-    ((#.+http-created+) "Created")
-    ((#.+http-accepted+) "Accepted")
-    ((#.+http-non-authoritative-information+) "Non-Authoritative Information")
-    ((#.+http-no-content+) "No Content")
-    ((#.+http-reset-content+) "Reset Content")
-    ((#.+http-partial-content+) "Partial Content")
-    ((#.+http-multi-status+) "Multi-Status")
-    ((#.+http-multiple-choices+) "Multiple Choices")
-    ((#.+http-see-other+) "See Other")
-    ((#.+http-use-proxy+) "Use Proxy")
-    ((#.+http-temporary-redirect+) "Temporary Redirect")
-    ((#.+http-bad-request+) "Bad Request")
-    ((#.+http-payment-required+) "Payment Required")
-    ((#.+http-method-not-allowed+) "Method Not Allowed")
-    ((#.+http-not-acceptable+) "Not Acceptable")
-    ((#.+http-proxy-authentication-required+) "Proxy Authentication Required")
-    ((#.+http-request-time-out+) "Request Time-out")
-    ((#.+http-conflict+) "Conflict")
-    ((#.+http-gone+) "Gone")
-    ((#.+http-length-required+) "Length Required")
-    ((#.+http-precondition-failed+) "Precondition Failed")
-    ((#.+http-request-entity-too-large+) "Request Entity Too Large")
-    ((#.+http-request-uri-too-large+) "Request-URI Too Large")
-    ((#.+http-unsupported-media-type+) "Unsupported Media Type")
-    ((#.+http-requested-range-not-satisfiable+) "Requested range not satisfiable")
-    ((#.+http-expectation-failed+) "Expectation Failed")
-    ((#.+http-not-implemented+) "Not Implemented")
-    ((#.+http-bad-gateway+) "Bad Gateway")
-    ((#.+http-service-unavailable+) "Service Unavailable")
-    ((#.+http-gateway-time-out+) "Gateway Time-out")
-    ((#.+http-version-not-supported+) "Version not supported")))
+  (gethash return-code +http-code-reason-table+ nil))
 
 (defun make-keyword (string &key (destructivep t))
   "Interns the upcased version of STRING into the KEYWORD package.
