pass around Throwables instead of Exceptions