@nsivov I've raised this as a draft as it's quite a big commit. Step one may be to break it up. I just wasn't sure of the best way to do so, as it replaces an existing implementation (thus adding parts over separate commits would be introducing dead code, until the final commit).