bluebird promises don't support .fail, so some operations didn't work quite right. We should use .catch instead.