add optional callback.