avoid potential double callback