use exceptions for phaseses