uses bluebird promisifyAll and promises. cleaner