I think I'm done. Just need tests.