code: function composeMinimalJoint(params){
  	var estimated_amount = (params.send_all || params.retrieveMessages) ? 0 : params.outputs.reduce(function(acc, output){ return acc+output.amount; }, 0) + TYPICAL_FEE;
  	readSortedFundedAddresses(null, params.available_paying_addresses, estimated_amount, params.spend_unconfirmed || 'own', function(arrFundedPayingAddresses){
  		if (arrFundedPayingAddresses.length === 0)
  			return params.callbacks.ifNotEnoughFunds("all paying addresses are unfunded");
  		var minimal_params = _.clone(params);
  		delete minimal_params.available_paying_addresses;
  		minimal_params.minimal = true;
  		minimal_params.paying_addresses = arrFundedPayingAddresses;
  		composeJoint(minimal_params);
  	});
  }
docs: tries to use as few of the params.available_paying_addresses as possible. note: it doesn't select addresses that have _only_ witnessing or headers commissions outputs