Ouch - that's a painful amount of boiler plate code :-) Probably time to start thinking about moving away from an enum.