While developing Web Raveler, we encountered difficulties which took considerable effort to overcome. First, since we are implementing Web Raveler as a proxy server, we had to find a way to associate the first connection a user makes to the proxy, where there is no proxy-authorization header and thus no user information, with the user's subsequent connections. If we want to allow logging out of the Web Raveler system, we need a way to change Next, we faced the problem of letting the user see what a page would look like with Web Raveler's modifications turned off, a feature we call "unraveling" a page. Unraveling a page presents a problem due to the fact that Our third main problem in implementing Web Raveler arose when we made the decision to use frames to separate the Web Raveler banner, which allows Web Raveler configuration, from the Web content requested by the user. Using frames requires that Web Raveler make all URLs contained within HTML pages absolute, as relative URLs will otherwise be evaluated with respect to internal Web Raveler virtual URLs, in which case the user will be unable to fetch the linked content in question. Our solution to the problems associated with using framed pages involved using two mechanisms for fetching content from the Web. When an HTML document is first requested, we wrap it in a page with two frames, one containing a virtual URL pointing to the Web Raveler banner and the other containing a virtual URL telling Web Raveler to fetch the original document and execute the user's active plugins on it.