consistently use the channel as the second argument of all callbacks