add an optional callback.