Quite a few updates to the interfaces and the implementations