just need to take care of a LOT of commenting then, add a few tests and i'm finished with this