don't use confess, use croak instead