I think this can be non-breaking, keeping the same api. Hopefully reducing the amount of code we need to maintain