use Rivet objects?
Investigate the use of Rivet objects to replace custom objects.
These types will need extensions:
- rec level variables
- variations
Specialisations too specific to CMS (random example) should however be left for a CMS implementation (e.g. DAS).