This file is there so that I do not have to remind myself about the reasons for Layered IO, apart from the obvious one. 0. To get away from a 1 to 1 mapping i.e. a single URI can cause multiple backend requests, in arbitrary configurations, such as in paralel, tunnel/piped, or in some sort of funnel mode. Such multiple backend requests, with fully layered IO can be treated exactly like any URI request; and recursion is born :-) 1. To do on the fly charset conversion Be, theoretically, be able to send out your content using latin1, latin2 or any other charset; generated from static _and_ dynamic content in other charsets (typically unicode encoded as UTF7 or UTF8). Such conversion is prompted by things like the user-agent string, a cookie, or other hints about the capabilities of the OS, language preferences and other (in)capabilities of the final receipient. 2. To be able to do fancy templates Have your application/cgi sending out an XML structure of field/value pair-ed contents; which is substituted into a template by the web server; possibly based on information accessible/known to the webserver which you do not want to be known to the backend script. Ideally that template would be just as easy to generate by a backend as well (see 0). 3. On the fly translation And other general text and output mungling, such as translating an english page in spanish whilst it goes through your Proxy, or JPEG-ing a GIF generated by mod_perl+gd. Dw.