Working code \o/
Still needs docs and a few methods.