I'm not crazy about the semantics of this return value. Why not just let callees raise an exception if there's a problem?