move to abstractions and re-name
mixins from scott
updated