Use private functions to wrap promises (can be overridden for custom logic)