update to utilize mixins and extends