moved some common logic out of Convention classes

so ConventionData now has an interface, not so POCO anymore, but we get to have 2LOC conventions