exception-driven logic sucks