Add a classy API, and use it to implement all the common options