should be a LogicException rather than a RuntimeException IMO