big fat refactor + new feature (aka horrible giant diff cause i did it wrong)