Implement more features, refactor, and simplify API

Too much magic in those helper functions maybe?