Add cache mechanism, move service provider in repo