I don't think we should handle failure here, instead, just pass it to the caller?