This needs a better name and a build system and documentation and etc