diff -ru Quixote-2.3/publish.py Quixote-2.3_request_mod/publish.py
--- Quixote-2.3/publish.py	2005-09-22 15:18:03.000000000 +0100
+++ Quixote-2.3_request_mod/publish.py	2005-10-24 15:55:02.000000000 +0100
@@ -13,6 +13,7 @@
 from quixote import util
 from quixote.config import Config
 from quixote.http_response import HTTPResponse
+from quixote.http_request import HTTPRequest
 from quixote.logger import DefaultLogger
 
 # Error message to dispay when DISPLAY_EXCEPTIONS in config file is not
@@ -71,7 +72,7 @@
     """
 
     def __init__(self, root_directory, logger=None, session_manager=None,
-                 config=None, **kwargs):
+                 config=None, request_class = HTTPRequest, **kwargs):
         global _publisher
         if config is None:
             self.config = Config(**kwargs)
@@ -102,6 +103,7 @@
                 root_directory)
         self.root_directory = root_directory
         self._request = None
+        self._request_class = request_class
 
     def set_session_manager(self, session_manager):
         self.session_manager = session_manager
@@ -109,6 +111,11 @@
     def log(self, msg):
         self.logger.log(msg)
 
+    def create_request(self, stdin, environ):
+        """Create a request object
+        """
+        return self._request_class(stdin, environ)
+
     def parse_request(self, request):
         """Parse the request information waiting in 'request'.
         """
diff -ru Quixote-2.3/server/cgi_server.py Quixote-2.3_request_mod/server/cgi_server.py
--- Quixote-2.3/server/cgi_server.py	2004-11-10 22:37:39.000000000 +0000
+++ Quixote-2.3_request_mod/server/cgi_server.py	2005-10-24 16:01:31.000000000 +0100
@@ -14,7 +14,7 @@
         msvcrt.setmode(sys.__stdin__.fileno(), os.O_BINARY)
         msvcrt.setmode(sys.__stdout__.fileno(), os.O_BINARY)
     publisher = create_publisher()
-    request = HTTPRequest(sys.__stdin__, os.environ)
+    request = publisher.create_request(sys.__stdin__, os.environ)
     response = publisher.process_request(request)
     try:
         response.write(sys.__stdout__)
diff -ru Quixote-2.3/server/fastcgi_server.py Quixote-2.3_request_mod/server/fastcgi_server.py
--- Quixote-2.3/server/fastcgi_server.py	2004-10-28 23:52:11.000000000 +0100
+++ Quixote-2.3_request_mod/server/fastcgi_server.py	2005-10-24 16:01:06.000000000 +0100
@@ -14,7 +14,7 @@
     publisher = create_publisher()
     while _fcgi.isFCGI():
         f = _fcgi.FCGI()
-        request = HTTPRequest(f.inp, f.env)
+        request = publisher.create_request(f.inp, f.env)
         response = publisher.process_request(request)
         try:
             response.write(f.out)
diff -ru Quixote-2.3/server/medusa_server.py Quixote-2.3_request_mod/server/medusa_server.py
--- Quixote-2.3/server/medusa_server.py	2004-11-11 21:13:42.000000000 +0000
+++ Quixote-2.3_request_mod/server/medusa_server.py	2005-10-24 16:00:28.000000000 +0100
@@ -86,7 +86,7 @@
             environ[envname] = header
 
         stdin = StringIO(data)
-        qrequest = HTTPRequest(stdin, environ)
+        qrequest = self.publisher.create_request(stdin, environ)
         qresponse = self.publisher.process_request(qrequest)
 
         # Copy headers from Quixote's HTTP response
diff -ru Quixote-2.3/server/mod_python_handler.py Quixote-2.3_request_mod/server/mod_python_handler.py
--- Quixote-2.3/server/mod_python_handler.py	2005-01-19 14:26:25.000000000 +0000
+++ Quixote-2.3_request_mod/server/mod_python_handler.py	2005-10-24 15:59:42.000000000 +0100
@@ -81,8 +81,7 @@
 name2publisher = {}
 
 def run(publisher, req):
-    from quixote.http_request import HTTPRequest
-    request = HTTPRequest(apache.CGIStdin(req), apache.build_cgi_env(req))
+    request = publisher.create_request(apache.CGIStdin(req), apache.build_cgi_env(req))
     response = publisher.process_request(request)
     try:
         response.write(apache.CGIStdout(req))
diff -ru Quixote-2.3/server/scgi_server.py Quixote-2.3_request_mod/server/scgi_server.py
--- Quixote-2.3/server/scgi_server.py	2005-08-10 21:33:41.000000000 +0100
+++ Quixote-2.3_request_mod/server/scgi_server.py	2005-10-24 15:59:00.000000000 +0100
@@ -28,7 +28,7 @@
             env['SCRIPT_NAME'] = prefix
             env['PATH_INFO'] = path[len(prefix):] + env.get('PATH_INFO', '')
 
-        request = HTTPRequest(input, env)
+        request = self.publisher.create_request(input, env)
         response = self.publisher.process_request(request)
         try:
             response.write(output)
diff -ru Quixote-2.3/server/simple_server.py Quixote-2.3_request_mod/server/simple_server.py
--- Quixote-2.3/server/simple_server.py	2005-09-06 17:58:49.000000000 +0100
+++ Quixote-2.3_request_mod/server/simple_server.py	2005-10-24 15:58:16.000000000 +0100
@@ -53,8 +53,9 @@
         return env
 
     def process(self, env, include_body=True):
-        request = HTTPRequest(self.rfile, env)
-        response = get_publisher().process_request(request)
+        publisher = get_publisher()
+        response = publisher.process_request(
+            publisher.create_request(self.rfile, env))
         try:
             self.send_response(response.get_status_code(),
                                response.get_reason_phrase())
diff -ru Quixote-2.3/server/twisted_server.py Quixote-2.3_request_mod/server/twisted_server.py
--- Quixote-2.3/server/twisted_server.py	2004-12-08 20:46:16.000000000 +0000
+++ Quixote-2.3_request_mod/server/twisted_server.py	2005-10-24 15:56:06.000000000 +0100
@@ -30,7 +30,7 @@
         # this seek is important, it doesn't work without it (it doesn't
         # matter for GETs, but POSTs will not work properly without it.)
         self.content.seek(0, 0)
-        qxrequest = HTTPRequest(self.content, environ)
+        qxrequest = self.channel.factory.publisher.create_request(self.content, environ)
         qxresponse = self.channel.factory.publisher.process_request(qxrequest)
         self.setResponseCode(qxresponse.status_code)
         for name, value in qxresponse.generate_headers():
