finished
turned into mixin