add on_error callback