Spruce up API & split out more functionality