refactor channel maker using interfaces