Changed API, and all the implementations so far to match.  See README.