switch to bluebird promises