better docs, need tests