see comment above about being able to give a list of valid values in the constructor