use more pattern guards!