architectural changes to make gorm easier to extend