Done, just need to write some tests