carp instead of warn
preserve status