first cut at Negotiate filter. very ugly. needs init() calls fixed, and many other cleanups. Attempts to reuse as much of waffle filter as possible.