text: var _ = require("underscore");
  var bluebird = require("bluebird/js/release/promise")();
  
  exports.defer = defer;
  exports.when = bluebird.resolve;
  exports.resolve = bluebird.resolve;
  exports.all = bluebird.all;
  exports.props = bluebird.props;
  exports.reject = bluebird.reject;
  exports.promisify = bluebird.promisify;
  exports.mapSeries = bluebird.mapSeries;
  exports.attempt = bluebird.attempt;
  
  exports.nfcall = function(func) {
      var args = Array.prototype.slice.call(arguments, 1);
      var promisedFunc = bluebird.promisify(func);
      return promisedFunc.apply(null, args);
  };
  
  bluebird.prototype.fail = bluebird.prototype.caught;
  
  bluebird.prototype.also = function(func) {
      return this.then(function(value) {
          var returnValue = _.extend({}, value, func(value));
          return bluebird.props(returnValue);
      });
  };
  
  function defer() {
      var resolve;
      var reject;
      var promise = new bluebird.Promise(function(resolveArg, rejectArg) {
          resolve = resolveArg;
          reject = rejectArg;
      });
  
      return {
          resolve: resolve,
          reject: reject,
          promise: promise
      };
  }
  