refactor: store listener mixin