allow user to provide a complete callback