adding more exceptions with detailed messages, updating tests