public void run() {
        // XXX: Is this not the same as screen?
        while (true) {
            try {
                while (! request_queue.isEmpty()) {
                    // XXX: request_queue is a queue of HTTPMessages, not
                    // HttpRequests.
                    HttpRequest next = (HttpRequest) request_queue.take();
                    if (next == null) {
                        continue;
                    }
                    if (GizmoView.getView().intercepting() && GizmoView.getView().matchRequest(next.contents())) {
                        screen.addIntercept(next, next.getURL() + "\n");
                    } else {
                        if (! next.isSent()) {
                            synchronized (next) {
                                next.notifyAll();
                            }
                            next.fetchResponse(true);
                        } else {
                            screen.append(next, "\n", next.getURL() + "\n");
                            screen.append(next.getResponse(), "\n\n");
                        }
                    }
                }
            } catch (Exception e) {
                System.out.println(e);
            }

            while (request_queue.isEmpty()) {
                synchronized (lock) {
                    try {
                        lock.wait();
                    } catch (Exception e) {
                        System.out.println(e);
                    }
                }
            }
        }
    }