refactor to use Channel for later

so we can extend more functionality