internal_error instead of exit