Why does this need to throw an exception?