should `invalid` and `zero` be `val`s?