further refactoring of Channel