API cleanup ; cache() became mandatory, and render() was renamed assemble()