Implement CachingUserServices, reorganise dependencies