work in progress. many edge cases are currently unhandled. will not work at all pre 1.12. (support is planned)