Restructured to use extensible enum pattern