factored out Promise implementation
added Channels