this should be a private service to allow optimizations