(further) refactoring behavior into types, actually compiles now :)