fail more gracefully than to just die()