done! just need to add tests