make complete callback optional