First commit, bench and test still needs implementing and lots of small todos everywhere