Possibly a better approach would be to let each individual section manage its own data requirements, if that's possible. This improves the modularity of the code and keeps the complexity of the interfaces between modules to a minimum. So when a module gets a request for data from somewhere, it sorts that out itself then squirts the answer up the tube the request came down.