       # it's available.
       stream.setNoDelay true
       input = ""
+      context = new Context(stream)
       stream.on "data", (chunk)->
         # Collect input and process as much as possible.
-        input = process(stream, input + chunk)
+        input = process(context, input + chunk)
       stream.on "end", ->
         # Collect input and process as much as possible.
-        process(stream, input)
+        process context, input
 
     # ## Processing
 

    commands.ECHO = (reply, text)->
      reply SINGLE, text

    # Creates a new browser.
    #
    # Replies with browser identifier (integer).
    browsers = []
    commands.BROWSER = (reply)->
      browsers.push new module.parent.exports.Browser(debug: debug)
      reply INTEGER, browsers.length - 1
    # Tells browser <id> to visit <url>.
    #
    # Replies with OK.
    commands.VISIT = (reply, browser, url)->
      browsers[browser].visit url
      reply SINGLE, "OK"
    # Tells browser <id> to wait for all events to be processed.
    #
    # Replies with error or OK.
    commands.WAIT = (reply, browser)->
      browsers[browser].wait (err)->
        if err
          reply ERROR, err.message
        else

          console.log "Expecting #{argc} arguments" if debug
          return ""
        if argc
          return process(context, input)
        else
          console.log input.length
          throw new Error("Expecting *<argc>CRLF") if input.length > 0 && input[0] != "*"
