throw errors instead of return false