TODO unit tests!!! prevent from using channels with ':' use promises instead of async.waterfal review which information I actually eed to return on events/callbacks