Add tests and convenience methods. Needs moar work