Location provider refactor