we rely entirely on exceptions here