callback may be null