Initial commit, lacks an example and some polish