add auto return with callback