Add proper exception hierarchy