layer to eliminate duplicate code and make error checking more efficient (we now use a system that relies on Throwables to do interesting things)