using throws and raises at the right places...