rework the subscribe mechanism