Make the render cache work with all the data providers

There are several `TODO` in the code base regarding this.