Protocols apparently don't allow varargs.  so have the protocol use update* and write a normal function update that calls it.  Also begin converting changesets functions to use records