refactor to use reactivity mixin