do not throw errors, pass them to callback