Major checkpoint -- refactoring enums, cleaning up constraints, etc.