avoid conflicts with complete callback