moved subscription logic into the channel model