I pretty much had to rework this completely to get it into a usable state Reference ctrlcctrlv/infinity#424