DRY it up
Refactor enumeration
All tests passing
Refactor out duplicate code