wip, complete rewrite, will be rebased, just saving work