Add support for multiple levels, and a bunch of other things