Enums and switches are ugly in C#, perhaps find a polymorphic way to deal with this