Index: /lib/PayPal/Api/Address.php
===================================================================
--- /lib/PayPal/Api/Address.php	(revision 7220)
+++ /lib/PayPal/Api/Address.php	(revision 7221)
@@ -2,6 +2,4 @@
 
 namespace PayPal\Api;
-
-use PayPal\Common\PayPalModel;
 
 /**
@@ -13,9 +11,10 @@
  *
  * @property string phone
+ * @property string type
  */
-class Address extends BaseAddress 
+class Address extends BaseAddress
 {
     /**
-     * Phone number in E.123 format.
+     * Phone number in E.123 format. 50 characters max.
      *
      * @param string $phone
@@ -30,5 +29,5 @@
 
     /**
-     * Phone number in E.123 format.
+     * Phone number in E.123 format. 50 characters max.
      *
      * @return string
@@ -39,3 +38,25 @@
     }
 
+    /**
+     * Type of address (e.g., HOME_OR_WORK, GIFT etc).
+     *
+     * @param string $type
+     *
+     * @return $this
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+        return $this;
+    }
+
+    /**
+     * Type of address (e.g., HOME_OR_WORK, GIFT etc).
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
 }
Index: /lib/PayPal/Api/Agreement.php
===================================================================
--- /lib/PayPal/Api/Agreement.php	(revision 7220)
+++ /lib/PayPal/Api/Agreement.php	(revision 7221)
@@ -5,8 +5,7 @@
 use PayPal\Common\PayPalResourceModel;
 use PayPal\Core\PayPalConstants;
-use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\AgreementTransactions;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 
 /**
Index: /lib/PayPal/Api/Amount.php
===================================================================
--- /lib/PayPal/Api/Amount.php	(revision 7220)
+++ /lib/PayPal/Api/Amount.php	(revision 7221)
@@ -21,5 +21,5 @@
 {
     /**
-     * 3 letter currency code
+     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/). PayPal does not support all currencies.
      *
      * @param string $currency
@@ -34,5 +34,5 @@
 
     /**
-     * 3 letter currency code
+     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/). PayPal does not support all currencies.
      *
      * @return string
@@ -44,9 +44,8 @@
 
     /**
-     * Total amount charged as part of this payment.
-     *
+     * Total amount charged from the payer to the payee. In case of a refund, this is the refunded amount to the original payer from the payee. 10 characters max with support for 2 decimal places.
      *
      * @param string|double $total
-     *
+     * 
      * @return $this
      */
@@ -60,5 +59,5 @@
 
     /**
-     * Total amount charged as part of this payment.
+     * Total amount charged from the payer to the payee. In case of a refund, this is the refunded amount to the original payer from the payee. 10 characters max with support for 2 decimal places.
      *
      * @return string
Index: /lib/PayPal/Api/Authorization.php
===================================================================
--- /lib/PayPal/Api/Authorization.php	(revision 7220)
+++ /lib/PayPal/Api/Authorization.php	(revision 7221)
@@ -5,7 +5,5 @@
 use PayPal\Common\PayPalResourceModel;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\Capture;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
@@ -17,6 +15,4 @@
  *
  * @property string id
- * @property string create_time
- * @property string update_time
  * @property \PayPal\Api\Amount amount
  * @property string payment_mode
@@ -28,12 +24,16 @@
  * @property \PayPal\Api\FmfDetails fmf_details
  * @property string parent_payment
- * @property string clearing_time
+ * @property \PayPal\Api\ProcessorResponse processor_response
  * @property string valid_until
- * @property \PayPal\Api\Links links
+ * @property string create_time
+ * @property string update_time
+ * @property string reference_id
+ * @property string receipt_id
+ * @property \PayPal\Api\Links[] links
  */
 class Authorization extends PayPalResourceModel
 {
     /**
-     * Identifier of the authorization transaction.
+     * ID of the authorization transaction.
      *
      * @param string $id
@@ -48,5 +48,5 @@
 
     /**
-     * Identifier of the authorization transaction.
+     * ID of the authorization transaction.
      *
      * @return string
@@ -58,5 +58,5 @@
 
     /**
-     * Amount being authorized for.
+     * Amount being authorized.
      *
      * @param \PayPal\Api\Amount $amount
@@ -71,5 +71,5 @@
 
     /**
-     * Amount being authorized for.
+     * Amount being authorized.
      *
      * @return \PayPal\Api\Amount
@@ -81,6 +81,6 @@
 
     /**
-     * specifies payment mode of the transaction
-     * Valid Values: ["INSTANT_TRANSFER", "MANUAL_BANK_TRANSFER", "DELAYED_TRANSFER", "ECHECK"]
+     * Specifies the payment mode of the transaction.
+     * Valid Values: ["INSTANT_TRANSFER"]
      *
      * @param string $payment_mode
@@ -95,5 +95,5 @@
 
     /**
-     * specifies payment mode of the transaction
+     * Specifies the payment mode of the transaction.
      *
      * @return string
@@ -105,5 +105,5 @@
 
     /**
-     * State of the authorization transaction.
+     * State of the authorization.
      * Valid Values: ["pending", "authorized", "partially_captured", "captured", "expired", "voided"]
      *
@@ -119,5 +119,5 @@
 
     /**
-     * State of the authorization transaction.
+     * State of the authorization.
      *
      * @return string
@@ -129,5 +129,5 @@
 
     /**
-     * Reason code for the transaction state being Pending. This field will replace pending_reason field eventually
+     * Reason code, `AUTHORIZATION`, for a transaction state of `pending`.
      * Valid Values: ["AUTHORIZATION"]
      *
@@ -143,5 +143,5 @@
 
     /**
-     * Reason code for the transaction state being Pending. This field will replace pending_reason field eventually
+     * Reason code, `AUTHORIZATION`, for a transaction state of `pending`.
      *
      * @return string
@@ -155,5 +155,5 @@
      * [DEPRECATED] Reason code for the transaction state being Pending.Obsolete. use reason_code field instead.
      * Valid Values: ["AUTHORIZATION"]
-     * @deprecated Plese Use setReasonCode instead
+     *
      * @param string $pending_reason
      * 
@@ -167,6 +167,6 @@
 
     /**
-     * [DEPRECATED] Reason code for the transaction state being Pending.Obsolete. use reason_code field instead.
-     * @deprecated Plese Use setReasonCode instead
+     * @deprecated  [DEPRECATED] Reason code for the transaction state being Pending.Obsolete. use reason_code field instead.
+     *
      * @return string
      */
@@ -177,5 +177,5 @@
 
     /**
-     * Protection Eligibility of the Payer 
+     * The level of seller protection in force for the transaction. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br>  `ELIGIBLE`- Merchant is protected by PayPal's Seller Protection Policy for Unauthorized Payments and Item Not Received.<br> `PARTIALLY_ELIGIBLE`- Merchant is protected by PayPal's Seller Protection Policy for Item Not Received or Unauthorized Payments. Refer to `protection_eligibility_type` for specifics. <br> `INELIGIBLE`- Merchant is not protected under the Seller Protection Policy.
      * Valid Values: ["ELIGIBLE", "PARTIALLY_ELIGIBLE", "INELIGIBLE"]
      *
@@ -191,5 +191,5 @@
 
     /**
-     * Protection Eligibility of the Payer 
+     * The level of seller protection in force for the transaction. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br>  `ELIGIBLE`- Merchant is protected by PayPal's Seller Protection Policy for Unauthorized Payments and Item Not Received.<br> `PARTIALLY_ELIGIBLE`- Merchant is protected by PayPal's Seller Protection Policy for Item Not Received or Unauthorized Payments. Refer to `protection_eligibility_type` for specifics. <br> `INELIGIBLE`- Merchant is not protected under the Seller Protection Policy.
      *
      * @return string
@@ -201,6 +201,6 @@
 
     /**
-     * Protection Eligibility Type of the Payer 
-     * Valid Values: ["ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE", "INELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE"]
+     * The kind of seller protection in force for the transaction. This property is returned only when the `protection_eligibility` property is set to `ELIGIBLE`or `PARTIALLY_ELIGIBLE`. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br> `ITEM_NOT_RECEIVED_ELIGIBLE`- Sellers are protected against claims for items not received.<br> `UNAUTHORIZED_PAYMENT_ELIGIBLE`- Sellers are protected against claims for unauthorized payments.<br> One or both of the allowed values can be returned.
+     * Valid Values: ["ITEM_NOT_RECEIVED_ELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE"]
      *
      * @param string $protection_eligibility_type
@@ -215,5 +215,5 @@
 
     /**
-     * Protection Eligibility Type of the Payer 
+     * The kind of seller protection in force for the transaction. This property is returned only when the `protection_eligibility` property is set to `ELIGIBLE`or `PARTIALLY_ELIGIBLE`. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br> `ITEM_NOT_RECEIVED_ELIGIBLE`- Sellers are protected against claims for items not received.<br> `UNAUTHORIZED_PAYMENT_ELIGIBLE`- Sellers are protected against claims for unauthorized payments.<br> One or both of the allowed values can be returned.
      *
      * @return string
@@ -225,5 +225,5 @@
 
     /**
-     * Fraud Management Filter (FMF) details applied for the payment that could result in accept/deny/pending action.
+     * Fraud Management Filter (FMF) details applied for the payment that could result in accept, deny, or pending action. Returned in a payment response only if the merchant has enabled FMF in the profile settings and one of the fraud filters was triggered based on those settings. See [Fraud Management Filters Summary](https://developer.paypal.com/docs/classic/fmf/integration-guide/FMFSummary/) for more information.
      *
      * @param \PayPal\Api\FmfDetails $fmf_details
@@ -238,5 +238,5 @@
 
     /**
-     * Fraud Management Filter (FMF) details applied for the payment that could result in accept/deny/pending action.
+     * Fraud Management Filter (FMF) details applied for the payment that could result in accept, deny, or pending action. Returned in a payment response only if the merchant has enabled FMF in the profile settings and one of the fraud filters was triggered based on those settings. See [Fraud Management Filters Summary](https://developer.paypal.com/docs/classic/fmf/integration-guide/FMFSummary/) for more information.
      *
      * @return \PayPal\Api\FmfDetails
@@ -271,29 +271,28 @@
 
     /**
-     * Expected clearing time for eCheck Transactions
-     *
-     *
-     * @param string $clearing_time
-     *
-     * @return $this
-     */
-    public function setClearingTime($clearing_time)
-    {
-        $this->clearing_time = $clearing_time;
-        return $this;
-    }
-
-    /**
-     * Expected clearing time for eCheck Transactions
-     *
-     * @return string
-     */
-    public function getClearingTime()
-    {
-        return $this->clearing_time;
-    }
-
-    /**
-     * Date/Time until which funds may be captured against this resource in UTC ISO8601 format.
+     * Response codes returned by the processor concerning the submitted payment. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @param \PayPal\Api\ProcessorResponse $processor_response
+     *
+     * @return $this
+     */
+    public function setProcessorResponse($processor_response)
+    {
+        $this->processor_response = $processor_response;
+        return $this;
+    }
+
+    /**
+     * Response codes returned by the processor concerning the submitted payment. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @return \PayPal\Api\ProcessorResponse
+     */
+    public function getProcessorResponse()
+    {
+        return $this->processor_response;
+    }
+
+    /**
+     * Authorization expiration time and date as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $valid_until
@@ -308,5 +307,5 @@
 
     /**
-     * Date/Time until which funds may be captured against this resource in UTC ISO8601 format.
+     * Authorization expiration time and date as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -318,5 +317,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Time of authorization as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $create_time
@@ -331,5 +330,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Time of authorization as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -341,5 +340,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Time that the resource was last updated.
      *
      * @param string $update_time
@@ -354,5 +353,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Time that the resource was last updated.
      *
      * @return string
@@ -364,5 +363,51 @@
 
     /**
-     * Retrieve details about a previously created authorization by passing the authorization_id in the request URI.
+     * Identifier to the purchase or transaction unit corresponding to this authorization transaction.
+     *
+     * @param string $reference_id
+     * 
+     * @return $this
+     */
+    public function setReferenceId($reference_id)
+    {
+        $this->reference_id = $reference_id;
+        return $this;
+    }
+
+    /**
+     * Identifier to the purchase or transaction unit corresponding to this authorization transaction.
+     *
+     * @return string
+     */
+    public function getReferenceId()
+    {
+        return $this->reference_id;
+    }
+
+    /**
+     * Receipt id is 16 digit number payment identification number returned for guest users to identify the payment.
+     *
+     * @param string $receipt_id
+     * 
+     * @return $this
+     */
+    public function setReceiptId($receipt_id)
+    {
+        $this->receipt_id = $receipt_id;
+        return $this;
+    }
+
+    /**
+     * Receipt id is 16 digit number payment identification number returned for guest users to identify the payment.
+     *
+     * @return string
+     */
+    public function getReceiptId()
+    {
+        return $this->receipt_id;
+    }
+
+    /**
+     * Shows details for an authorization, by ID.
      *
      * @param string $authorizationId
@@ -389,5 +434,5 @@
 
     /**
-     * Capture and process a previously created authorization by passing the authorization_id in the request URI. To use this request, the original payment call must have the intent set to authorize.
+     * Captures and processes an authorization, by ID. To use this call, the original payment call must specify an intent of `authorize`.
      *
      * @param Capture $capture
@@ -415,5 +460,5 @@
 
     /**
-     * Void (cancel) a previously authorized payment by passing the authorization_id in the request URI. Note that a fully captured authorization cannot be voided.
+     * Voids, or cancels, an authorization, by ID. You cannot void a fully captured authorization.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -438,5 +483,5 @@
 
     /**
-     * Reauthorize a PayPal account payment by passing the authorization_id in the request URI. You should reauthorize a payment after the initial 3-day honor period to ensure that funds are still available.
+     * Reauthorizes a PayPal account payment, by authorization ID. To ensure that funds are still available, reauthorize a payment after the initial three-day honor period. Supports only the `amount` request parameter.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
Index: /lib/PayPal/Api/BankAccount.php
===================================================================
--- /lib/PayPal/Api/BankAccount.php	(revision 7220)
+++ /lib/PayPal/Api/BankAccount.php	(revision 7221)
@@ -3,17 +3,14 @@
 namespace PayPal\Api;
 
-use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
-use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
+use PayPal\Common\PayPalModel;
 
 /**
  * Class BankAccount
- *
+ * 
  * A resource representing a bank account that can be used to fund a payment.
+ * @deprecated Deprecated. It is for internal use only. It may be removed in next major revision.
  *
  * @package PayPal\Api
  *
- * @property string id
  * @property string account_number
  * @property string account_number_type
@@ -38,10 +35,11 @@
  * @property string update_time
  * @property string valid_until
+ * @property \PayPal\Api\Links[] links
  */
-class BankAccount extends PayPalResourceModel
+class BankAccount extends PayPalModel
 {
     /**
      * ID of the bank account being saved for later use.
-     *
+     * @deprecated Not publicly available
      * @param string $id
      * 
@@ -56,5 +54,5 @@
     /**
      * ID of the bank account being saved for later use.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -439,5 +437,5 @@
 
     /**
-     * Deprecated - Use external_customer_id instead.
+     * [DEPRECATED] Use external_customer_id instead.
      *
      * @param string $payer_id
@@ -452,5 +450,5 @@
 
     /**
-     * Deprecated - Use external_customer_id instead.
+     * @deprecated  [DEPRECATED] Use external_customer_id instead.
      *
      * @return string
@@ -484,7 +482,6 @@
     }
 
-
-    /**
-     * A unique identifier of the merchant for which this bank account has been stored for. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchnt.
+    /**
+     * A unique identifier of the merchant for which this bank account has been stored for. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchant.
      *
      * @param string $merchant_id
@@ -499,5 +496,5 @@
 
     /**
-     * A unique identifier of the merchant for which this bank account has been stored for. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchnt.
+     * A unique identifier of the merchant for which this bank account has been stored for. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchant.
      *
      * @return string
@@ -578,95 +575,54 @@
 
     /**
-     * Creates a new Bank Account Resource.
-     *
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
-     * @return BankAccount
-     */
-    public function create($apiContext = null, $restCall = null)
-    {
-        $payLoad = $this->toJSON();
-        $json = self::executeCall(
-            "/v1/vault/bank-accounts",
-            "POST",
-            $payLoad,
-            null,
-            $apiContext,
-            $restCall
+     * Sets Links
+     *
+     * @param \PayPal\Api\Links[] $links
+     * 
+     * @return $this
+     */
+    public function setLinks($links)
+    {
+        $this->links = $links;
+        return $this;
+    }
+
+    /**
+     * Gets Links
+     *
+     * @return \PayPal\Api\Links[]
+     */
+    public function getLinks()
+    {
+        return $this->links;
+    }
+
+    /**
+     * Append Links to the list.
+     *
+     * @param \PayPal\Api\Links $links
+     * @return $this
+     */
+    public function addLink($links)
+    {
+        if (!$this->getLinks()) {
+            return $this->setLinks(array($links));
+        } else {
+            return $this->setLinks(
+                array_merge($this->getLinks(), array($links))
+            );
+        }
+    }
+
+    /**
+     * Remove Links from the list.
+     *
+     * @param \PayPal\Api\Links $links
+     * @return $this
+     */
+    public function removeLink($links)
+    {
+        return $this->setLinks(
+            array_diff($this->getLinks(), array($links))
         );
-        $this->fromJson($json);
-        return $this;
-    }
-
-    /**
-     * Obtain the Bank Account resource for the given identifier.
-     *
-     * @param string $bankAccountId
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
-     * @return BankAccount
-     */
-    public static function get($bankAccountId, $apiContext = null, $restCall = null)
-    {
-        ArgumentValidator::validate($bankAccountId, 'bankAccountId');
-        $payLoad = "";
-        $json = self::executeCall(
-            "/v1/vault/bank-accounts/$bankAccountId",
-            "GET",
-            $payLoad,
-            null,
-            $apiContext,
-            $restCall
-        );
-        $ret = new BankAccount();
-        $ret->fromJson($json);
-        return $ret;
-    }
-
-    /**
-     * Delete the bank account resource for the given identifier.
-     *
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
-     * @return bool
-     */
-    public function delete($apiContext = null, $restCall = null)
-    {
-        ArgumentValidator::validate($this->getId(), "Id");
-        $payLoad = "";
-        self::executeCall(
-            "/v1/vault/bank-accounts/{$this->getId()}",
-            "DELETE",
-            $payLoad,
-            null,
-            $apiContext,
-            $restCall
-        );
-        return true;
-    }
-
-    /**
-     * Update information in a previously saved bank account. Only the modified fields need to be passed in the request.
-     *
-     * @param PatchRequest $patchRequest
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
-     * @return BankAccount
-     */
-    public function update($patchRequest, $apiContext = null, $restCall = null)
-    {
-        ArgumentValidator::validate($this->getId(), "Id");
-        ArgumentValidator::validate($patchRequest, 'patchRequest');
-        $payLoad = $patchRequest->toJSON();
-        $json = self::executeCall(
-            "/v1/vault/bank-accounts/{$this->getId()}",
-            "PATCH",
-            $payLoad,
-            null,
-            $apiContext,
-            $restCall
-        );
-        $this->fromJson($json);
-        return $this;
     }
 
Index: /lib/PayPal/Api/BillingInfo.php
===================================================================
--- /lib/PayPal/Api/BillingInfo.php	(revision 7220)
+++ /lib/PayPal/Api/BillingInfo.php	(revision 7221)
@@ -25,5 +25,5 @@
 {
     /**
-     * Email address of the invoice recipient. 260 characters max.
+     * The invoice recipient email address. Maximum length is 260 characters.
      *
      * @param string $email
@@ -38,5 +38,5 @@
 
     /**
-     * Email address of the invoice recipient. 260 characters max.
+     * The invoice recipient email address. Maximum length is 260 characters.
      *
      * @return string
@@ -48,5 +48,5 @@
 
     /**
-     * First name of the invoice recipient. 30 characters max.
+     * The invoice recipient first name. Maximum length is 30 characters.
      *
      * @param string $first_name
@@ -61,5 +61,5 @@
 
     /**
-     * First name of the invoice recipient. 30 characters max.
+     * The invoice recipient first name. Maximum length is 30 characters.
      *
      * @return string
@@ -71,5 +71,5 @@
 
     /**
-     * Last name of the invoice recipient. 30 characters max.
+     * The invoice recipient last name. Maximum length is 30 characters.
      *
      * @param string $last_name
@@ -84,5 +84,5 @@
 
     /**
-     * Last name of the invoice recipient. 30 characters max.
+     * The invoice recipient last name. Maximum length is 30 characters.
      *
      * @return string
@@ -94,5 +94,5 @@
 
     /**
-     * Company business name of the invoice recipient. 100 characters max.
+     * The invoice recipient company business name. Maximum length is 100 characters.
      *
      * @param string $business_name
@@ -107,5 +107,5 @@
 
     /**
-     * Company business name of the invoice recipient. 100 characters max.
+     * The invoice recipient company business name. Maximum length is 100 characters.
      *
      * @return string
@@ -117,5 +117,5 @@
 
     /**
-     * Address of the invoice recipient.
+     * The invoice recipient address.
      *
      * @param \PayPal\Api\InvoiceAddress $address
@@ -130,5 +130,5 @@
 
     /**
-     * Address of the invoice recipient.
+     * The invoice recipient address.
      *
      * @return \PayPal\Api\InvoiceAddress
@@ -140,5 +140,5 @@
 
     /**
-     * Language of the email sent to the payer. Will only be used if payer doesn't have a PayPal account.
+     * The language in which the email was sent to the payer. Used only when the payer does not have a PayPal account.
      * Valid Values: ["da_DK", "de_DE", "en_AU", "en_GB", "en_US", "es_ES", "es_XC", "fr_CA", "fr_FR", "fr_XC", "he_IL", "id_ID", "it_IT", "ja_JP", "nl_NL", "no_NO", "pl_PL", "pt_BR", "pt_PT", "ru_RU", "sv_SE", "th_TH", "tr_TR", "zh_CN", "zh_HK", "zh_TW", "zh_XC"]
      *
@@ -154,5 +154,5 @@
 
     /**
-     * Language of the email sent to the payer. Will only be used if payer doesn't have a PayPal account.
+     * The language in which the email was sent to the payer. Used only when the payer does not have a PayPal account.
      *
      * @return string
@@ -164,5 +164,5 @@
 
     /**
-     * Option to display additional information such as business hours. 40 characters max.
+     * Additional information, such as business hours. Maximum length is 40 characters.
      *
      * @param string $additional_info
@@ -177,5 +177,5 @@
 
     /**
-     * Option to display additional information such as business hours. 40 characters max.
+     * Additional information, such as business hours. Maximum length is 40 characters.
      *
      * @return string
Index: /lib/PayPal/Api/CancelNotification.php
===================================================================
--- /lib/PayPal/Api/CancelNotification.php	(revision 7220)
+++ /lib/PayPal/Api/CancelNotification.php	(revision 7221)
@@ -16,4 +16,5 @@
  * @property bool send_to_merchant
  * @property bool send_to_payer
+ * @property string[] cc_emails
  */
 class CancelNotification extends PayPalModel
@@ -66,5 +67,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the merchant.
+     * Indicates whether to send a copy of the notification to the merchant.
      *
      * @param bool $send_to_merchant
@@ -79,5 +80,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the merchant.
+     * Indicates whether to send a copy of the notification to the merchant.
      *
      * @return bool
@@ -89,5 +90,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the payer.
+     * Indicates whether to send a copy of the notification to the payer.
      *
      * @param bool $send_to_payer
@@ -102,5 +103,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the payer.
+     * Indicates whether to send a copy of the notification to the payer.
      *
      * @return bool
@@ -111,3 +112,56 @@
     }
 
+    /**
+     * Applicable for invoices created with Cc emails. If this field is not in the body, all the cc email addresses added as part of the invoice shall be notified else this field can be used to limit the list of email addresses. Note: additional email addresses are not supported.
+     *
+     * @param string[] $cc_emails
+     * 
+     * @return $this
+     */
+    public function setCcEmails($cc_emails)
+    {
+        $this->cc_emails = $cc_emails;
+        return $this;
+    }
+
+    /**
+     * Applicable for invoices created with Cc emails. If this field is not in the body, all the cc email addresses added as part of the invoice shall be notified else this field can be used to limit the list of email addresses. Note: additional email addresses are not supported.
+     *
+     * @return string[]
+     */
+    public function getCcEmails()
+    {
+        return $this->cc_emails;
+    }
+
+    /**
+     * Append CcEmails to the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function addCcEmail($string)
+    {
+        if (!$this->getCcEmails()) {
+            return $this->setCcEmails(array($string));
+        } else {
+            return $this->setCcEmails(
+                array_merge($this->getCcEmails(), array($string))
+            );
+        }
+    }
+
+    /**
+     * Remove CcEmails from the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function removeCcEmail($string)
+    {
+        return $this->setCcEmails(
+            array_diff($this->getCcEmails(), array($string))
+        );
+    }
+
 }
Index: /lib/PayPal/Api/Capture.php
===================================================================
--- /lib/PayPal/Api/Capture.php	(revision 7220)
+++ /lib/PayPal/Api/Capture.php	(revision 7221)
@@ -4,8 +4,7 @@
 
 use PayPal\Common\PayPalResourceModel;
+use PayPal\Transport\PayPalRestCall;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\Refund;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
@@ -17,11 +16,13 @@
  *
  * @property string id
- * @property string create_time
- * @property string update_time
  * @property \PayPal\Api\Amount amount
  * @property bool is_final_capture
  * @property string state
+ * @property string reason_code
  * @property string parent_payment
+ * @property string invoice_number
  * @property \PayPal\Api\Currency transaction_fee
+ * @property string create_time
+ * @property string update_time
  * @property \PayPal\Api\Links[] links
  */
@@ -29,5 +30,5 @@
 {
     /**
-     * Identifier of the Capture transaction.
+     * The ID of the capture transaction.
      *
      * @param string $id
@@ -42,5 +43,5 @@
 
     /**
-     * Identifier of the Capture transaction.
+     * The ID of the capture transaction.
      *
      * @return string
@@ -52,5 +53,5 @@
 
     /**
-     * Amount being captured. If no amount is specified, amount is used from the authorization being captured. If amount is same as the amount that's authorized for, the state of the authorization changes to captured. If not, the state of the authorization changes to partially_captured. Alternatively, you could indicate a final capture by setting the is_final_capture flag to true.
+     * The amount to capture. If the amount matches the orginally authorized amount, the state of the authorization changes to `captured`. If not, the state of the authorization changes to `partially_captured`.
      *
      * @param \PayPal\Api\Amount $amount
@@ -65,5 +66,5 @@
 
     /**
-     * Amount being captured. If no amount is specified, amount is used from the authorization being captured. If amount is same as the amount that's authorized for, the state of the authorization changes to captured. If not, the state of the authorization changes to partially_captured. Alternatively, you could indicate a final capture by setting the is_final_capture flag to true.
+     * The amount to capture. If the amount matches the orginally authorized amount, the state of the authorization changes to `captured`. If not, the state of the authorization changes to `partially_captured`.
      *
      * @return \PayPal\Api\Amount
@@ -75,5 +76,5 @@
 
     /**
-     * whether this is a final capture for the given authorization or not. If it's final, all the remaining funds held by the authorization, will be released in the funding instrument.
+     * Indicates whether to release all remaining funds that the authorization holds in the funding instrument. Default is `false`.
      *
      * @param bool $is_final_capture
@@ -88,5 +89,5 @@
 
     /**
-     * whether this is a final capture for the given authorization or not. If it's final, all the remaining funds held by the authorization, will be released in the funding instrument.
+     * Indicates whether to release all remaining funds that the authorization holds in the funding instrument. Default is `false`.
      *
      * @return bool
@@ -98,5 +99,5 @@
 
     /**
-     * State of the capture transaction.
+     * The state of the capture.
      * Valid Values: ["pending", "completed", "refunded", "partially_refunded"]
      *
@@ -112,5 +113,5 @@
 
     /**
-     * State of the capture transaction.
+     * The state of the capture.
      *
      * @return string
@@ -122,5 +123,29 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * The reason code that describes why the transaction state is pending or reversed.
+     * Valid Values: ["CHARGEBACK", "GUARANTEE", "BUYER_COMPLAINT", "REFUND", "UNCONFIRMED_SHIPPING_ADDRESS", "ECHECK", "INTERNATIONAL_WITHDRAWAL", "RECEIVING_PREFERENCE_MANDATES_MANUAL_ACTION", "PAYMENT_REVIEW", "REGULATORY_REVIEW", "UNILATERAL", "VERIFICATION_REQUIRED", "TRANSACTION_APPROVED_AWAITING_FUNDING"]
+     *
+     * @param string $reason_code
+     * 
+     * @return $this
+     */
+    public function setReasonCode($reason_code)
+    {
+        $this->reason_code = $reason_code;
+        return $this;
+    }
+
+    /**
+     * The reason code that describes why the transaction state is pending or reversed.
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reason_code;
+    }
+
+    /**
+     * The ID of the payment on which this transaction is based.
      *
      * @param string $parent_payment
@@ -135,5 +160,5 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * The ID of the payment on which this transaction is based.
      *
      * @return string
@@ -145,5 +170,28 @@
 
     /**
-     * Transaction fee applicable for this payment.
+     * The invoice number to track this payment.
+     *
+     * @param string $invoice_number
+     * 
+     * @return $this
+     */
+    public function setInvoiceNumber($invoice_number)
+    {
+        $this->invoice_number = $invoice_number;
+        return $this;
+    }
+
+    /**
+     * The invoice number to track this payment.
+     *
+     * @return string
+     */
+    public function getInvoiceNumber()
+    {
+        return $this->invoice_number;
+    }
+
+    /**
+     * The transaction fee for this payment.
      *
      * @param \PayPal\Api\Currency $transaction_fee
@@ -158,5 +206,5 @@
 
     /**
-     * Transaction fee applicable for this payment.
+     * The transaction fee for this payment.
      *
      * @return \PayPal\Api\Currency
@@ -168,5 +216,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * The date and time of capture, as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $create_time
@@ -181,5 +229,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * The date and time of capture, as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -191,5 +239,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * The date and time when the resource was last updated.
      *
      * @param string $update_time
@@ -204,5 +252,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * The date and time when the resource was last updated.
      *
      * @return string
@@ -214,5 +262,5 @@
 
     /**
-     * Retrieve details about a captured payment by passing the capture_id in the request URI.
+     * Shows details for a captured payment, by ID.
      *
      * @param string $captureId
@@ -241,7 +289,8 @@
      * Refund a captured payment by passing the capture_id in the request URI. In addition, include an amount object in the body of the request JSON.
      *
-     * @param Refund $refund
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @deprecated Please use #refundCapturedPayment instead.
+     * @param Refund         $refund
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return Refund
      */
@@ -264,3 +313,29 @@
     }
 
+    /**
+     * Refunds a captured payment, by ID. Include an `amount` object in the JSON request body.
+     *
+     * @param RefundRequest $refundRequest
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return DetailedRefund
+     */
+    public function refundCapturedPayment($refundRequest, $apiContext = null, $restCall = null)
+    {
+        ArgumentValidator::validate($this->getId(), "Id");
+        ArgumentValidator::validate($refundRequest, 'refundRequest');
+        $payLoad = $refundRequest->toJSON();
+        $json = self::executeCall(
+            "/v1/payments/capture/{$this->getId()}/refund",
+            "POST",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        $ret = new DetailedRefund();
+        $ret->fromJson($json);
+        return $ret;
+    }
+
 }
Index: /lib/PayPal/Api/CarrierAccountToken.php
===================================================================
--- /lib/PayPal/Api/CarrierAccountToken.php	(revision 7220)
+++ /lib/PayPal/Api/CarrierAccountToken.php	(revision 7221)
@@ -21,5 +21,5 @@
      *
      * @param string $carrier_account_id
-     *
+     * 
      * @return $this
      */
@@ -41,8 +41,8 @@
 
     /**
-     * ID of a previously saved carrier account resource.
-     *
+     * The unique identifier of the payer used when saving this carrier account instrument.
      *
      * @param string $external_customer_id
+     * 
      * @return $this
      */
Index: /lib/PayPal/Api/CartBase.php
===================================================================
--- /lib/PayPal/Api/CartBase.php	(revision 7220)
+++ /lib/PayPal/Api/CartBase.php	(revision 7221)
@@ -13,4 +13,5 @@
  * @package PayPal\Api
  *
+ * @property string reference_id
  * @property \PayPal\Api\Amount amount
  * @property \PayPal\Api\Payee payee
@@ -19,4 +20,5 @@
  * @property string custom
  * @property string invoice_number
+ * @property string purchase_order
  * @property string soft_descriptor
  * @property \PayPal\Api\PaymentOptions payment_options
@@ -28,4 +30,27 @@
 {
     /**
+     * Merchant identifier to the purchase unit. Optional parameter
+     *
+     * @param string $reference_id
+     * 
+     * @return $this
+     */
+    public function setReferenceId($reference_id)
+    {
+        $this->reference_id = $reference_id;
+        return $this;
+    }
+
+    /**
+     * Merchant identifier to the purchase unit. Optional parameter
+     *
+     * @return string
+     */
+    public function getReferenceId()
+    {
+        return $this->reference_id;
+    }
+
+    /**
      * Amount being collected.
      *
@@ -120,6 +145,5 @@
 
     /**
-     * Note to the recipient of the funds in this transaction.
-     *
+     * free-form field for the use of clients
      *
      * @param string $custom
@@ -167,6 +191,28 @@
 
     /**
-     * Soft descriptor used when charging this funding source.
-     *
+     * purchase order is number or id specific to this payment
+     *
+     * @param string $purchase_order
+     * 
+     * @return $this
+     */
+    public function setPurchaseOrder($purchase_order)
+    {
+        $this->purchase_order = $purchase_order;
+        return $this;
+    }
+
+    /**
+     * purchase order is number or id specific to this payment
+     *
+     * @return string
+     */
+    public function getPurchaseOrder()
+    {
+        return $this->purchase_order;
+    }
+
+    /**
+     * Soft descriptor used when charging this funding source. If length exceeds max length, the value will be truncated
      *
      * @param string $soft_descriptor
@@ -181,5 +227,5 @@
 
     /**
-     * Soft descriptor used when charging this funding source.
+     * Soft descriptor used when charging this funding source. If length exceeds max length, the value will be truncated
      *
      * @return string
@@ -191,6 +237,28 @@
 
     /**
+     * Soft descriptor city used when charging this funding source. If length exceeds max length, the value will be truncated. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @param string $soft_descriptor_city
+     * 
+     * @return $this
+     */
+    public function setSoftDescriptorCity($soft_descriptor_city)
+    {
+        $this->soft_descriptor_city = $soft_descriptor_city;
+        return $this;
+    }
+
+    /**
+     * Soft descriptor city used when charging this funding source. If length exceeds max length, the value will be truncated. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getSoftDescriptorCity()
+    {
+        return $this->soft_descriptor_city;
+    }
+
+    /**
      * Payment options requested for this purchase unit
-     *
      *
      * @param \PayPal\Api\PaymentOptions $payment_options
@@ -285,4 +353,56 @@
     }
 
+    /**
+     * List of external funding being applied to the purchase unit. Each external_funding unit should have a unique reference_id
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\ExternalFunding[] $external_funding
+     *
+     * @return $this
+     */
+    public function setExternalFunding($external_funding)
+    {
+        $this->external_funding = $external_funding;
+        return $this;
+    }
+
+    /**
+     * List of external funding being applied to the purchase unit. Each external_funding unit should have a unique reference_id
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\ExternalFunding[]
+     */
+    public function getExternalFunding()
+    {
+        return $this->external_funding;
+    }
+
+    /**
+     * Append ExternalFunding to the list.
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\ExternalFunding $externalFunding
+     * @return $this
+     */
+    public function addExternalFunding($externalFunding)
+    {
+        if (!$this->getExternalFunding()) {
+            return $this->setExternalFunding(array($externalFunding));
+        } else {
+            return $this->setExternalFunding(
+                array_merge($this->getExternalFunding(), array($externalFunding))
+            );
+        }
+    }
+
+    /**
+     * Remove ExternalFunding from the list.
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\ExternalFunding $externalFunding
+     * @return $this
+     */
+    public function removeExternalFunding($externalFunding)
+    {
+        return $this->setExternalFunding(
+            array_diff($this->getExternalFunding(), array($externalFunding))
+        );
+    }
 
 }
Index: /lib/PayPal/Api/Cost.php
===================================================================
--- /lib/PayPal/Api/Cost.php	(revision 7220)
+++ /lib/PayPal/Api/Cost.php	(revision 7221)
@@ -4,11 +4,11 @@
 
 use PayPal\Common\PayPalModel;
+use PayPal\Converter\FormatConverter;
 use PayPal\Validation\NumericValidator;
-use PayPal\Converter\FormatConverter;
 
 /**
  * Class Cost
  *
- * Cost as a percent. For example, 10% should be entered as 10. Alternatively, cost as an amount. For example, an amount of 5 should be entered as 5.
+ * Cost as a percent or an amount. For example, to specify 10%, enter `10`. Alternatively, to specify an amount of 5, enter `5`.
  *
  * @package PayPal\Api
@@ -45,5 +45,5 @@
 
     /**
-     * Cost in amount. Range of 0 to 999999.99.
+     * The cost, as an amount. Valid range is from 0 to 1,000,000.
      *
      * @param \PayPal\Api\Currency $amount
@@ -58,5 +58,5 @@
 
     /**
-     * Cost in amount. Range of 0 to 999999.99.
+     * The cost, as an amount. Valid range is from 0 to 1,000,000.
      *
      * @return \PayPal\Api\Currency
Index: /lib/PayPal/Api/CreateProfileResponse.php
===================================================================
--- /lib/PayPal/Api/CreateProfileResponse.php	(revision 7220)
+++ /lib/PayPal/Api/CreateProfileResponse.php	(revision 7221)
@@ -2,6 +2,4 @@
 
 namespace PayPal\Api;
-
-use PayPal\Common\PayPalModel;
 
 /**
@@ -14,5 +12,5 @@
  * @property string id
  */
-class CreateProfileResponse extends PayPalModel
+class CreateProfileResponse extends WebProfile
 {
     /**
Index: /lib/PayPal/Api/Credit.php
===================================================================
--- /lib/PayPal/Api/Credit.php	(revision 7220)
+++ /lib/PayPal/Api/Credit.php	(revision 7221)
@@ -14,5 +14,4 @@
  * @property string id
  * @property string type
- * @property string terms
  */
 class Credit extends PayPalModel
@@ -42,5 +41,5 @@
 
     /**
-     * Specifies the type of credit.
+     * specifies type of credit
      * Valid Values: ["BILL_ME_LATER", "PAYPAL_EXTRAS_MASTERCARD", "EBAY_MASTERCARD", "PAYPAL_SMART_CONNECT"]
      *
@@ -56,5 +55,5 @@
 
     /**
-     * Specifies the type of credit
+     * specifies type of credit
      *
      * @return string
@@ -65,26 +64,3 @@
     }
 
-    /**
-     * URI to the associated terms.
-     *
-     * @param string $terms
-     *
-     * @return $this
-     */
-    public function setTerms($terms)
-    {
-        $this->terms = $terms;
-        return $this;
-    }
-
-    /**
-     * URI to the associated terms.
-     *
-     * @return string
-     */
-    public function getTerms()
-    {
-        return $this->terms;
-    }
-
 }
Index: /lib/PayPal/Api/CreditCard.php
===================================================================
--- /lib/PayPal/Api/CreditCard.php	(revision 7220)
+++ /lib/PayPal/Api/CreditCard.php	(revision 7221)
@@ -4,37 +4,34 @@
 
 use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 
 /**
  * Class CreditCard
  *
- * A resource representing a credit card that can be used to fund a payment.
+ * @package    PayPal\Api
  *
- * @package PayPal\Api
- *
- * @property string id
- * @property string number
- * @property string type
- * @property int expire_month
- * @property int expire_year
- * @property string cvv2
- * @property string first_name
- * @property string last_name
+ * @property string              number
+ * @property string              type
+ * @property int                 expire_month
+ * @property int                 expire_year
+ * @property string              cvv2
+ * @property string              first_name
+ * @property string              last_name
  * @property \PayPal\Api\Address billing_address
- * @property string external_customer_id
- * @property string state
- * @property string valid_until
- * @property string create_time
- * @property string update_time
+ * @property string              external_customer_id
+ * @property string              state
+ * @property string              valid_until
+ * @property \PayPal\Api\Links[] links
  */
 class CreditCard extends PayPalResourceModel
 {
     /**
-     * ID of the credit card being saved for later use.
-     *
+     * ID of the credit card. This ID is provided in the response when storing credit cards. **Required if using a stored credit card.**
+     *
+     * @deprecated Not publicly available
      * @param string $id
-     * 
+     *
      * @return $this
      */
@@ -46,6 +43,7 @@
 
     /**
-     * ID of the credit card being saved for later use.
-     *
+     * ID of the credit card. This ID is provided in the response when storing credit cards. **Required if using a stored credit card.**
+     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -56,8 +54,8 @@
 
     /**
-     * Card number.
+     * Credit card number. Numeric characters only with no spaces or punctuation. The string must conform with modulo and length required by each credit card type. *Redacted in responses.*
      *
      * @param string $number
-     * 
+     *
      * @return $this
      */
@@ -69,5 +67,5 @@
 
     /**
-     * Card number.
+     * Credit card number. Numeric characters only with no spaces or punctuation. The string must conform with modulo and length required by each credit card type. *Redacted in responses.*
      *
      * @return string
@@ -79,8 +77,8 @@
 
     /**
-     * Type of the Card (eg. Visa, Mastercard, etc.).
+     * Credit card type. Valid types are: `visa`, `mastercard`, `discover`, `amex`
      *
      * @param string $type
-     * 
+     *
      * @return $this
      */
@@ -92,5 +90,5 @@
 
     /**
-     * Type of the Card (eg. Visa, Mastercard, etc.).
+     * Credit card type. Valid types are: `visa`, `mastercard`, `discover`, `amex`
      *
      * @return string
@@ -102,8 +100,8 @@
 
     /**
-     * 2 digit card expiry month.
+     * Expiration month with no leading zero. Acceptable values are 1 through 12.
      *
      * @param int $expire_month
-     * 
+     *
      * @return $this
      */
@@ -115,5 +113,5 @@
 
     /**
-     * 2 digit card expiry month.
+     * Expiration month with no leading zero. Acceptable values are 1 through 12.
      *
      * @return int
@@ -125,8 +123,8 @@
 
     /**
-     * 4 digit card expiry year
+     * 4-digit expiration year.
      *
      * @param int $expire_year
-     * 
+     *
      * @return $this
      */
@@ -138,5 +136,5 @@
 
     /**
-     * 4 digit card expiry year
+     * 4-digit expiration year.
      *
      * @return int
@@ -148,8 +146,8 @@
 
     /**
-     * Card validation code. Only supported when making a Payment but not when saving a credit card for future use.
+     * 3-4 digit card validation code.
      *
      * @param string $cvv2
-     * 
+     *
      * @return $this
      */
@@ -161,5 +159,5 @@
 
     /**
-     * Card validation code. Only supported when making a Payment but not when saving a credit card for future use.
+     * 3-4 digit card validation code.
      *
      * @return string
@@ -171,8 +169,8 @@
 
     /**
-     * Card holder's first name.
+     * Cardholder's first name.
      *
      * @param string $first_name
-     * 
+     *
      * @return $this
      */
@@ -184,5 +182,5 @@
 
     /**
-     * Card holder's first name.
+     * Cardholder's first name.
      *
      * @return string
@@ -194,8 +192,8 @@
 
     /**
-     * Card holder's last name.
+     * Cardholder's last name.
      *
      * @param string $last_name
-     * 
+     *
      * @return $this
      */
@@ -207,5 +205,5 @@
 
     /**
-     * Card holder's last name.
+     * Cardholder's last name.
      *
      * @return string
@@ -220,5 +218,5 @@
      *
      * @param \PayPal\Api\Address $billing_address
-     * 
+     *
      * @return $this
      */
@@ -240,8 +238,8 @@
 
     /**
-     * A unique identifier of the customer to whom this bank account belongs to. Generated and provided by the facilitator. This is required when creating or using a stored funding instrument in vault.
+     * A unique identifier of the customer to whom this bank account belongs. Generated and provided by the facilitator. **This is now used in favor of `payer_id` when creating or using a stored funding instrument in the vault.**
      *
      * @param string $external_customer_id
-     * 
+     *
      * @return $this
      */
@@ -253,5 +251,5 @@
 
     /**
-     * A unique identifier of the customer to whom this bank account belongs to. Generated and provided by the facilitator. This is required when creating or using a stored funding instrument in vault.
+     * A unique identifier of the customer to whom this bank account belongs. Generated and provided by the facilitator. **This is now used in favor of `payer_id` when creating or using a stored funding instrument in the vault.**
      *
      * @return string
@@ -263,9 +261,80 @@
 
     /**
-     * State of the funding instrument.
+     * A user provided, optional convenvience field that functions as a unique identifier for the merchant on behalf of whom this credit card is being stored for. Note that this has no relation to PayPal merchant id
+     *
+     * @param string $merchant_id
+     *
+     * @return $this
+     */
+    public function setMerchantId($merchant_id)
+    {
+        $this->merchant_id = $merchant_id;
+        return $this;
+    }
+
+    /**
+     * A user provided, optional convenvience field that functions as a unique identifier for the merchant on behalf of whom this credit card is being stored for. Note that this has no relation to PayPal merchant id
+     *
+     * @return string
+     */
+    public function getMerchantId()
+    {
+        return $this->merchant_id;
+    }
+
+    /**
+     * A unique identifier that you can assign and track when storing a credit card or using a stored credit card. This ID can help to avoid unintentional use or misuse of credit cards. This ID can be any value you would like to associate with the saved card, such as a UUID, username, or email address. Required when using a stored credit card if a payer_id was originally provided when storing the credit card in vault.
+     *
+     * @deprecated This is being deprecated in favor of the `external_customer_id` property.
+     * @param string $payer_id
+     *
+     * @return $this
+     */
+    public function setPayerId($payer_id)
+    {
+        $this->payer_id = $payer_id;
+        return $this;
+    }
+
+    /**
+     * A unique identifier that you can assign and track when storing a credit card or using a stored credit card. This ID can help to avoid unintentional use or misuse of credit cards. This ID can be any value you would like to associate with the saved card, such as a UUID, username, or email address. Required when using a stored credit card if a payer_id was originally provided when storing the credit card in vault.
+     *
+     * @deprecated This is being deprecated in favor of the `external_customer_id` property.
+     * @return string
+     */
+    public function getPayerId()
+    {
+        return $this->payer_id;
+    }
+
+    /**
+     * A unique identifier of the bank account resource. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchant.
+     *
+     * @param string $external_card_id
+     *
+     * @return $this
+     */
+    public function setExternalCardId($external_card_id)
+    {
+        $this->external_card_id = $external_card_id;
+        return $this;
+    }
+
+    /**
+     * A unique identifier of the bank account resource. Generated and provided by the facilitator so it can be used to restrict the usage of the bank account to the specific merchant.
+     *
+     * @return string
+     */
+    public function getExternalCardId()
+    {
+        return $this->external_card_id;
+    }
+
+    /**
+     * State of the credit card funding instrument.
      * Valid Values: ["expired", "ok"]
      *
      * @param string $state
-     * 
+     *
      * @return $this
      */
@@ -277,5 +346,5 @@
 
     /**
-     * State of the funding instrument.
+     * State of the credit card funding instrument.
      *
      * @return string
@@ -287,8 +356,54 @@
 
     /**
+     * Funding instrument expiration date.
+     *
+     * @param string $create_time
+     *
+     * @return $this
+     */
+    public function setCreateTime($create_time)
+    {
+        $this->create_time = $create_time;
+        return $this;
+    }
+
+    /**
+     * Resource creation time  as ISO8601 date-time format (ex: 1994-11-05T13:15:30Z) that indicates creation time.
+     *
+     * @return string
+     */
+    public function getCreateTime()
+    {
+        return $this->create_time;
+    }
+
+    /**
+     * Resource creation time  as ISO8601 date-time format (ex: 1994-11-05T13:15:30Z) that indicates the updation time.
+     *
+     * @param string $update_time
+     *
+     * @return $this
+     */
+    public function setUpdateTime($update_time)
+    {
+        $this->update_time = $update_time;
+        return $this;
+    }
+
+    /**
+     * Resource creation time  as ISO8601 date-time format (ex: 1994-11-05T13:15:30Z) that indicates the updation time.
+     *
+     * @return string
+     */
+    public function getUpdateTime()
+    {
+        return $this->update_time;
+    }
+
+    /**
      * Date/Time until this resource can be used fund a payment.
      *
      * @param string $valid_until
-     * 
+     *
      * @return $this
      */
@@ -300,5 +415,5 @@
 
     /**
-     * Date/Time until this resource can be used fund a payment.
+     * Funding instrument expiration date.
      *
      * @return string
@@ -310,54 +425,8 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
-     *
-     * @param string $create_time
-     *
-     * @return $this
-     */
-    public function setCreateTime($create_time)
-    {
-        $this->create_time = $create_time;
-        return $this;
-    }
-
-    /**
-     * Time the resource was created in UTC ISO8601 format.
-     *
-     * @return string
-     */
-    public function getCreateTime()
-    {
-        return $this->create_time;
-    }
-
-    /**
-     * Time the resource was created in UTC ISO8601 format.
-     *
-     * @param string $update_time
-     *
-     * @return $this
-     */
-    public function setUpdateTime($update_time)
-    {
-        $this->update_time = $update_time;
-        return $this;
-    }
-
-    /**
-     * Time the resource was created in UTC ISO8601 format.
-     *
-     * @return string
-     */
-    public function getUpdateTime()
-    {
-        return $this->update_time;
-    }
-
-    /**
      * Creates a new Credit Card Resource (aka Tokenize).
      *
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return CreditCard
      */
@@ -380,7 +449,7 @@
      * Obtain the Credit Card resource for the given identifier.
      *
-     * @param string $creditCardId
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @param string         $creditCardId
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return CreditCard
      */
@@ -405,6 +474,6 @@
      * Delete the Credit Card resource for the given identifier.
      *
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return bool
      */
@@ -427,7 +496,7 @@
      * Update information in a previously saved card. Only the modified fields need to be passed in the request.
      *
-     * @param PatchRequest $patchRequest
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @param PatchRequest   $patchRequest
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return CreditCard
      */
@@ -449,3 +518,43 @@
     }
 
+    /**
+     * Retrieves a list of Credit Card resources.
+     *
+     * @param array          $params
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
+     * @return CreditCardList
+     */
+    public static function all($params, $apiContext = null, $restCall = null)
+    {
+        if (is_null($params)) {
+            $params = array();
+        }
+        ArgumentValidator::validate($params, 'params');
+        $payLoad = "";
+        $allowedParams = array(
+            'page_size' => 1,
+            'page' => 1,
+            'start_time' => 1,
+            'end_time' => 1,
+            'sort_order' => 1,
+            'sort_by' => 1,
+            'merchant_id' => 1,
+            'external_card_id' => 1,
+            'external_customer_id' => 1,
+            'total_required' => 1
+        );
+        $json = self::executeCall(
+            "/v1/vault/credit-cards" . "?" . http_build_query(array_intersect_key($params, $allowedParams)),
+            "GET",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        $ret = new CreditCardList();
+        $ret->fromJson($json);
+        return $ret;
+    }
+
 }
Index: /lib/PayPal/Api/CreditCardHistory.php
===================================================================
--- /lib/PayPal/Api/CreditCardHistory.php	(revision 7220)
+++ /lib/PayPal/Api/CreditCardHistory.php	(revision 7221)
@@ -4,5 +4,4 @@
 
 use PayPal\Common\PayPalModel;
-use PayPal\Rest\ApiContext;
 
 /**
@@ -13,5 +12,5 @@
  * @package PayPal\Api
  *
- * @property \PayPal\Api\CreditCard credit_cards
+ * @property \PayPal\Api\CreditCard[] credit_cards
  * @property int count
  * @property string next_id
@@ -21,8 +20,7 @@
     /**
      * A list of credit card resources
-     * 
      *
-     * @param \PayPal\Api\CreditCard $credit-cards
-     * 
+     *
+     * @param \PayPal\Api\CreditCard[] $credit_cards
      * @return $this
      */
Index: /lib/PayPal/Api/CreditCardList.php
===================================================================
--- /lib/PayPal/Api/CreditCardList.php	(revision 7220)
+++ /lib/PayPal/Api/CreditCardList.php	(revision 7221)
@@ -3,5 +3,5 @@
 namespace PayPal\Api;
 
-use PayPal\Common\PayPalModel;
+use PayPal\Common\PayPalResourceModel;
 
 /**
@@ -12,20 +12,21 @@
  * @package PayPal\Api
  *
- * @property \PayPal\Api\CreditCard[] credit_cards
- * @property int count
- * @property string next_id
+ * @property \PayPal\Api\CreditCard[] items
+ * @property \PayPal\Api\Links[] links
+ * @property int total_items
+ * @property int total_pages
  */
-class CreditCardList extends PayPalModel
+class CreditCardList extends PayPalResourceModel
 {
     /**
      * A list of credit card resources
      *
-     * @param \PayPal\Api\CreditCard[] $credit_cards
+     * @param \PayPal\Api\CreditCard[] $items
      * 
      * @return $this
      */
-    public function setCreditCards($credit_cards)
+    public function setItems($items)
     {
-        $this->{"credit-cards"} = $credit_cards;
+        $this->items = $items;
         return $this;
     }
@@ -36,22 +37,22 @@
      * @return \PayPal\Api\CreditCard[]
      */
-    public function getCreditCards()
+    public function getItems()
     {
-        return $this->{"credit-cards"};
+        return $this->items;
     }
 
     /**
-     * Append CreditCards to the list.
+     * Append Items to the list.
      *
      * @param \PayPal\Api\CreditCard $creditCard
      * @return $this
      */
-    public function addCreditCard($creditCard)
+    public function addItem($creditCard)
     {
-        if (!$this->getCreditCards()) {
-            return $this->setCreditCards(array($creditCard));
+        if (!$this->getItems()) {
+            return $this->setItems(array($creditCard));
         } else {
-            return $this->setCreditCards(
-                array_merge($this->getCreditCards(), array($creditCard))
+            return $this->setItems(
+                array_merge($this->getItems(), array($creditCard))
             );
         }
@@ -59,60 +60,60 @@
 
     /**
-     * Remove CreditCards from the list.
+     * Remove Items from the list.
      *
      * @param \PayPal\Api\CreditCard $creditCard
      * @return $this
      */
-    public function removeCreditCard($creditCard)
+    public function removeItem($creditCard)
     {
-        return $this->setCreditCards(
-            array_diff($this->getCreditCards(), array($creditCard))
+        return $this->setItems(
+            array_diff($this->getItems(), array($creditCard))
         );
     }
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * Total number of items present in the given list. Note that the number of items might be larger than the records in the current page.
      *
-     * @param int $count
+     * @param int $total_items
      * 
      * @return $this
      */
-    public function setCount($count)
+    public function setTotalItems($total_items)
     {
-        $this->count = $count;
+        $this->total_items = $total_items;
         return $this;
     }
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * Total number of items present in the given list. Note that the number of items might be larger than the records in the current page.
      *
      * @return int
      */
-    public function getCount()
+    public function getTotalItems()
     {
-        return $this->count;
+        return $this->total_items;
     }
 
     /**
-     * Identifier of the next element to get the next range of results.
+     * Total number of pages that exist, for the total number of items, with the given page size.
      *
-     * @param string $next_id
+     * @param int $total_pages
      * 
      * @return $this
      */
-    public function setNextId($next_id)
+    public function setTotalPages($total_pages)
     {
-        $this->next_id = $next_id;
+        $this->total_pages = $total_pages;
         return $this;
     }
 
     /**
-     * Identifier of the next element to get the next range of results.
+     * Total number of pages that exist, for the total number of items, with the given page size.
      *
-     * @return string
+     * @return int
      */
-    public function getNextId()
+    public function getTotalPages()
     {
-        return $this->next_id;
+        return $this->total_pages;
     }
 
Index: /lib/PayPal/Api/CreditCardToken.php
===================================================================
--- /lib/PayPal/Api/CreditCardToken.php	(revision 7220)
+++ /lib/PayPal/Api/CreditCardToken.php	(revision 7221)
@@ -22,5 +22,5 @@
 {
     /**
-     * ID of a previously saved Credit Card resource using /vault/credit-card API.
+     * ID of credit card previously stored using `/vault/credit-card`.
      *
      * @param string $credit_card_id
@@ -35,5 +35,5 @@
 
     /**
-     * ID of a previously saved Credit Card resource using /vault/credit-card API.
+     * ID of credit card previously stored using `/vault/credit-card`.
      *
      * @return string
@@ -45,5 +45,5 @@
 
     /**
-     * The unique identifier of the payer used when saving this credit card using /vault/credit-card API.
+     * A unique identifier that you can assign and track when storing a credit card or using a stored credit card. This ID can help to avoid unintentional use or misuse of credit cards. This ID can be any value you would like to associate with the saved card, such as a UUID, username, or email address.  **Required when using a stored credit card if a payer_id was originally provided when storing the credit card in vault.**
      *
      * @param string $payer_id
@@ -58,5 +58,5 @@
 
     /**
-     * The unique identifier of the payer used when saving this credit card using /vault/credit-card API.
+     * A unique identifier that you can assign and track when storing a credit card or using a stored credit card. This ID can help to avoid unintentional use or misuse of credit cards. This ID can be any value you would like to associate with the saved card, such as a UUID, username, or email address.  **Required when using a stored credit card if a payer_id was originally provided when storing the credit card in vault.**
      *
      * @return string
@@ -68,5 +68,5 @@
 
     /**
-     * Last 4 digits of the card number from the saved card.
+     * Last four digits of the stored credit card number.
      *
      * @param string $last4
@@ -81,5 +81,5 @@
 
     /**
-     * Last 4 digits of the card number from the saved card.
+     * Last four digits of the stored credit card number.
      *
      * @return string
@@ -91,5 +91,5 @@
 
     /**
-     * Type of the Card (eg. visa, mastercard, etc.) from the saved card. Please note that the values are always in lowercase and not meant to be used directly for display.
+     * Credit card type. Valid types are: `visa`, `mastercard`, `discover`, `amex`. Values are presented in lowercase and not should not be used for display.
      *
      * @param string $type
@@ -104,5 +104,5 @@
 
     /**
-     * Type of the Card (eg. visa, mastercard, etc.) from the saved card. Please note that the values are always in lowercase and not meant to be used directly for display.
+     * Credit card type. Valid types are: `visa`, `mastercard`, `discover`, `amex`. Values are presented in lowercase and not should not be used for display.
      *
      * @return string
@@ -114,5 +114,5 @@
 
     /**
-     * card expiry month from the saved card with value 1 - 12
+     * Expiration month with no leading zero. Acceptable values are 1 through 12.
      *
      * @param int $expire_month
@@ -127,5 +127,5 @@
 
     /**
-     * card expiry month from the saved card with value 1 - 12
+     * Expiration month with no leading zero. Acceptable values are 1 through 12.
      *
      * @return int
@@ -137,5 +137,5 @@
 
     /**
-     * 4 digit card expiry year from the saved card
+     * 4-digit expiration year.
      *
      * @param int $expire_year
@@ -150,5 +150,5 @@
 
     /**
-     * 4 digit card expiry year from the saved card
+     * 4-digit expiration year.
      *
      * @return int
Index: /lib/PayPal/Api/CurrencyConversion.php
===================================================================
--- /lib/PayPal/Api/CurrencyConversion.php	(revision 7220)
+++ /lib/PayPal/Api/CurrencyConversion.php	(revision 7221)
@@ -20,5 +20,4 @@
  * @property string conversion_type
  * @property bool conversion_type_changeable
- * @property string web_url
  * @property \PayPal\Api\Links[] links
  */
@@ -190,5 +189,5 @@
      * Base URL to web applications endpoint
      * Valid Values: ["https://www.paypal.com/{country_code}/webapps/xocspartaweb/webflow/sparta/proxwebflow", "https://www.paypal.com/{country_code}/proxflow"]
-     *
+     * @deprecated Not publicly available
      * @param string $web_url
      * @throws \InvalidArgumentException
@@ -204,5 +203,5 @@
     /**
      * Base URL to web applications endpoint
-     *
+     * @deprecated Not publicly available
      * @return string
      */
Index: /lib/PayPal/Api/CustomAmount.php
===================================================================
--- /lib/PayPal/Api/CustomAmount.php	(revision 7220)
+++ /lib/PayPal/Api/CustomAmount.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class CustomAmount
  *
- * Custom amount applied on an invoice. If a label is included then the amount cannot be empty.
+ * The custom amount applied on an invoice. If you include a label, the amount cannot be empty.
  *
  * @package PayPal\Api
@@ -18,5 +18,5 @@
 {
     /**
-     * Custom amount label. 25 characters max.
+     * The custom amount label. Maximum length is 25 characters.
      *
      * @param string $label
@@ -31,5 +31,5 @@
 
     /**
-     * Custom amount label. 25 characters max.
+     * The custom amount label. Maximum length is 25 characters.
      *
      * @return string
@@ -41,5 +41,5 @@
 
     /**
-     * Custom amount value. Range of 0 to 999999.99.
+     * The custom amount value. Valid range is from -999999.99 to 999999.99.
      *
      * @param \PayPal\Api\Currency $amount
@@ -54,5 +54,5 @@
 
     /**
-     * Custom amount value. Range of 0 to 999999.99.
+     * The custom amount value. Valid range is from -999999.99 to 999999.99.
      *
      * @return \PayPal\Api\Currency
Index: /lib/PayPal/Api/Details.php
===================================================================
--- /lib/PayPal/Api/Details.php	(revision 7220)
+++ /lib/PayPal/Api/Details.php	(revision 7221)
@@ -26,5 +26,5 @@
 {
     /**
-     * Sub-total (amount) of items being paid for.
+     * Amount of the subtotal of the items. **Required** if line items are specified. 10 characters max, with support for 2 decimal places.
      *
      * @param string|double $subtotal
@@ -41,5 +41,5 @@
 
     /**
-     * Sub-total (amount) of items being paid for.
+     * Amount of the subtotal of the items. **Required** if line items are specified. 10 characters max, with support for 2 decimal places.
      *
      * @return string
@@ -51,5 +51,5 @@
 
     /**
-     * Amount being charged for shipping.
+     * Amount charged for shipping. 10 characters max with support for 2 decimal places.
      *
      * @param string|double $shipping
@@ -66,5 +66,5 @@
 
     /**
-     * Amount being charged for shipping.
+     * Amount charged for shipping. 10 characters max with support for 2 decimal places.
      *
      * @return string
@@ -76,5 +76,5 @@
 
     /**
-     * Amount being charged as tax.
+     * Amount charged for tax. 10 characters max with support for 2 decimal places.
      *
      * @param string|double $tax
@@ -91,5 +91,5 @@
 
     /**
-     * Amount being charged as tax.
+     * Amount charged for tax. 10 characters max with support for 2 decimal places.
      *
      * @return string
@@ -101,7 +101,7 @@
 
     /**
-     * Amount being charged as handling fee.
-     *
-     * @param string $handling_fee
+     * Amount being charged for the handling fee. Only supported when the `payment_method` is set to `paypal`.
+     *
+     * @param string|double $handling_fee
      * 
      * @return $this
@@ -116,5 +116,5 @@
 
     /**
-     * Amount being charged as handling fee.
+     * Amount being charged for the handling fee. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -126,7 +126,7 @@
 
     /**
-     * Amount being charged as shipping discount.
-     *
-     * @param string $shipping_discount
+     * Amount being discounted for the shipping fee. Only supported when the `payment_method` is set to `paypal`.
+     *
+     * @param string|double $shipping_discount
      * 
      * @return $this
@@ -141,5 +141,5 @@
 
     /**
-     * Amount being charged as shipping discount.
+     * Amount being discounted for the shipping fee. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -151,5 +151,5 @@
 
     /**
-     * Amount being charged as insurance.
+     * Amount being charged for the insurance fee. Only supported when the `payment_method` is set to `paypal`.
      *
      * @param string|double $insurance
@@ -166,5 +166,5 @@
 
     /**
-     * Amount being charged as insurance.
+     * Amount being charged for the insurance fee. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -178,5 +178,5 @@
      * Amount being charged as gift wrap fee.
      *
-     * @param string $gift_wrap
+     * @param string|double $gift_wrap
      * 
      * @return $this
Index: /lib/PayPal/Api/Error.php
===================================================================
--- /lib/PayPal/Api/Error.php	(revision 7220)
+++ /lib/PayPal/Api/Error.php	(revision 7221)
@@ -12,12 +12,10 @@
  * @package PayPal\Api
  *
- * @property string name
- * @property string purchase_unit_reference_id
- * @property string debug_id
- * @property string message
- * @property string code
- * @property string information_link
+ * @property string                     name
+ * @property string                     message
  * @property \PayPal\Api\ErrorDetails[] details
- * @property \PayPal\Api\Links[] links
+ * @property string                     information_link
+ * @property string                     debug_id
+ * @property \PayPal\Api\Links[]        links
  */
 class Error extends PayPalModel
@@ -27,5 +25,5 @@
      *
      * @param string $name
-     * 
+     *
      * @return $this
      */
@@ -49,6 +47,7 @@
      * Reference ID of the purchase_unit associated with this error
      *
+     * @deprecated Not publicly available
      * @param string $purchase_unit_reference_id
-     * 
+     *
      * @return $this
      */
@@ -62,4 +61,5 @@
      * Reference ID of the purchase_unit associated with this error
      *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -70,8 +70,33 @@
 
     /**
+     * PayPal internal error code.
+     *
+     * @deprecated Not publicly available
+     * @param string $code
+     *
+     * @return $this
+     */
+    public function setCode($code)
+    {
+        $this->code = $code;
+        return $this;
+    }
+
+    /**
+     * PayPal internal error code.
+     *
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getCode()
+    {
+        return $this->code;
+    }
+
+    /**
      * PayPal internal identifier used for correlation purposes.
      *
      * @param string $debug_id
-     * 
+     *
      * @return $this
      */
@@ -96,5 +121,5 @@
      *
      * @param string $message
-     * 
+     *
      * @return $this
      */
@@ -116,31 +141,8 @@
 
     /**
-     * PayPal internal error code.
-     *
-     * @param string $code
-     * 
-     * @return $this
-     */
-    public function setCode($code)
-    {
-        $this->code = $code;
-        return $this;
-    }
-
-    /**
-     * PayPal internal error code.
-     *
-     * @return string
-     */
-    public function getCode()
-    {
-        return $this->code;
-    }
-
-    /**
      * URI for detailed information related to this error for the developer.
      *
      * @param string $information_link
-     * 
+     *
      * @return $this
      */
@@ -165,5 +167,5 @@
      *
      * @param \PayPal\Api\ErrorDetails[] $details
-     * 
+     *
      * @return $this
      */
@@ -215,8 +217,58 @@
 
     /**
+     * response codes returned from a payment processor such as avs, cvv, etc. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\ProcessorResponse $processor_response
+     *
+     * @return $this
+     */
+    public function setProcessorResponse($processor_response)
+    {
+        $this->processor_response = $processor_response;
+        return $this;
+    }
+
+    /**
+     * response codes returned from a payment processor such as avs, cvv, etc. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\ProcessorResponse
+     */
+    public function getProcessorResponse()
+    {
+        return $this->processor_response;
+    }
+
+    /**
+     * Fraud filter details.  Only supported when the `payment_method` is set to `credit_card`
+     *
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\FmfDetails $fmf_details
+     *
+     * @return $this
+     */
+    public function setFmfDetails($fmf_details)
+    {
+        $this->fmf_details = $fmf_details;
+        return $this;
+    }
+
+    /**
+     * Fraud filter details.  Only supported when the `payment_method` is set to `credit_card`
+     *
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\FmfDetails
+     */
+    public function getFmfDetails()
+    {
+        return $this->fmf_details;
+    }
+
+    /**
      * Sets Links
      *
      * @param \PayPal\Api\Links[] $links
-     * 
+     *
      * @return $this
      */
@@ -266,4 +318,3 @@
         );
     }
-
 }
Index: /lib/PayPal/Api/ErrorDetails.php
===================================================================
--- /lib/PayPal/Api/ErrorDetails.php	(revision 7220)
+++ /lib/PayPal/Api/ErrorDetails.php	(revision 7221)
@@ -14,6 +14,4 @@
  * @property string field
  * @property string issue
- * @property string purchase_unit_reference_id
- * @property string code
  */
 class ErrorDetails extends PayPalModel
@@ -67,5 +65,5 @@
     /**
      * Reference ID of the purchase_unit associated with this error
-     *
+     * @deprecated Not publicly available
      * @param string $purchase_unit_reference_id
      * 
@@ -80,5 +78,5 @@
     /**
      * Reference ID of the purchase_unit associated with this error
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -90,5 +88,5 @@
     /**
      * PayPal internal error code.
-     *
+     * @deprecated Not publicly available
      * @param string $code
      * 
@@ -103,5 +101,5 @@
     /**
      * PayPal internal error code.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
Index: /lib/PayPal/Api/ExtendedBankAccount.php
===================================================================
--- /lib/PayPal/Api/ExtendedBankAccount.php	(revision 7220)
+++ /lib/PayPal/Api/ExtendedBankAccount.php	(revision 7221)
@@ -10,11 +10,10 @@
  * @package PayPal\Api
  *
- * @property string mandate_reference_number
  */
-class ExtendedBankAccount extends BankAccount 
+class ExtendedBankAccount extends BankAccount
 {
     /**
      * Identifier of the direct debit mandate to validate. Currently supported only for EU bank accounts(SEPA).
-     *
+     * @deprecated Not publicly available
      * @param string $mandate_reference_number
      * 
@@ -29,5 +28,5 @@
     /**
      * Identifier of the direct debit mandate to validate. Currently supported only for EU bank accounts(SEPA).
-     *
+     * @deprecated Not publicly available
      * @return string
      */
Index: /lib/PayPal/Api/FlowConfig.php
===================================================================
--- /lib/PayPal/Api/FlowConfig.php	(revision 7220)
+++ /lib/PayPal/Api/FlowConfig.php	(revision 7221)
@@ -15,10 +15,11 @@
  * @property string landing_page_type
  * @property string bank_txn_pending_url
+ * @property string user_action
+ * @property string return_uri_http_method
  */
 class FlowConfig extends PayPalModel
 {
     /**
-     * Type of PayPal page to be displayed when a user lands on the PayPal site for checkout. Allowed values: `Billing` or `Login`. When set to `Billing`, the Non-PayPal account landing page is used. When set to `Login`, the PayPal account login landing page is used.
-     * 
+     * The type of landing page to display on the PayPal site for user checkout. Set to `Billing` to use the non-PayPal account landing page. Set to `Login` to use the PayPal account login landing page.
      *
      * @param string $landing_page_type
@@ -33,5 +34,5 @@
 
     /**
-     * Type of PayPal page to be displayed when a user lands on the PayPal site for checkout. Allowed values: `Billing` or `Login`. When set to `Billing`, the Non-PayPal account landing page is used. When set to `Login`, the PayPal account login landing page is used.
+     * The type of landing page to display on the PayPal site for user checkout. Set to `Billing` to use the non-PayPal account landing page. Set to `Login` to use the PayPal account login landing page.
      *
      * @return string
@@ -43,6 +44,5 @@
 
     /**
-     * The URL on the merchant site for transferring to after a bank transfer payment.
-     * 
+     * The merchant site URL to display after a bank transfer payment. Valid for only the Giropay or bank transfer payment method in Germany.
      *
      * @param string $bank_txn_pending_url
@@ -58,5 +58,5 @@
 
     /**
-     * The URL on the merchant site for transferring to after a bank transfer payment.
+     * The merchant site URL to display after a bank transfer payment. Valid for only the Giropay or bank transfer payment method in Germany.
      *
      * @return string
@@ -67,3 +67,49 @@
     }
 
+    /**
+     * Defines whether buyers can complete purchases on the PayPal or merchant website.
+     *
+     * @param string $user_action
+     * 
+     * @return $this
+     */
+    public function setUserAction($user_action)
+    {
+        $this->user_action = $user_action;
+        return $this;
+    }
+
+    /**
+     * Defines whether buyers can complete purchases on the PayPal or merchant website.
+     *
+     * @return string
+     */
+    public function getUserAction()
+    {
+        return $this->user_action;
+    }
+
+    /**
+     * Defines the HTTP method to use to redirect the user to a return URL. A valid value is `GET` or `POST`.
+     *
+     * @param string $return_uri_http_method
+     * 
+     * @return $this
+     */
+    public function setReturnUriHttpMethod($return_uri_http_method)
+    {
+        $this->return_uri_http_method = $return_uri_http_method;
+        return $this;
+    }
+
+    /**
+     * Defines the HTTP method to use to redirect the user to a return URL. A valid value is `GET` or `POST`.
+     *
+     * @return string
+     */
+    public function getReturnUriHttpMethod()
+    {
+        return $this->return_uri_http_method;
+    }
+
 }
Index: /lib/PayPal/Api/FmfDetails.php
===================================================================
--- /lib/PayPal/Api/FmfDetails.php	(revision 7220)
+++ /lib/PayPal/Api/FmfDetails.php	(revision 7221)
@@ -45,5 +45,5 @@
     /**
      * Filter Identifier.
-     * Valid Values: ["AVS_NO_MATCH", "AVS_PARTIAL_MATCH", "AVS_UNAVAILABLE_OR_UNSUPPORTED", "CARD_SECURITY_CODE_MISMATCH", "MAXIMUM_TRANSACTION_AMOUNT", "UNCONFIRMED_ADDRESS", "COUNTRY_MONITOR", "LARGE_ORDER_NUMBER", "BILLING_OR_SHIPPING_ADDRESS_MATCH", "RISKY_ZIP_CODE", "SUSPECTED_FREIGHT_FORWARDER_CHECK", "TOTAL_PURCHASE_PRICE_MINIMUM", "IP_ADDRESS_VELOCITY", "RISKY_EMAIL_ADDRESS_DOMAIN_CHECK", "RISKY_BANK_IDENTIFICATION_NUMBER_CHECK", "RISKY_IP_ADDRESS_RANGE", "PAYPAL_FRAUD_MODEL"]
+     * Valid Values: ["AVS_NO_MATCH", "AVS_PARTIAL_MATCH", "AVS_UNAVAILABLE_OR_UNSUPPORTED", "CARD_SECURITY_CODE_MISMATCH", "MAXIMUM_TRANSACTION_AMOUNT", "UNCONFIRMED_ADDRESS", "COUNTRY_MONITOR", "LARGE_ORDER_NUMBER", "BILLING_OR_SHIPPING_ADDRESS_MISMATCH", "RISKY_ZIP_CODE", "SUSPECTED_FREIGHT_FORWARDER_CHECK", "TOTAL_PURCHASE_PRICE_MINIMUM", "IP_ADDRESS_VELOCITY", "RISKY_EMAIL_ADDRESS_DOMAIN_CHECK", "RISKY_BANK_IDENTIFICATION_NUMBER_CHECK", "RISKY_IP_ADDRESS_RANGE", "PAYPAL_FRAUD_MODEL"]
      *
      * @param string $filter_id
Index: /lib/PayPal/Api/FundingDetail.php
===================================================================
--- /lib/PayPal/Api/FundingDetail.php	(revision 7220)
+++ /lib/PayPal/Api/FundingDetail.php	(revision 7221)
@@ -14,4 +14,6 @@
  * @property string clearing_time
  * @property string payment_hold_date
+ * @property string payment_debit_date
+ * @property string processing_type
  */
 class FundingDetail extends PayPalModel
@@ -41,5 +43,5 @@
 
     /**
-     * Hold-off duration of the payment
+     * [DEPRECATED] Hold-off duration of the payment. payment_debit_date should be used instead.
      *
      * @param string $payment_hold_date
@@ -54,5 +56,5 @@
 
     /**
-     * Hold-off duration of the payment
+     * @deprecated  [DEPRECATED] Hold-off duration of the payment. payment_debit_date should be used instead.
      *
      * @return string
@@ -63,3 +65,50 @@
     }
 
+    /**
+     * Date when funds will be debited from the payer's account
+     *
+     * @param string $payment_debit_date
+     * 
+     * @return $this
+     */
+    public function setPaymentDebitDate($payment_debit_date)
+    {
+        $this->payment_debit_date = $payment_debit_date;
+        return $this;
+    }
+
+    /**
+     * Date when funds will be debited from the payer's account
+     *
+     * @return string
+     */
+    public function getPaymentDebitDate()
+    {
+        return $this->payment_debit_date;
+    }
+
+    /**
+     * Processing type of the payment card
+     * Valid Values: ["CUP_SECURE", "PINLESS_DEBIT"]
+     *
+     * @param string $processing_type
+     * 
+     * @return $this
+     */
+    public function setProcessingType($processing_type)
+    {
+        $this->processing_type = $processing_type;
+        return $this;
+    }
+
+    /**
+     * Processing type of the payment card
+     *
+     * @return string
+     */
+    public function getProcessingType()
+    {
+        return $this->processing_type;
+    }
+
 }
Index: /lib/PayPal/Api/FundingInstrument.php
===================================================================
--- /lib/PayPal/Api/FundingInstrument.php	(revision 7220)
+++ /lib/PayPal/Api/FundingInstrument.php	(revision 7221)
@@ -8,26 +8,19 @@
  * Class FundingInstrument
  *
- * A resource representing a Payer's funding instrument.
+ * A resource representing a Payer's funding instrument. An instance of this schema is valid if and only if it is valid against exactly one of these supported properties
  *
  * @package PayPal\Api
  *
  * @property \PayPal\Api\CreditCard credit_card
- * @property \PayPal\Api\ExtendedBankAccount bank_account
  * @property \PayPal\Api\CreditCardToken credit_card_token
- * @property \PayPal\Api\Incentive incentive
- * @property \PayPal\Api\PaymentCard payment_card
- * @property \PayPal\Api\PaymentCardToken payment_card_token
- * @property \PayPal\Api\BankToken bank_account_token
- * @property \PayPal\Api\Credit credit
- * @property \PayPal\Api\CarrierAccountToken carrier_account_token
- *
+ * @property \PayPal\Api\Billing billing
  */
 class FundingInstrument extends PayPalModel
 {
     /**
-     * Credit Card information.
+     * Credit Card instrument.
      *
      * @param \PayPal\Api\CreditCard $credit_card
-     * 
+     *
      * @return $this
      */
@@ -39,5 +32,5 @@
 
     /**
-     * Credit Card information.
+     * Credit Card instrument.
      *
      * @return \PayPal\Api\CreditCard
@@ -49,8 +42,8 @@
 
     /**
-     * Credit Card information.
+     * PayPal vaulted credit Card instrument.
      *
      * @param \PayPal\Api\CreditCardToken $credit_card_token
-     * 
+     *
      * @return $this
      */
@@ -62,5 +55,5 @@
 
     /**
-     * Credit Card information.
+     * PayPal vaulted credit Card instrument.
      *
      * @return \PayPal\Api\CreditCardToken
@@ -75,5 +68,5 @@
      *
      * @param \PayPal\Api\PaymentCard $payment_card
-     * 
+     *
      * @return $this
      */
@@ -95,31 +88,8 @@
 
     /**
-     * Payment card token information.
-     *
-     * @param \PayPal\Api\PaymentCardToken $payment_card_token
-     * 
-     * @return $this
-     */
-    public function setPaymentCardToken($payment_card_token)
-    {
-        $this->payment_card_token = $payment_card_token;
-        return $this;
-    }
-
-    /**
-     * Payment card token information.
-     *
-     * @return \PayPal\Api\PaymentCardToken
-     */
-    public function getPaymentCardToken()
-    {
-        return $this->payment_card_token;
-    }
-
-    /**
      * Bank Account information.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\ExtendedBankAccount $bank_account
-     * 
+     *
      * @return $this
      */
@@ -132,5 +102,5 @@
     /**
      * Bank Account information.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\ExtendedBankAccount
      */
@@ -141,8 +111,8 @@
 
     /**
-     * Bank Account information.
-     *
+     * Vaulted bank account instrument.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\BankToken $bank_account_token
-     * 
+     *
      * @return $this
      */
@@ -154,6 +124,6 @@
 
     /**
-     * Bank Account information.
-     *
+     * Vaulted bank account instrument.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\BankToken
      */
@@ -164,8 +134,8 @@
 
     /**
-     * Credit funding information.
-     *
+     * PayPal credit funding instrument.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Credit $credit
-     * 
+     *
      * @return $this
      */
@@ -177,6 +147,6 @@
 
     /**
-     * Credit funding information.
-     *
+     * PayPal credit funding instrument.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Credit
      */
@@ -187,6 +157,6 @@
 
     /**
-     * Incentive funding information.
-     *
+     * Incentive funding instrument.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Incentive $incentive
      *
@@ -200,6 +170,6 @@
 
     /**
-     * Incentive funding information.
-     *
+     * Incentive funding instrument.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Incentive
      */
@@ -210,6 +180,29 @@
 
     /**
-     * Carrier account token information.
-     *
+     * External funding instrument.
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\ExternalFunding $external_funding
+     *
+     * @return $this
+     */
+    public function setExternalFunding($external_funding)
+    {
+        $this->external_funding = $external_funding;
+        return $this;
+    }
+
+    /**
+     * External funding instrument.
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\ExternalFunding
+     */
+    public function getExternalFunding()
+    {
+        return $this->external_funding;
+    }
+
+    /**
+     * Carrier account token instrument.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\CarrierAccountToken $carrier_account_token
      *
@@ -223,6 +216,6 @@
 
     /**
-     * Carrier account token information.
-     *
+     * Carrier account token instrument.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\CarrierAccountToken
      */
@@ -232,3 +225,97 @@
     }
 
+    /**
+     * Carrier account instrument
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\CarrierAccount $carrier_account
+     *
+     * @return $this
+     */
+    public function setCarrierAccount($carrier_account)
+    {
+        $this->carrier_account = $carrier_account;
+        return $this;
+    }
+
+    /**
+     * Carrier account instrument
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\CarrierAccount
+     */
+    public function getCarrierAccount()
+    {
+        return $this->carrier_account;
+    }
+
+    /**
+     * Private Label Card funding instrument. These are store cards provided by merchants to drive business with value to customer with convenience and rewards.
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\PrivateLabelCard $private_label_card
+     *
+     * @return $this
+     */
+    public function setPrivateLabelCard($private_label_card)
+    {
+        $this->private_label_card = $private_label_card;
+        return $this;
+    }
+
+    /**
+     * Private Label Card funding instrument. These are store cards provided by merchants to drive business with value to customer with convenience and rewards.
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\PrivateLabelCard
+     */
+    public function getPrivateLabelCard()
+    {
+        return $this->private_label_card;
+    }
+
+    /**
+     * Billing instrument that references pre-approval information for the payment
+     *
+     * @param \PayPal\Api\Billing $billing
+     *
+     * @return $this
+     */
+    public function setBilling($billing)
+    {
+        $this->billing = $billing;
+        return $this;
+    }
+
+    /**
+     * Billing instrument that references pre-approval information for the payment
+     *
+     * @return \PayPal\Api\Billing
+     */
+    public function getBilling()
+    {
+        return $this->billing;
+    }
+
+    /**
+     * Alternate Payment  information - Mostly regional payment providers. For e.g iDEAL in Netherlands
+     *
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\AlternatePayment $alternate_payment
+     *
+     * @return $this
+     */
+    public function setAlternatePayment($alternate_payment)
+    {
+        $this->alternate_payment = $alternate_payment;
+        return $this;
+    }
+
+    /**
+     * Alternate Payment  information - Mostly regional payment providers. For e.g iDEAL in Netherlands
+     *
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\AlternatePayment
+     */
+    public function getAlternatePayment()
+    {
+        return $this->alternate_payment;
+    }
+
 }
Index: /lib/PayPal/Api/FundingSource.php
===================================================================
--- /lib/PayPal/Api/FundingSource.php	(revision 7220)
+++ /lib/PayPal/Api/FundingSource.php	(revision 7221)
@@ -16,15 +16,15 @@
  * @property string soft_descriptor
  * @property \PayPal\Api\Currency amount
+ * @property \PayPal\Api\Currency negative_balance_amount
  * @property string legal_text
  * @property \PayPal\Api\FundingDetail funding_detail
  * @property string additional_text
- * @property \PayPal\Api\FundingInstrument extends
  * @property \PayPal\Api\Links[] links
  */
-class FundingSource extends PayPalModel
+class FundingSource extends FundingInstrument
 {
     /**
      * specifies funding mode of the instrument
-     * Valid Values: ["INSTANT_TRANSFER", "MANUAL_BANK_TRANSFER", "DELAYED_TRANSFER", "ECHECK"]
+     * Valid Values: ["INSTANT_TRANSFER", "MANUAL_BANK_TRANSFER", "DELAYED_TRANSFER", "ECHECK", "PAY_UPON_INVOICE"]
      *
      * @param string $funding_mode
@@ -50,5 +50,5 @@
     /**
      * Instrument type for this funding source
-     * Valid Values: ["BALANCE", "PAYMENT_CARD", "BANK_ACCOUNT", "CREDIT", "INCENTIVE"]
+     * Valid Values: ["BALANCE", "PAYMENT_CARD", "BANK_ACCOUNT", "CREDIT", "INCENTIVE", "EXTERNAL_FUNDING", "TAB"]
      *
      * @param string $funding_instrument_type
@@ -119,4 +119,27 @@
 
     /**
+     * Additional amount to be pulled from the instrument to recover a negative balance on the buyer's account that is owed to PayPal.
+     *
+     * @param \PayPal\Api\Currency $negative_balance_amount
+     * 
+     * @return $this
+     */
+    public function setNegativeBalanceAmount($negative_balance_amount)
+    {
+        $this->negative_balance_amount = $negative_balance_amount;
+        return $this;
+    }
+
+    /**
+     * Additional amount to be pulled from the instrument to recover a negative balance on the buyer's account that is owed to PayPal.
+     *
+     * @return \PayPal\Api\Currency
+     */
+    public function getNegativeBalanceAmount()
+    {
+        return $this->negative_balance_amount;
+    }
+
+    /**
      * Localized legal text relevant to funding source.
      *
@@ -191,5 +214,7 @@
      *
      * @param \PayPal\Api\FundingInstrument $extends
-     * 
+     *
+     * @deprecated Unused
+     *
      * @return $this
      */
@@ -202,4 +227,6 @@
     /**
      * Gets Extends
+     *
+     * @deprecated Unused
      *
      * @return \PayPal\Api\FundingInstrument
Index: /lib/PayPal/Api/FuturePayment.php
===================================================================
--- /lib/PayPal/Api/FuturePayment.php	(revision 7220)
+++ /lib/PayPal/Api/FuturePayment.php	(revision 7221)
@@ -3,5 +3,4 @@
 namespace PayPal\Api;
 
-use PayPal\Common\PayPalModel;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
@@ -20,11 +19,9 @@
      * @param null $apiContext
      * @param string|null  $clientMetadataId
+     * @param PayPalRestCall|null $restCall is the Rest Call Service that is used to make rest calls
      * @return $this
      */
-    public function create($apiContext = null, $clientMetadataId = null)
+    public function create($apiContext = null, $clientMetadataId = null, $restCall = null)
     {
-        if ($apiContext == null) {
-            $apiContext = new ApiContext(self::$credential);
-        }
         $headers = array();
         if ($clientMetadataId != null) {
@@ -34,16 +31,14 @@
         }
         $payLoad = $this->toJSON();
-        $call = new PayPalRestCall($apiContext);
-        $json = $call->execute(
-            array('PayPal\Handler\RestHandler'),
+        $json = self::executeCall(
             "/v1/payments/payment",
             "POST",
             $payLoad,
-            $headers
+            $headers,
+            $apiContext,
+            $restCall
         );
         $this->fromJson($json);
-
         return $this;
-
     }
 
@@ -62,15 +57,3 @@
     }
 
-    /**
-     * Updates Access Token using long lived refresh token
-     *
-     * @param string|null $refreshToken
-     * @param ApiContext $apiContext
-     * @return void
-     */
-    public function updateAccessToken($refreshToken, $apiContext)
-    {
-        $apiContext = $apiContext ? $apiContext : new ApiContext(self::$credential);
-        $apiContext->getCredential()->updateAccessToken($apiContext->getConfig(), $refreshToken);
-    }
 }
Index: /lib/PayPal/Api/Incentive.php
===================================================================
--- /lib/PayPal/Api/Incentive.php	(revision 7220)
+++ /lib/PayPal/Api/Incentive.php	(revision 7221)
@@ -189,5 +189,5 @@
     /**
      * Specifies type of incentive
-     * Valid Values: ["COUPON", "GIFT_CARD", "MERCHANT_SPECIFIC_BALANCE"]
+     * Valid Values: ["COUPON", "GIFT_CARD", "MERCHANT_SPECIFIC_BALANCE", "VOUCHER"]
      *
      * @param string $type
Index: /lib/PayPal/Api/InputFields.php
===================================================================
--- /lib/PayPal/Api/InputFields.php	(revision 7220)
+++ /lib/PayPal/Api/InputFields.php	(revision 7221)
@@ -19,6 +19,5 @@
 {
     /**
-     * Enables the buyer to enter a note to the merchant on the PayPal page during checkout.
-     * 
+     * Indicates whether the buyer can enter a note to the merchant on the PayPal page during checkout.
      *
      * @param bool $allow_note
@@ -33,5 +32,5 @@
 
     /**
-     * Enables the buyer to enter a note to the merchant on the PayPal page during checkout.
+     * Indicates whether the buyer can enter a note to the merchant on the PayPal page during checkout.
      *
      * @return bool
@@ -43,6 +42,5 @@
 
     /**
-     * Determines whether or not PayPal displays shipping address fields on the experience pages. Allowed values: `0`, `1`, or `2`. When set to `0`, PayPal displays the shipping address on the PayPal pages. When set to `1`, PayPal does not display shipping address fields whatsoever. When set to `2`, if you do not pass the shipping address, PayPal obtains it from the buyer's account profile. For digital goods, this field is required, and you must set it to `1`. 
-     * 
+     * Indicates whether PayPal displays shipping address fields on the experience pages. Valid value is `0`, `1`, or `2`. Set to `0` to display the shipping address on the PayPal pages. Set to `1` to redact shipping address fields from the PayPal pages. Set to `2` to not pass the shipping address but instead get it from the buyer's account profile. For digital goods, this field is required and value must be `1`.
      *
      * @param int $no_shipping
@@ -57,5 +55,5 @@
 
     /**
-     * Determines whether or not PayPal displays shipping address fields on the experience pages. Allowed values: `0`, `1`, or `2`. When set to `0`, PayPal displays the shipping address on the PayPal pages. When set to `1`, PayPal does not display shipping address fields whatsoever. When set to `2`, if you do not pass the shipping address, PayPal obtains it from the buyer's account profile. For digital goods, this field is required, and you must set it to `1`. 
+     * Indicates whether PayPal displays shipping address fields on the experience pages. Valid value is `0`, `1`, or `2`. Set to `0` to display the shipping address on the PayPal pages. Set to `1` to redact shipping address fields from the PayPal pages. Set to `2` to not pass the shipping address but instead get it from the buyer's account profile. For digital goods, this field is required and value must be `1`.
      *
      * @return int
@@ -67,6 +65,5 @@
 
     /**
-     * Determines whether or not the PayPal pages should display the shipping address and not the shipping address on file with PayPal for this buyer. Displaying the PayPal street address on file does not allow the buyer to edit that address. Allowed values: `0` or `1`. When set to `0`, the PayPal pages should not display the shipping address. When set to `1`, the PayPal pages should display the shipping address.
-     * 
+     * Indicates whether to display the shipping address that is passed to this call rather than the one on file with PayPal for this buyer on the PayPal experience pages. Valid value is `0` or `1`. Set to `0` to display the shipping address on file. Set to `1` to display the shipping address supplied to this call; the buyer cannot edit this shipping address.
      *
      * @param int $address_override
@@ -81,5 +78,5 @@
 
     /**
-     * Determines whether or not the PayPal pages should display the shipping address and not the shipping address on file with PayPal for this buyer. Displaying the PayPal street address on file does not allow the buyer to edit that address. Allowed values: `0` or `1`. When set to `0`, the PayPal pages should not display the shipping address. When set to `1`, the PayPal pages should display the shipping address.
+     * Indicates whether to display the shipping address that is passed to this call rather than the one on file with PayPal for this buyer on the PayPal experience pages. Valid value is `0` or `1`. Set to `0` to display the shipping address on file. Set to `1` to display the shipping address supplied to this call; the buyer cannot edit this shipping address.
      *
      * @return int
Index: /lib/PayPal/Api/InstallmentOption.php
===================================================================
--- /lib/PayPal/Api/InstallmentOption.php	(revision 7220)
+++ /lib/PayPal/Api/InstallmentOption.php	(revision 7221)
@@ -4,6 +4,4 @@
 
 use PayPal\Common\PayPalModel;
-use PayPal\Converter\FormatConverter;
-use PayPal\Validation\NumericValidator;
 
 /**
@@ -99,6 +97,4 @@
     public function setDiscountPercentage($discount_percentage)
     {
-        NumericValidator::validate($discount_percentage, "Discount Percentage");
-        $discount_percentage = FormatConverter::formatToPrice($discount_percentage);
         $this->discount_percentage = $discount_percentage;
         return $this;
@@ -115,4 +111,3 @@
     }
 
-
 }
Index: /lib/PayPal/Api/Invoice.php
===================================================================
--- /lib/PayPal/Api/Invoice.php	(revision 7220)
+++ /lib/PayPal/Api/Invoice.php	(revision 7221)
@@ -4,7 +4,7 @@
 
 use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 use PayPal\Validation\UrlValidator;
 
@@ -18,15 +18,20 @@
  * @property string id
  * @property string number
+ * @property string template_id
  * @property string uri
  * @property string status
  * @property \PayPal\Api\MerchantInfo merchant_info
  * @property \PayPal\Api\BillingInfo[] billing_info
+ * @property \PayPal\Api\Participant[] cc_info
  * @property \PayPal\Api\ShippingInfo shipping_info
  * @property \PayPal\Api\InvoiceItem[] items
  * @property string invoice_date
  * @property \PayPal\Api\PaymentTerm payment_term
+ * @property string reference
  * @property \PayPal\Api\Cost discount
  * @property \PayPal\Api\ShippingCost shipping_cost
  * @property \PayPal\Api\CustomAmount custom
+ * @property bool allow_partial_payment
+ * @property \PayPal\Api\Currency minimum_amount_due
  * @property bool tax_calculated_after_discount
  * @property bool tax_inclusive
@@ -39,10 +44,12 @@
  * @property \PayPal\Api\RefundDetail[] refunds
  * @property \PayPal\Api\Metadata metadata
- * @property string additional_data
+ * @property \PayPal\Api\PaymentSummary paid_amount
+ * @property \PayPal\Api\PaymentSummary refunded_amount
+ * @property \PayPal\Api\FileAttachment[] attachments
  */
 class Invoice extends PayPalResourceModel
 {
     /**
-     * Unique invoice resource identifier.
+     * The unique invoice resource identifier.
      *
      * @param string $id
@@ -57,5 +64,5 @@
 
     /**
-     * Unique invoice resource identifier.
+     * The unique invoice resource identifier.
      *
      * @return string
@@ -90,4 +97,27 @@
 
     /**
+     * The template ID used for the invoice. Useful for copy functionality.
+     *
+     * @param string $template_id
+     * 
+     * @return $this
+     */
+    public function setTemplateId($template_id)
+    {
+        $this->template_id = $template_id;
+        return $this;
+    }
+
+    /**
+     * The template ID used for the invoice. Useful for copy functionality.
+     *
+     * @return string
+     */
+    public function getTemplateId()
+    {
+        return $this->template_id;
+    }
+
+    /**
      * URI of the invoice resource.
      *
@@ -114,5 +144,5 @@
     /**
      * Status of the invoice.
-     * Valid Values: ["DRAFT", "SENT", "PAID", "MARKED_AS_PAID", "CANCELLED", "REFUNDED", "PARTIALLY_REFUNDED", "MARKED_AS_REFUNDED"]
+     * Valid Values: ["DRAFT", "SENT", "PAID", "MARKED_AS_PAID", "CANCELLED", "REFUNDED", "PARTIALLY_REFUNDED", "MARKED_AS_REFUNDED", "UNPAID", "PAYMENT_PENDING"]
      *
      * @param string $status
@@ -160,5 +190,5 @@
 
     /**
-     * Email address of invoice recipient (required) and optional billing information. (Note: We currently only allow one recipient).
+     * The required invoice recipient email address and any optional billing information. One recipient is supported.
      *
      * @param \PayPal\Api\BillingInfo[] $billing_info
@@ -173,5 +203,5 @@
 
     /**
-     * Email address of invoice recipient (required) and optional billing information. (Note: We currently only allow one recipient).
+     * The required invoice recipient email address and any optional billing information. One recipient is supported.
      *
      * @return \PayPal\Api\BillingInfo[]
@@ -213,5 +243,58 @@
 
     /**
-     * Shipping information for entities to whom items are being shipped.
+     * For invoices sent by email, one or more email addresses to which to send a Cc: copy of the notification. Supports only email addresses under participant.
+     *
+     * @param \PayPal\Api\Participant[] $cc_info
+     * 
+     * @return $this
+     */
+    public function setCcInfo($cc_info)
+    {
+        $this->cc_info = $cc_info;
+        return $this;
+    }
+
+    /**
+     * For invoices sent by email, one or more email addresses to which to send a Cc: copy of the notification. Supports only email addresses under participant.
+     *
+     * @return \PayPal\Api\Participant[]
+     */
+    public function getCcInfo()
+    {
+        return $this->cc_info;
+    }
+
+    /**
+     * Append CcInfo to the list.
+     *
+     * @param \PayPal\Api\Participant $participant
+     * @return $this
+     */
+    public function addCcInfo($participant)
+    {
+        if (!$this->getCcInfo()) {
+            return $this->setCcInfo(array($participant));
+        } else {
+            return $this->setCcInfo(
+                array_merge($this->getCcInfo(), array($participant))
+            );
+        }
+    }
+
+    /**
+     * Remove CcInfo from the list.
+     *
+     * @param \PayPal\Api\Participant $participant
+     * @return $this
+     */
+    public function removeCcInfo($participant)
+    {
+        return $this->setCcInfo(
+            array_diff($this->getCcInfo(), array($participant))
+        );
+    }
+
+    /**
+     * The shipping information for entities to whom items are being shipped.
      *
      * @param \PayPal\Api\ShippingInfo $shipping_info
@@ -226,5 +309,5 @@
 
     /**
-     * Shipping information for entities to whom items are being shipped.
+     * The shipping information for entities to whom items are being shipped.
      *
      * @return \PayPal\Api\ShippingInfo
@@ -236,5 +319,5 @@
 
     /**
-     * List of items included in the invoice. 100 items max per invoice.
+     * The list of items to include in the invoice. Maximum value is 100 items per invoice.
      *
      * @param \PayPal\Api\InvoiceItem[] $items
@@ -249,5 +332,5 @@
 
     /**
-     * List of items included in the invoice. 100 items max per invoice.
+     * The list of items to include in the invoice. Maximum value is 100 items per invoice.
      *
      * @return \PayPal\Api\InvoiceItem[]
@@ -289,5 +372,5 @@
 
     /**
-     * Date on which the invoice was enabled. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice was enabled. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $invoice_date
@@ -302,5 +385,5 @@
 
     /**
-     * Date on which the invoice was enabled. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice was enabled. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -312,5 +395,5 @@
 
     /**
-     * Optional field to pass payment deadline for the invoice. Either term_type or due_date can be passed, but not both.
+     * Optional. The payment deadline for the invoice. Value is either `term_type` or `due_date` but not both.
      *
      * @param \PayPal\Api\PaymentTerm $payment_term
@@ -325,5 +408,5 @@
 
     /**
-     * Optional field to pass payment deadline for the invoice. Either term_type or due_date can be passed, but not both.
+     * Optional. The payment deadline for the invoice. Value is either `term_type` or `due_date` but not both.
      *
      * @return \PayPal\Api\PaymentTerm
@@ -335,5 +418,28 @@
 
     /**
-     * Invoice level discount in percent or amount.
+     * Reference data, such as PO number, to add to the invoice. Maximum length is 60 characters.
+     *
+     * @param string $reference
+     * 
+     * @return $this
+     */
+    public function setReference($reference)
+    {
+        $this->reference = $reference;
+        return $this;
+    }
+
+    /**
+     * Reference data, such as PO number, to add to the invoice. Maximum length is 60 characters.
+     *
+     * @return string
+     */
+    public function getReference()
+    {
+        return $this->reference;
+    }
+
+    /**
+     * The invoice level discount, as a percent or an amount value.
      *
      * @param \PayPal\Api\Cost $discount
@@ -348,5 +454,5 @@
 
     /**
-     * Invoice level discount in percent or amount.
+     * The invoice level discount, as a percent or an amount value.
      *
      * @return \PayPal\Api\Cost
@@ -358,5 +464,5 @@
 
     /**
-     * Shipping cost in percent or amount.
+     * The shipping cost, as a percent or an amount value.
      *
      * @param \PayPal\Api\ShippingCost $shipping_cost
@@ -371,5 +477,5 @@
 
     /**
-     * Shipping cost in percent or amount.
+     * The shipping cost, as a percent or an amount value.
      *
      * @return \PayPal\Api\ShippingCost
@@ -381,5 +487,5 @@
 
     /**
-     * Custom amount applied on an invoice. If a label is included then the amount cannot be empty.
+     * The custom amount to apply on an invoice. If you include a label, the amount cannot be empty.
      *
      * @param \PayPal\Api\CustomAmount $custom
@@ -394,5 +500,5 @@
 
     /**
-     * Custom amount applied on an invoice. If a label is included then the amount cannot be empty.
+     * The custom amount to apply on an invoice. If you include a label, the amount cannot be empty.
      *
      * @return \PayPal\Api\CustomAmount
@@ -404,5 +510,51 @@
 
     /**
-     * Indicates whether tax is calculated before or after a discount. If false (the default), the tax is calculated before a discount. If true, the tax is calculated after a discount.
+     * Indicates whether the invoice allows a partial payment. If set to `false`, invoice must be paid in full. If set to `true`, the invoice allows partial payments. Default is `false`.
+     *
+     * @param bool $allow_partial_payment
+     * 
+     * @return $this
+     */
+    public function setAllowPartialPayment($allow_partial_payment)
+    {
+        $this->allow_partial_payment = $allow_partial_payment;
+        return $this;
+    }
+
+    /**
+     * Indicates whether the invoice allows a partial payment. If set to `false`, invoice must be paid in full. If set to `true`, the invoice allows partial payments. Default is `false`.
+     *
+     * @return bool
+     */
+    public function getAllowPartialPayment()
+    {
+        return $this->allow_partial_payment;
+    }
+
+    /**
+     * If `allow_partial_payment` is set to `true`, the minimum amount allowed for a partial payment.
+     *
+     * @param \PayPal\Api\Currency $minimum_amount_due
+     * 
+     * @return $this
+     */
+    public function setMinimumAmountDue($minimum_amount_due)
+    {
+        $this->minimum_amount_due = $minimum_amount_due;
+        return $this;
+    }
+
+    /**
+     * If `allow_partial_payment` is set to `true`, the minimum amount allowed for a partial payment.
+     *
+     * @return \PayPal\Api\Currency
+     */
+    public function getMinimumAmountDue()
+    {
+        return $this->minimum_amount_due;
+    }
+
+    /**
+     * Indicates whether tax is calculated before or after a discount. If set to `false`, the tax is calculated before a discount. If set to `true`, the tax is calculated after a discount. Default is `false`.
      *
      * @param bool $tax_calculated_after_discount
@@ -417,5 +569,5 @@
 
     /**
-     * Indicates whether tax is calculated before or after a discount. If false (the default), the tax is calculated before a discount. If true, the tax is calculated after a discount.
+     * Indicates whether tax is calculated before or after a discount. If set to `false`, the tax is calculated before a discount. If set to `true`, the tax is calculated after a discount. Default is `false`.
      *
      * @return bool
@@ -427,5 +579,5 @@
 
     /**
-     * A flag indicating whether the unit price includes tax. Default is false
+     * Indicates whether the unit price includes tax. Default is `false`.
      *
      * @param bool $tax_inclusive
@@ -440,5 +592,5 @@
 
     /**
-     * A flag indicating whether the unit price includes tax. Default is false
+     * Indicates whether the unit price includes tax. Default is `false`.
      *
      * @return bool
@@ -496,5 +648,5 @@
 
     /**
-     * Bookkeeping memo that is private to the merchant. 150 characters max.
+     * A private bookkeeping memo for the merchant. Maximum length is 150 characters.
      *
      * @param string $merchant_memo
@@ -509,5 +661,5 @@
 
     /**
-     * Bookkeeping memo that is private to the merchant. 150 characters max.
+     * A private bookkeeping memo for the merchant. Maximum length is 150 characters.
      *
      * @return string
@@ -519,5 +671,5 @@
 
     /**
-     * Full URL of an external image to use as the logo. 4000 characters max.
+     * Full URL of an external image to use as the logo. Maximum length is 4000 characters.
      *
      * @param string $logo_url
@@ -533,5 +685,5 @@
 
     /**
-     * Full URL of an external image to use as the logo. 4000 characters max.
+     * Full URL of an external image to use as the logo. Maximum length is 4000 characters.
      *
      * @return string
@@ -589,10 +741,10 @@
 
     /**
-     * Append PaymentDetails to the list.
+     * Append Payments to the list.
      *
      * @param \PayPal\Api\PaymentDetail $paymentDetail
      * @return $this
      */
-    public function addPaymentDetail($paymentDetail)
+    public function addPayment($paymentDetail)
     {
         if (!$this->getPayments()) {
@@ -606,10 +758,10 @@
 
     /**
-     * Remove PaymentDetails from the list.
+     * Remove Payments from the list.
      *
      * @param \PayPal\Api\PaymentDetail $paymentDetail
      * @return $this
      */
-    public function removePaymentDetail($paymentDetail)
+    public function removePayment($paymentDetail)
     {
         return $this->setPayments(
@@ -642,10 +794,10 @@
 
     /**
-     * Append RefundDetails to the list.
+     * Append Refunds to the list.
      *
      * @param \PayPal\Api\RefundDetail $refundDetail
      * @return $this
      */
-    public function addRefundDetail($refundDetail)
+    public function addRefund($refundDetail)
     {
         if (!$this->getRefunds()) {
@@ -659,10 +811,10 @@
 
     /**
-     * Remove RefundDetails from the list.
+     * Remove Refunds from the list.
      *
      * @param \PayPal\Api\RefundDetail $refundDetail
      * @return $this
      */
-    public function removeRefundDetail($refundDetail)
+    public function removeRefund($refundDetail)
     {
         return $this->setRefunds(
@@ -695,6 +847,6 @@
 
     /**
-     * Any miscellaneous invoice data. 4000 characters max.
-     *
+     * Any miscellaneous invoice data. Maximum length is 4000 characters.
+     * @deprecated Not publicly available
      * @param string $additional_data
      * 
@@ -708,6 +860,6 @@
 
     /**
-     * Any miscellaneous invoice data. 4000 characters max.
-     *
+     * Any miscellaneous invoice data. Maximum length is 4000 characters.
+     * @deprecated Not publicly available
      * @return string
      */
@@ -718,5 +870,104 @@
 
     /**
-     * Create a new invoice by passing the details for the invoice, including the merchant_info, to the request URI.
+     * Payment summary of the invoice including amount paid through PayPal and other sources.
+     *
+     * @param \PayPal\Api\PaymentSummary $paid_amount
+     * 
+     * @return $this
+     */
+    public function setPaidAmount($paid_amount)
+    {
+        $this->paid_amount = $paid_amount;
+        return $this;
+    }
+
+    /**
+     * Payment summary of the invoice including amount paid through PayPal and other sources.
+     *
+     * @return \PayPal\Api\PaymentSummary
+     */
+    public function getPaidAmount()
+    {
+        return $this->paid_amount;
+    }
+
+    /**
+     * Payment summary of the invoice including amount refunded through PayPal and other sources.
+     *
+     * @param \PayPal\Api\PaymentSummary $refunded_amount
+     * 
+     * @return $this
+     */
+    public function setRefundedAmount($refunded_amount)
+    {
+        $this->refunded_amount = $refunded_amount;
+        return $this;
+    }
+
+    /**
+     * Payment summary of the invoice including amount refunded through PayPal and other sources.
+     *
+     * @return \PayPal\Api\PaymentSummary
+     */
+    public function getRefundedAmount()
+    {
+        return $this->refunded_amount;
+    }
+
+    /**
+     * List of files attached to the invoice.
+     *
+     * @param \PayPal\Api\FileAttachment[] $attachments
+     * 
+     * @return $this
+     */
+    public function setAttachments($attachments)
+    {
+        $this->attachments = $attachments;
+        return $this;
+    }
+
+    /**
+     * List of files attached to the invoice.
+     *
+     * @return \PayPal\Api\FileAttachment[]
+     */
+    public function getAttachments()
+    {
+        return $this->attachments;
+    }
+
+    /**
+     * Append Attachments to the list.
+     *
+     * @param \PayPal\Api\FileAttachment $fileAttachment
+     * @return $this
+     */
+    public function addAttachment($fileAttachment)
+    {
+        if (!$this->getAttachments()) {
+            return $this->setAttachments(array($fileAttachment));
+        } else {
+            return $this->setAttachments(
+                array_merge($this->getAttachments(), array($fileAttachment))
+            );
+        }
+    }
+
+    /**
+     * Remove Attachments from the list.
+     *
+     * @param \PayPal\Api\FileAttachment $fileAttachment
+     * @return $this
+     */
+    public function removeAttachment($fileAttachment)
+    {
+        return $this->setAttachments(
+            array_diff($this->getAttachments(), array($fileAttachment))
+        );
+    }
+
+    /**
+     * Creates an invoice. Include invoice details including merchant information in the request.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -740,5 +991,5 @@
 
     /**
-     * Search for a specific invoice or invoices by passing a search object that specifies your search criteria to the request URI.
+     * Searches for an invoice or invoices. Include a search object that specifies your search criteria in the request.
      *
      * @param Search $search
@@ -765,5 +1016,5 @@
 
     /**
-     * Send a specific invoice to its intended recipient by passing the invoice ID to the request URI. Optionally, you can specify whether to send the merchant an invoice update notification by using the notify_merchant query parameter. By default, notify_merchant is true.
+     * Sends an invoice, by ID, to a recipient. Optionally, set the `notify_merchant` query parameter to send the merchant an invoice update notification. By default, `notify_merchant` is `true`.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -787,5 +1038,5 @@
 
     /**
-     * Send a reminder about a specific invoice to its intended recipient by providing the ID of the invoice in the request URI. In addition, pass a notification object that specifies the subject of the reminder and other details in the request JSON.
+     * Sends a reminder about a specific invoice, by ID, to a recipient. Include a notification object that defines the reminder subject and other details in the JSON request body.
      *
      * @param Notification $notification
@@ -811,5 +1062,5 @@
 
     /**
-     * Cancel an invoice by passing the invoice ID to the request URI.
+     * Cancels an invoice, by ID.
      *
      * @param CancelNotification $cancelNotification
@@ -835,5 +1086,5 @@
 
     /**
-     * Mark the status of an invoice as paid by passing the invoice ID to the request URI. In addition, pass a payment detail object that specifies the payment method and other details in the request JSON.
+     * Marks the status of a specified invoice, by ID, as paid. Include a payment detail object that defines the payment method and other details in the JSON request body.
      *
      * @param PaymentDetail $paymentDetail
@@ -859,5 +1110,5 @@
 
     /**
-     * Mark the status of an invoice as refunded by passing the invoice ID to the request URI. In addition, pass a refund-detail object that specifies the type of refund and other details in the request JSON.
+     * Marks the status of a specified invoice, by ID, as refunded. Include a refund detail object that defines the refund type and other details in the JSON request body.
      *
      * @param RefundDetail $refundDetail
@@ -883,5 +1134,5 @@
 
     /**
-     * Retrieve the details for a particular invoice by passing the invoice ID to the request URI.
+     * Gets the details for a specified invoice, by ID.
      *
      * @param string $invoiceId
@@ -908,5 +1159,5 @@
 
     /**
-     * List some or all invoices for a merchant according to optional query string parameters specified.
+     * Lists some or all merchant invoices. Filters the response by any specified optional query string parameters.
      *
      * @param array $params
@@ -940,5 +1191,5 @@
 
     /**
-     * Fully update an invoice by passing the invoice ID to the request URI. In addition, pass a complete invoice object in the request JSON. Partial updates are not supported.
+     * Fully updates an invoice by passing the invoice ID to the request URI. In addition, pass a complete invoice object in the request JSON. Partial updates are not supported.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -985,4 +1236,50 @@
 
     /**
+     * Delete external payment.
+     *
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return bool
+     */
+    public function deleteExternalPayment($transactionId, $apiContext = null, $restCall = null)
+    {
+        ArgumentValidator::validate($this->getId(), "Id");
+        ArgumentValidator::validate($transactionId, "TransactionId");
+        $payLoad = "";
+        self::executeCall(
+            "/v1/invoicing/invoices/{$this->getId()}/payment-records/{$transactionId}",
+            "DELETE",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        return true;
+    }
+
+    /**
+     * Delete external refund.
+     *
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return bool
+     */
+    public function deleteExternalRefund($transactionId, $apiContext = null, $restCall = null)
+    {
+        ArgumentValidator::validate($this->getId(), "Id");
+        ArgumentValidator::validate($transactionId, "TransactionId");
+        $payLoad = "";
+        self::executeCall(
+            "/v1/invoicing/invoices/{$this->getId()}/refund-records/{$transactionId}",
+            "DELETE",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        return true;
+    }
+
+    /**
      * Generate a QR code for an invoice by passing the invoice ID to the request URI. The request generates a QR code that is 500 pixels in width and height. You can change the dimensions of the returned code by specifying optional query parameters.
      *
@@ -1018,3 +1315,26 @@
     }
 
+    /**
+     * Generates the successive invoice number.
+     *
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return InvoiceNumber
+     */
+    public static function generateNumber($apiContext = null, $restCall = null)
+    {
+        $payLoad = "";
+        $json = self::executeCall(
+            "/v1/invoicing/invoices/next-invoice-number",
+            "POST",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        $ret = new InvoiceNumber();
+        $ret->fromJson($json);
+        return $ret;
+    }
+
 }
Index: /lib/PayPal/Api/InvoiceAddress.php
===================================================================
--- /lib/PayPal/Api/InvoiceAddress.php	(revision 7220)
+++ /lib/PayPal/Api/InvoiceAddress.php	(revision 7221)
@@ -2,6 +2,4 @@
 
 namespace PayPal\Api;
-
-use PayPal\Common\PayPalModel;
 
 /**
@@ -14,5 +12,5 @@
  * @property \PayPal\Api\Phone phone
  */
-class InvoiceAddress extends BaseAddress 
+class InvoiceAddress extends BaseAddress
 {
     /**
Index: /lib/PayPal/Api/InvoiceItem.php
===================================================================
--- /lib/PayPal/Api/InvoiceItem.php	(revision 7220)
+++ /lib/PayPal/Api/InvoiceItem.php	(revision 7221)
@@ -6,4 +6,5 @@
 use PayPal\Converter\FormatConverter;
 use PayPal\Validation\NumericValidator;
+use PayPal\Validation\UrlValidator;
 
 /**
@@ -21,9 +22,10 @@
  * @property string date
  * @property \PayPal\Api\Cost discount
+ * @property string unit_of_measure
  */
 class InvoiceItem extends PayPalModel
 {
     /**
-     * Name of the item. 60 characters max.
+     * Name of the item. 200 characters max.
      *
      * @param string $name
@@ -38,5 +40,5 @@
 
     /**
-     * Name of the item. 60 characters max.
+     * Name of the item. 200 characters max.
      *
      * @return string
@@ -71,5 +73,5 @@
 
     /**
-     * Quantity of the item. Range of 0 to 9999.999.
+     * Quantity of the item. Range of -10000 to 10000.
      *
      * @param string|double $quantity
@@ -79,5 +81,5 @@
     public function setQuantity($quantity)
     {
-        NumericValidator::validate($quantity, "Percent");
+        NumericValidator::validate($quantity, "Quantity");
         $quantity = FormatConverter::formatToPrice($quantity);
         $this->quantity = $quantity;
@@ -86,5 +88,5 @@
 
     /**
-     * Quantity of the item. Range of 0 to 9999.999.
+     * Quantity of the item. Range of -10000 to 10000.
      *
      * @return string
@@ -96,5 +98,5 @@
 
     /**
-     * Unit price of the item. Range of -999999.99 to 999999.99.
+     * Unit price of the item. Range of -1,000,000 to 1,000,000.
      *
      * @param \PayPal\Api\Currency $unit_price
@@ -109,5 +111,5 @@
 
     /**
-     * Unit price of the item. Range of -999999.99 to 999999.99.
+     * Unit price of the item. Range of -1,000,000 to 1,000,000.
      *
      * @return \PayPal\Api\Currency
@@ -142,5 +144,5 @@
 
     /**
-     * Date on which the item or service was provided. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the item or service was provided. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $date
@@ -155,5 +157,5 @@
 
     /**
-     * Date on which the item or service was provided. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the item or service was provided. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -165,5 +167,5 @@
 
     /**
-     * Item discount in percent or amount.
+     * The item discount, as a percent or an amount value.
      *
      * @param \PayPal\Api\Cost $discount
@@ -178,5 +180,5 @@
 
     /**
-     * Item discount in percent or amount.
+     * The item discount, as a percent or an amount value.
      *
      * @return \PayPal\Api\Cost
@@ -187,3 +189,51 @@
     }
 
+    /**
+     * The image URL. Maximum length is 4000 characters.
+     * @deprecated Not publicly available
+     * @param string $image_url
+     * @throws \InvalidArgumentException
+     * @return $this
+     */
+    public function setImageUrl($image_url)
+    {
+        UrlValidator::validate($image_url, "ImageUrl");
+        $this->image_url = $image_url;
+        return $this;
+    }
+
+    /**
+     * The image URL. Maximum length is 4000 characters.
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getImageUrl()
+    {
+        return $this->image_url;
+    }
+
+    /**
+     * The unit of measure of the item being invoiced.
+     * Valid Values: ["QUANTITY", "HOURS", "AMOUNT"]
+     *
+     * @param string $unit_of_measure
+     * 
+     * @return $this
+     */
+    public function setUnitOfMeasure($unit_of_measure)
+    {
+        $this->unit_of_measure = $unit_of_measure;
+        return $this;
+    }
+
+    /**
+     * The unit of measure of the item being invoiced.
+     *
+     * @return string
+     */
+    public function getUnitOfMeasure()
+    {
+        return $this->unit_of_measure;
+    }
+
 }
Index: /lib/PayPal/Api/Item.php
===================================================================
--- /lib/PayPal/Api/Item.php	(revision 7220)
+++ /lib/PayPal/Api/Item.php	(revision 7221)
@@ -11,28 +11,90 @@
  * Class Item
  *
- * An item being paid for.
+ * Item details.
  *
  * @package PayPal\Api
  *
- * @property string quantity
+ * @property string sku
  * @property string name
  * @property string description
+ * @property string quantity
  * @property string price
+ * @property string currency
  * @property string tax
- * @property string currency
- * @property string sku
  * @property string url
- * @property string category
- * @property \PayPal\Api\Measurement weight
- * @property \PayPal\Api\Measurement length
- * @property \PayPal\Api\Measurement height
- * @property \PayPal\Api\Measurement width
- * @property \PayPal\Api\NameValuePair[] supplementary_data
- * @property \PayPal\Api\NameValuePair[] postback_data
  */
 class Item extends PayPalModel
 {
     /**
-     * Number of items.
+     * Stock keeping unit corresponding (SKU) to item.
+     *
+     * @param string $sku
+     * 
+     * @return $this
+     */
+    public function setSku($sku)
+    {
+        $this->sku = $sku;
+        return $this;
+    }
+
+    /**
+     * Stock keeping unit corresponding (SKU) to item.
+     *
+     * @return string
+     */
+    public function getSku()
+    {
+        return $this->sku;
+    }
+
+    /**
+     * Item name. 127 characters max.
+     *
+     * @param string $name
+     * 
+     * @return $this
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Item name. 127 characters max.
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Description of the item. Only supported when the `payment_method` is set to `paypal`.
+     *
+     * @param string $description
+     * 
+     * @return $this
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Description of the item. Only supported when the `payment_method` is set to `paypal`.
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Number of a particular item. 10 characters max.
      *
      * @param string $quantity
@@ -47,5 +109,5 @@
 
     /**
-     * Number of items.
+     * Number of a particular item. 10 characters max.
      *
      * @return string
@@ -57,51 +119,5 @@
 
     /**
-     * Name of the item.
-     *
-     * @param string $name
-     * 
-     * @return $this
-     */
-    public function setName($name)
-    {
-        $this->name = $name;
-        return $this;
-    }
-
-    /**
-     * Name of the item.
-     *
-     * @return string
-     */
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     * Description of the item.
-     *
-     * @param string $description
-     * 
-     * @return $this
-     */
-    public function setDescription($description)
-    {
-        $this->description = $description;
-        return $this;
-    }
-
-    /**
-     * Description of the item.
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        return $this->description;
-    }
-
-    /**
-     * Cost of the item.
+     * Item cost. 10 characters max.
      *
      * @param string|double $price
@@ -118,5 +134,5 @@
 
     /**
-     * Cost of the item.
+     * Item cost. 10 characters max.
      *
      * @return string
@@ -128,5 +144,28 @@
 
     /**
-     * tax of the item.
+     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/).
+     *
+     * @param string $currency
+     * 
+     * @return $this
+     */
+    public function setCurrency($currency)
+    {
+        $this->currency = $currency;
+        return $this;
+    }
+
+    /**
+     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/).
+     *
+     * @return string
+     */
+    public function getCurrency()
+    {
+        return $this->currency;
+    }
+
+    /**
+     * Tax of the item. Only supported when the `payment_method` is set to `paypal`.
      *
      * @param string|double $tax
@@ -143,5 +182,5 @@
 
     /**
-     * tax of the item.
+     * Tax of the item. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -150,50 +189,4 @@
     {
         return $this->tax;
-    }
-
-    /**
-     * 3-letter Currency Code
-     *
-     * @param string $currency
-     * 
-     * @return $this
-     */
-    public function setCurrency($currency)
-    {
-        $this->currency = $currency;
-        return $this;
-    }
-
-    /**
-     * 3-letter Currency Code
-     *
-     * @return string
-     */
-    public function getCurrency()
-    {
-        return $this->currency;
-    }
-
-    /**
-     * Number or code to identify the item in your catalog/records.
-     *
-     * @param string $sku
-     * 
-     * @return $this
-     */
-    public function setSku($sku)
-    {
-        $this->sku = $sku;
-        return $this;
-    }
-
-    /**
-     * Number or code to identify the item in your catalog/records.
-     *
-     * @return string
-     */
-    public function getSku()
-    {
-        return $this->sku;
     }
 
@@ -225,5 +218,5 @@
      * Category type of the item.
      * Valid Values: ["DIGITAL", "PHYSICAL"]
-     *
+     * @deprecated Not publicly available
      * @param string $category
      * 
@@ -238,5 +231,5 @@
     /**
      * Category type of the item.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -248,5 +241,5 @@
     /**
      * Weight of the item.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Measurement $weight
      * 
@@ -261,5 +254,5 @@
     /**
      * Weight of the item.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Measurement
      */
@@ -271,5 +264,5 @@
     /**
      * Length of the item.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Measurement $length
      * 
@@ -284,5 +277,5 @@
     /**
      * Length of the item.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Measurement
      */
@@ -294,5 +287,5 @@
     /**
      * Height of the item.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Measurement $height
      * 
@@ -307,5 +300,5 @@
     /**
      * Height of the item.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Measurement
      */
@@ -317,5 +310,5 @@
     /**
      * Width of the item.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Measurement $width
      * 
@@ -330,5 +323,5 @@
     /**
      * Width of the item.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Measurement
      */
@@ -340,5 +333,5 @@
     /**
      * Set of optional data used for PayPal risk determination.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair[] $supplementary_data
      * 
@@ -353,5 +346,5 @@
     /**
      * Set of optional data used for PayPal risk determination.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\NameValuePair[]
      */
@@ -363,5 +356,5 @@
     /**
      * Append SupplementaryData to the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair $nameValuePair
      * @return $this
@@ -380,5 +373,5 @@
     /**
      * Remove SupplementaryData from the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair $nameValuePair
      * @return $this
@@ -393,5 +386,5 @@
     /**
      * Set of optional data used for PayPal post-transaction notifications.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair[] $postback_data
      * 
@@ -406,5 +399,5 @@
     /**
      * Set of optional data used for PayPal post-transaction notifications.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\NameValuePair[]
      */
@@ -416,5 +409,5 @@
     /**
      * Append PostbackData to the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair $nameValuePair
      * @return $this
@@ -433,5 +426,5 @@
     /**
      * Remove PostbackData from the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\NameValuePair $nameValuePair
      * @return $this
Index: /lib/PayPal/Api/ItemList.php
===================================================================
--- /lib/PayPal/Api/ItemList.php	(revision 7220)
+++ /lib/PayPal/Api/ItemList.php	(revision 7221)
@@ -15,15 +15,8 @@
  * @property \PayPal\Api\ShippingAddress shipping_address
  * @property string shipping_method
+ * @property string shipping_phone_number
  */
 class ItemList extends PayPalModel
 {
-    /**
-     * Is this list empty?
-     */
-    public function isEmpty()
-    {
-        return empty($this->items);
-    }
-
     /**
      * List of items.
@@ -35,5 +28,5 @@
     public function setItems($items)
     {
-        $this->items = $items;
+        $this->items = array_values($items);
         return $this;
     }
@@ -125,3 +118,26 @@
     }
 
+    /**
+     * Allows merchant's to share payerâs contact number with PayPal for the current payment. Final contact number of payer associated with the transaction might be same as shipping_phone_number or different based on Payerâs action on PayPal. The phone number must be represented in its canonical international format, as defined by the E.164 numbering plan
+     *
+     * @param string $shipping_phone_number
+     * 
+     * @return $this
+     */
+    public function setShippingPhoneNumber($shipping_phone_number)
+    {
+        $this->shipping_phone_number = $shipping_phone_number;
+        return $this;
+    }
+
+    /**
+     * Allows merchant's to share payerâs contact number with PayPal for the current payment. Final contact number of payer associated with the transaction might be same as shipping_phone_number or different based on Payerâs action on PayPal. The phone number must be represented in its canonical international format, as defined by the E.164 numbering plan
+     *
+     * @return string
+     */
+    public function getShippingPhoneNumber()
+    {
+        return $this->shipping_phone_number;
+    }
+
 }
Index: /lib/PayPal/Api/MerchantInfo.php
===================================================================
--- /lib/PayPal/Api/MerchantInfo.php	(revision 7220)
+++ /lib/PayPal/Api/MerchantInfo.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class MerchantInfo
  *
- * Business information of the merchant that will appear on the invoice.
+ * Merchant business information that appears on the invoice.
  *
  * @package PayPal\Api
@@ -21,4 +21,5 @@
  * @property string website
  * @property string tax_id
+ * @property string additional_info_label
  * @property string additional_info
  */
@@ -26,5 +27,5 @@
 {
     /**
-     * Email address of the merchant. 260 characters max.
+     * The merchant email address. Maximum length is 260 characters.
      *
      * @param string $email
@@ -39,5 +40,5 @@
 
     /**
-     * Email address of the merchant. 260 characters max.
+     * The merchant email address. Maximum length is 260 characters.
      *
      * @return string
@@ -49,5 +50,5 @@
 
     /**
-     * First name of the merchant. 30 characters max.
+     * The merchant first name. Maximum length is 30 characters.
      *
      * @param string $first_name
@@ -62,5 +63,5 @@
 
     /**
-     * First name of the merchant. 30 characters max.
+     * The merchant first name. Maximum length is 30 characters.
      *
      * @return string
@@ -72,5 +73,5 @@
 
     /**
-     * Last name of the merchant. 30 characters max.
+     * The merchant last name. Maximum length is 30 characters.
      *
      * @param string $last_name
@@ -85,5 +86,5 @@
 
     /**
-     * Last name of the merchant. 30 characters max.
+     * The merchant last name. Maximum length is 30 characters.
      *
      * @return string
@@ -95,5 +96,5 @@
 
     /**
-     * Address of the merchant.
+     * The merchant address.
      *
      * @param \PayPal\Api\InvoiceAddress $address
@@ -108,5 +109,5 @@
 
     /**
-     * Address of the merchant.
+     * The merchant address.
      *
      * @return \PayPal\Api\InvoiceAddress
@@ -118,5 +119,5 @@
 
     /**
-     * Company business name of the merchant. 100 characters max.
+     * The merchant company business name. Maximum length is 100 characters.
      *
      * @param string $business_name
@@ -131,5 +132,5 @@
 
     /**
-     * Company business name of the merchant. 100 characters max.
+     * The merchant company business name. Maximum length is 100 characters.
      *
      * @return string
@@ -141,5 +142,5 @@
 
     /**
-     * Phone number of the merchant.
+     * The merchant phone number.
      *
      * @param \PayPal\Api\Phone $phone
@@ -154,5 +155,5 @@
 
     /**
-     * Phone number of the merchant.
+     * The merchant phone number.
      *
      * @return \PayPal\Api\Phone
@@ -164,5 +165,5 @@
 
     /**
-     * Fax number of the merchant.
+     * The merchant fax number.
      *
      * @param \PayPal\Api\Phone $fax
@@ -177,5 +178,5 @@
 
     /**
-     * Fax number of the merchant.
+     * The merchant fax number.
      *
      * @return \PayPal\Api\Phone
@@ -187,5 +188,5 @@
 
     /**
-     * Website of the merchant. 2048 characters max.
+     * The merchant website. Maximum length is 2048 characters.
      *
      * @param string $website
@@ -200,5 +201,5 @@
 
     /**
-     * Website of the merchant. 2048 characters max.
+     * The merchant website. Maximum length is 2048 characters.
      *
      * @return string
@@ -210,5 +211,5 @@
 
     /**
-     * Tax ID of the merchant. 100 characters max.
+     * The merchant tax ID. Maximum length is 100 characters.
      *
      * @param string $tax_id
@@ -223,5 +224,5 @@
 
     /**
-     * Tax ID of the merchant. 100 characters max.
+     * The merchant tax ID. Maximum length is 100 characters.
      *
      * @return string
@@ -233,5 +234,28 @@
 
     /**
-     * Option to display additional information such as business hours. 40 characters max.
+     * Option to provide a label to the additional_info field. 40 characters max.
+     *
+     * @param string $additional_info_label
+     * 
+     * @return $this
+     */
+    public function setAdditionalInfoLabel($additional_info_label)
+    {
+        $this->additional_info_label = $additional_info_label;
+        return $this;
+    }
+
+    /**
+     * Option to provide a label to the additional_info field. 40 characters max.
+     *
+     * @return string
+     */
+    public function getAdditionalInfoLabel()
+    {
+        return $this->additional_info_label;
+    }
+
+    /**
+     * Additional information, such as business hours. Maximum length is 40 characters.
      *
      * @param string $additional_info
@@ -246,5 +270,5 @@
 
     /**
-     * Option to display additional information such as business hours. 40 characters max.
+     * Additional information, such as business hours. Maximum length is 40 characters.
      *
      * @return string
Index: /lib/PayPal/Api/Metadata.php
===================================================================
--- /lib/PayPal/Api/Metadata.php	(revision 7220)
+++ /lib/PayPal/Api/Metadata.php	(revision 7221)
@@ -9,5 +9,5 @@
  * Class Metadata
  *
- * Audit information of the resource.
+ * Audit information for the resource.
  *
  * @package PayPal\Api
@@ -27,5 +27,5 @@
 {
     /**
-     * Date when the resource was created.
+     * The date and time when the resource was created.
      *
      * @param string $created_date
@@ -40,5 +40,5 @@
 
     /**
-     * Date when the resource was created.
+     * The date and time when the resource was created.
      *
      * @return string
@@ -50,5 +50,5 @@
 
     /**
-     * Email address of the account that created the resource.
+     * The email address of the account that created the resource.
      *
      * @param string $created_by
@@ -63,5 +63,5 @@
 
     /**
-     * Email address of the account that created the resource.
+     * The email address of the account that created the resource.
      *
      * @return string
@@ -73,5 +73,5 @@
 
     /**
-     * Date when the resource was cancelled.
+     * The date and time when the resource was cancelled.
      *
      * @param string $cancelled_date
@@ -86,5 +86,5 @@
 
     /**
-     * Date when the resource was cancelled.
+     * The date and time when the resource was cancelled.
      *
      * @return string
@@ -96,5 +96,5 @@
 
     /**
-     * Actor who cancelled the resource.
+     * The actor who cancelled the resource.
      *
      * @param string $cancelled_by
@@ -109,5 +109,5 @@
 
     /**
-     * Actor who cancelled the resource.
+     * The actor who cancelled the resource.
      *
      * @return string
@@ -119,5 +119,5 @@
 
     /**
-     * Date when the resource was last edited.
+     * The date and time when the resource was last edited.
      *
      * @param string $last_updated_date
@@ -132,5 +132,5 @@
 
     /**
-     * Date when the resource was last edited.
+     * The date and time when the resource was last edited.
      *
      * @return string
@@ -142,5 +142,5 @@
 
     /**
-     * Email address of the account that last edited the resource.
+     * The email address of the account that last edited the resource.
      *
      * @param string $last_updated_by
@@ -155,5 +155,5 @@
 
     /**
-     * Email address of the account that last edited the resource.
+     * The email address of the account that last edited the resource.
      *
      * @return string
@@ -165,5 +165,5 @@
 
     /**
-     * Date when the resource was first sent.
+     * The date and time when the resource was first sent.
      *
      * @param string $first_sent_date
@@ -178,5 +178,5 @@
 
     /**
-     * Date when the resource was first sent.
+     * The date and time when the resource was first sent.
      *
      * @return string
@@ -188,5 +188,5 @@
 
     /**
-     * Date when the resource was last sent.
+     * The date and time when the resource was last sent.
      *
      * @param string $last_sent_date
@@ -201,5 +201,5 @@
 
     /**
-     * Date when the resource was last sent.
+     * The date and time when the resource was last sent.
      *
      * @return string
@@ -211,5 +211,5 @@
 
     /**
-     * Email address of the account that last sent the resource.
+     * The email address of the account that last sent the resource.
      *
      * @param string $last_sent_by
@@ -224,5 +224,5 @@
 
     /**
-     * Email address of the account that last sent the resource.
+     * The email address of the account that last sent the resource.
      *
      * @return string
Index: /lib/PayPal/Api/Notification.php
===================================================================
--- /lib/PayPal/Api/Notification.php	(revision 7220)
+++ /lib/PayPal/Api/Notification.php	(revision 7221)
@@ -15,4 +15,5 @@
  * @property string note
  * @property bool send_to_merchant
+ * @property string[] cc_emails
  */
 class Notification extends PayPalModel
@@ -65,5 +66,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the merchant.
+     * Indicates whether to send a copy of the email to the merchant.
      *
      * @param bool $send_to_merchant
@@ -78,5 +79,5 @@
 
     /**
-     * A flag indicating whether a copy of the email has to be sent to the merchant.
+     * Indicates whether to send a copy of the email to the merchant.
      *
      * @return bool
@@ -87,3 +88,56 @@
     }
 
+    /**
+     * Applicable for invoices created with Cc emails. If this field is not in the body, all the cc email addresses added as part of the invoice shall be notified else this field can be used to limit the list of email addresses. Note: additional email addresses are not supported.
+     *
+     * @param string[] $cc_emails
+     * 
+     * @return $this
+     */
+    public function setCcEmails($cc_emails)
+    {
+        $this->cc_emails = $cc_emails;
+        return $this;
+    }
+
+    /**
+     * Applicable for invoices created with Cc emails. If this field is not in the body, all the cc email addresses added as part of the invoice shall be notified else this field can be used to limit the list of email addresses. Note: additional email addresses are not supported.
+     *
+     * @return string[]
+     */
+    public function getCcEmails()
+    {
+        return $this->cc_emails;
+    }
+
+    /**
+     * Append CcEmails to the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function addCcEmail($string)
+    {
+        if (!$this->getCcEmails()) {
+            return $this->setCcEmails(array($string));
+        } else {
+            return $this->setCcEmails(
+                array_merge($this->getCcEmails(), array($string))
+            );
+        }
+    }
+
+    /**
+     * Remove CcEmails from the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function removeCcEmail($string)
+    {
+        return $this->setCcEmails(
+            array_diff($this->getCcEmails(), array($string))
+        );
+    }
+
 }
Index: /lib/PayPal/Api/OpenIdAddress.php
===================================================================
--- /lib/PayPal/Api/OpenIdAddress.php	(revision 7220)
+++ /lib/PayPal/Api/OpenIdAddress.php	(revision 7221)
@@ -6,9 +6,18 @@
 
 /**
+ * Class OpenIdAddress
+ *
  * End-User's preferred address.
+ *
+ * @package PayPal\Api
+ *
+ * @property string street_address
+ * @property string locality
+ * @property string region
+ * @property string postal_code
+ * @property string country
  */
 class OpenIdAddress extends PayPalModel
 {
-
     /**
      * Full street address component, which may include house number, street name.
Index: /lib/PayPal/Api/OpenIdError.php
===================================================================
--- /lib/PayPal/Api/OpenIdError.php	(revision 7220)
+++ /lib/PayPal/Api/OpenIdError.php	(revision 7221)
@@ -5,5 +5,11 @@
 
 /**
+ * Class OpenIdError
+ *
  * Error resource
+ *
+ * @property string error
+ * @property string error_description
+ * @property string error_uri
  */
 class OpenIdError extends PayPalModel
Index: /lib/PayPal/Api/OpenIdSession.php
===================================================================
--- /lib/PayPal/Api/OpenIdSession.php	(revision 7220)
+++ /lib/PayPal/Api/OpenIdSession.php	(revision 7221)
@@ -13,11 +13,13 @@
      * start the authentication / authorization process.
      *
-     * @param string     $redirectUri   Uri on merchant website to where
+     * @param string $redirectUri Uri on merchant website to where
      *                                  the user must be redirected to post paypal login
-     * @param array      $scope         The access privilges that you are requesting for
+     * @param array $scope The access privilges that you are requesting for
      *                                  from the user. Pass empty array for all scopes.
-     * @param string     $clientId      client id from developer portal
-     *                                  See https://developer.paypal.com/webapps/developer/docs/integration/direct/log-in-with-paypal/detailed/#attributes for more
-     * @param ApiContext $apiContext    Optional API Context
+     * @param string $clientId client id from developer portal
+     *                                  See https://developer.paypal.com/docs/integration/direct/log-in-with-paypal/detailed/#attributes for more
+     * @param null $nonce
+     * @param null $state
+     * @param ApiContext $apiContext Optional API Context
      * @return string Authorization URL
      */
@@ -52,5 +54,5 @@
             $params['state'] = $state;
         }
-        return sprintf("%s/v1/authorize?%s", self::getBaseUrl($config), http_build_query($params));
+        return sprintf("%s/signin/authorize?%s", self::getBaseUrl($config), http_build_query($params));
     }
 
@@ -79,5 +81,5 @@
             'logout' => 'true'
         );
-        return sprintf("%s/v1/endsession?%s", self::getBaseUrl($config), http_build_query($params));
+        return sprintf("%s/webapps/auth/protocol/openidconnect/v1/endsession?%s", self::getBaseUrl($config), http_build_query($params));
     }
 
Index: /lib/PayPal/Api/OpenIdTokeninfo.php
===================================================================
--- /lib/PayPal/Api/OpenIdTokeninfo.php	(revision 7220)
+++ /lib/PayPal/Api/OpenIdTokeninfo.php	(revision 7221)
@@ -1,5 +1,4 @@
 <?php
 namespace PayPal\Api;
-
 
 use PayPal\Common\PayPalResourceModel;
@@ -8,5 +7,14 @@
 
 /**
+ * Class OpenIdTokeninfo
+ *
  * Token grant resource
+ *
+ * @property string scope
+ * @property string access_token
+ * @property string refresh_token
+ * @property string token_type
+ * @property string id_token
+ * @property int expires_in
  */
 class OpenIdTokeninfo extends PayPalResourceModel
@@ -212,7 +220,8 @@
      *                               (optional) scope is an array that either the same or a subset of the scope passed to the authorization request
      * @param APIContext $apiContext Optional API Context
+     * @param PayPalRestCall $restCall
      * @return OpenIdTokeninfo
      */
-    public function createFromRefreshToken($params, $apiContext = null)
+    public function createFromRefreshToken($params, $apiContext = null, $restCall = null)
     {
         static $allowedParams = array('grant_type' => 1, 'refresh_token' => 1, 'scope' => 1);
@@ -237,5 +246,6 @@
                 'Authorization' => 'Basic ' . base64_encode($clientId . ":" . $clientSecret)
             ),
-            $apiContext
+            $apiContext,
+            $restCall
         );
 
Index: /lib/PayPal/Api/OpenIdUserinfo.php
===================================================================
--- /lib/PayPal/Api/OpenIdUserinfo.php	(revision 7220)
+++ /lib/PayPal/Api/OpenIdUserinfo.php	(revision 7221)
@@ -6,5 +6,29 @@
 
 /**
+ * Class OpenIdUserinfo
+ *
  * OpenIdConnect UserInfo Resource
+ *
+ * @property string user_id
+ * @property string sub
+ * @property mixed name
+ * @property string given_name
+ * @property string family_name
+ * @property string middle_name
+ * @property string picture
+ * @property string email
+ * @property bool email_verified
+ * @property string gender
+ * @property string birthday
+ * @property string zoneinfo
+ * @property string locale
+ * @property string language
+ * @property bool verified
+ * @property string phone_number
+ * @property OpenIdAddress address
+ * @property mixed verified_account
+ * @property mixed account_type
+ * @property string age_range
+ * @property string payer_id
  */
 class OpenIdUserinfo extends PayPalResourceModel
@@ -482,7 +506,8 @@
      *                                 access_token - access token from the createFromAuthorizationCode / createFromRefreshToken calls
      * @param ApiContext $apiContext Optional API Context
+     * @param PayPalRestCall $restCall
      * @return OpenIdUserinfo
      */
-    public static function getUserinfo($params, $apiContext = null)
+    public static function getUserinfo($params, $apiContext = null, $restCall = null)
     {
         static $allowedParams = array('schema' => 1);
@@ -504,5 +529,6 @@
                 'Content-Type' => 'x-www-form-urlencoded'
             ),
-            $apiContext
+            $apiContext,
+            $restCall
         );
 
Index: /lib/PayPal/Api/Order.php
===================================================================
--- /lib/PayPal/Api/Order.php	(revision 7220)
+++ /lib/PayPal/Api/Order.php	(revision 7221)
@@ -5,8 +5,5 @@
 use PayPal\Common\PayPalResourceModel;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\Capture;
-use PayPal\Api\Authorization;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
@@ -18,5 +15,5 @@
  *
  * @property string id
- * @property string purchase_unit_reference_id
+ * @property string reference_id
  * @property \PayPal\Api\Amount amount
  * @property string payment_mode
@@ -30,4 +27,5 @@
  * @property string create_time
  * @property string update_time
+ * @property \PayPal\Api\Links[] links
  */
 class Order extends PayPalResourceModel
@@ -59,6 +57,8 @@
      * Identifier to the purchase unit associated with this object. Obsolete. Use one in cart_base.
      *
+     * @deprecated Use #setReferenceId instead
+     *
      * @param string $purchase_unit_reference_id
-     * 
+     *
      * @return $this
      */
@@ -71,4 +71,5 @@
     /**
      * Identifier to the purchase unit associated with this object. Obsolete. Use one in cart_base.
+     * @deprecated Use #getReferenceId instead
      *
      * @return string
@@ -77,4 +78,27 @@
     {
         return $this->purchase_unit_reference_id;
+    }
+
+    /**
+     * Identifier to the purchase unit associated with this object. Obsolete. Use one in cart_base.
+     *
+     * @param string $reference_id
+     *
+     * @return $this
+     */
+    public function setReferenceId($reference_id)
+    {
+        $this->reference_id = $reference_id;
+        return $this;
+    }
+
+    /**
+     * Identifier to the purchase unit associated with this object. Obsolete. Use one in cart_base.
+     *
+     * @return string
+     */
+    public function getReferenceId()
+    {
+        return $this->reference_id;
     }
 
@@ -128,5 +152,5 @@
     /**
      * State of the order transaction.
-     * Valid Values: ["pending", "completed", "refunded", "partially_refunded", "voided"]
+     * Valid Values: ["pending", "completed", "voided", "authorized", "captured"]
      *
      * @param string $state
@@ -151,5 +175,5 @@
 
     /**
-     * Reason code for the transaction state being Pending or Reversed. This field will replace pending_reason field eventually
+     * Reason code for the transaction state being Pending or Reversed. This field will replace pending_reason field eventually. Only supported when the `payment_method` is set to `paypal`.
      * Valid Values: ["PAYER_SHIPPING_UNCONFIRMED", "MULTI_CURRENCY", "RISK_REVIEW", "REGULATORY_REVIEW", "VERIFICATION_REQUIRED", "ORDER", "OTHER"]
      *
@@ -165,5 +189,5 @@
 
     /**
-     * Reason code for the transaction state being Pending or Reversed. This field will replace pending_reason field eventually
+     * Reason code for the transaction state being Pending or Reversed. This field will replace pending_reason field eventually. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -175,5 +199,5 @@
 
     /**
-     * Reason code for the transaction state being Pending. Obsolete. Retained for backward compatability. Use reason_code field above instead. 
+     * [DEPRECATED] Reason code for the transaction state being Pending. Obsolete. Retained for backward compatability. Use reason_code field above instead. 
      * Valid Values: ["payer_shipping_unconfirmed", "multi_currency", "risk_review", "regulatory_review", "verification_required", "order", "other"]
      *
@@ -189,5 +213,5 @@
 
     /**
-     * Reason code for the transaction state being Pending. Obsolete. Retained for backward compatability. Use reason_code field above instead. 
+     * @deprecated  [DEPRECATED] Reason code for the transaction state being Pending. Obsolete. Retained for backward compatability. Use reason_code field above instead. 
      *
      * @return string
@@ -199,5 +223,5 @@
 
     /**
-     * Protection Eligibility of the Payer 
+     * The level of seller protection in force for the transaction.
      * Valid Values: ["ELIGIBLE", "PARTIALLY_ELIGIBLE", "INELIGIBLE"]
      *
@@ -208,10 +232,10 @@
     public function setProtectionEligibility($protection_eligibility)
     {
-        $this->{"protection-eligibility"} = $protection_eligibility;
-        return $this;
-    }
-
-    /**
-     * Protection Eligibility of the Payer 
+        $this->protection_eligibility = $protection_eligibility;
+        return $this;
+    }
+
+    /**
+     * The level of seller protection in force for the transaction.
      *
      * @return string
@@ -219,10 +243,10 @@
     public function getProtectionEligibility()
     {
-        return $this->{"protection-eligibility"};
-    }
-
-    /**
-     * Protection Eligibility Type of the Payer 
-     * Valid Values: ["ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE", "INELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE"]
+        return $this->protection_eligibility;
+    }
+
+    /**
+     * The kind of seller protection in force for the transaction. This property is returned only when the `protection_eligibility` property is set to `ELIGIBLE`or `PARTIALLY_ELIGIBLE`. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br> `ITEM_NOT_RECEIVED_ELIGIBLE`- Sellers are protected against claims for items not received.<br> `UNAUTHORIZED_PAYMENT_ELIGIBLE`- Sellers are protected against claims for unauthorized payments.<br> One or both of the allowed values can be returned.
+     * Valid Values: ["ITEM_NOT_RECEIVED_ELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE"]
      *
      * @param string $protection_eligibility_type
@@ -232,10 +256,10 @@
     public function setProtectionEligibilityType($protection_eligibility_type)
     {
-        $this->{"protection-eligibility_type"} = $protection_eligibility_type;
-        return $this;
-    }
-
-    /**
-     * Protection Eligibility Type of the Payer 
+        $this->protection_eligibility_type = $protection_eligibility_type;
+        return $this;
+    }
+
+    /**
+     * The kind of seller protection in force for the transaction. This property is returned only when the `protection_eligibility` property is set to `ELIGIBLE`or `PARTIALLY_ELIGIBLE`. Only supported when the `payment_method` is set to `paypal`. Allowed values:<br> `ITEM_NOT_RECEIVED_ELIGIBLE`- Sellers are protected against claims for items not received.<br> `UNAUTHORIZED_PAYMENT_ELIGIBLE`- Sellers are protected against claims for unauthorized payments.<br> One or both of the allowed values can be returned.
      *
      * @return string
@@ -243,5 +267,5 @@
     public function getProtectionEligibilityType()
     {
-        return $this->{"protection-eligibility_type"};
+        return $this->protection_eligibility_type;
     }
 
@@ -339,5 +363,5 @@
 
     /**
-     * Retrieve details about an order by passing the order_id in the request URI.
+     * Shows details for an order, by ID.
      *
      * @param string $orderId
@@ -364,5 +388,5 @@
 
     /**
-     * Capture a payment on an order by passing the order_id in the request URI. In addition, include the amount of the payment and indicate whether this is a final capture for the given authorization in the body of the request JSON. To issue this request, an original payment call must specify an intent of order.
+     * Captures a payment for an order, by ID. To use this call, the original payment call must specify an intent of `order`. In the JSON request body, include the payment amount and indicate whether this capture is the final capture for the authorization.
      *
      * @param Capture $capture
@@ -390,5 +414,5 @@
 
     /**
-     * Void (cancel) an order by passing the order_id in the request URI. Note that an order cannot be voided if payment has already been partially or fully captured.
+     * Voids, or cancels, an order, by ID. You cannot void an order if a payment has already been partially or fully captured.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -413,5 +437,5 @@
 
     /**
-     * Authorize an order by passing the order_id in the request URI. In addition, include an amount object in the body of the request JSON.
+     * Authorizes an order, by ID. Include an `amount` object in the JSON request body.
      *
      * @param Authorization $authorization Authorization Object with Amount value to be authorized
Index: /lib/PayPal/Api/Patch.php
===================================================================
--- /lib/PayPal/Api/Patch.php	(revision 7220)
+++ /lib/PayPal/Api/Patch.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class Patch
  *
- * A JSON Patch object used for doing partial updates to resources.
+ * A JSON patch object that you can use to apply partial updates to resources.
  *
  * @package PayPal\Api
@@ -20,6 +20,6 @@
 {
     /**
-     * Patch operation to perform.Value required for add & remove operation can be any JSON value.
-     * Valid Values: ["add", "remove", "replace"]
+     * The operation to perform.
+     * Valid Values: ["add", "remove", "replace", "move", "copy", "test"]
      *
      * @param string $op
@@ -34,5 +34,5 @@
 
     /**
-     * Patch operation to perform.Value required for add & remove operation can be any JSON value.
+     * The operation to perform.
      *
      * @return string
@@ -44,5 +44,5 @@
 
     /**
-     * string containing a JSON-Pointer value that references a location within the target document (the target location) where the operation is performed.
+     * A JSON pointer that references a location in the target document where the operation is performed. A `string` value.
      *
      * @param string $path
@@ -57,5 +57,5 @@
 
     /**
-     * string containing a JSON-Pointer value that references a location within the target document (the target location) where the operation is performed.
+     * A JSON pointer that references a location in the target document where the operation is performed. A `string` value.
      *
      * @return string
Index: /lib/PayPal/Api/PatchRequest.php
===================================================================
--- /lib/PayPal/Api/PatchRequest.php	(revision 7220)
+++ /lib/PayPal/Api/PatchRequest.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PatchRequest
  *
- * Request object used for a JSON Patch.
+ * A JSON patch request.
  *
  * @package PayPal\Api
Index: /lib/PayPal/Api/Payee.php
===================================================================
--- /lib/PayPal/Api/Payee.php	(revision 7220)
+++ /lib/PayPal/Api/Payee.php	(revision 7221)
@@ -4,10 +4,9 @@
 
 use PayPal\Common\PayPalModel;
-use PayPal\Rest\ApiContext;
 
 /**
  * Class Payee
  *
- * A resource representing a Payee that received the funds and fulfills the order. Only one of the following identifiers need to be supplied.
+ * A resource representing a Payee who receives the funds and fulfills the order.
  *
  * @package PayPal\Api
@@ -15,11 +14,9 @@
  * @property string email
  * @property string merchant_id
- * @property \PayPal\Api\Phone phone
  */
 class Payee extends PayPalModel
 {
     /**
-     * Email Address associated with the Payee's PayPal Account. If the provided email address is not associated with any PayPal Account, the payee can only receiver PayPal Wallet Payments. Direct Credit Card Payments will be denied due to card compliance requirements.
-     * 
+     * Email Address associated with the Payee's PayPal Account. If the provided email address is not associated with any PayPal Account, the payee can only receive PayPal Wallet Payments. Direct Credit Card Payments will be denied due to card compliance requirements.
      *
      * @param string $email
@@ -34,5 +31,5 @@
 
     /**
-     * Email Address associated with the Payee's PayPal Account. If the provided email address is not associated with any PayPal Account, the payee can only receiver PayPal Wallet Payments. Direct Credit Card Payments will be denied due to card compliance requirements.
+     * Email Address associated with the Payee's PayPal Account. If the provided email address is not associated with any PayPal Account, the payee can only receive PayPal Wallet Payments. Direct Credit Card Payments will be denied due to card compliance requirements.
      *
      * @return string
@@ -44,6 +41,5 @@
 
     /**
-     * Encrypted PayPal Account identifier for the Payee.
-     * 
+     * Encrypted PayPal account identifier for the Payee.
      *
      * @param string $merchant_id
@@ -58,5 +54,5 @@
 
     /**
-     * Encrypted PayPal Account identifier for the Payee.
+     * Encrypted PayPal account identifier for the Payee.
      *
      * @return string
@@ -68,7 +64,75 @@
 
     /**
-     * Information related to the Payer. In case of PayPal Wallet payment, this information will be filled in by PayPal after the user approves the payment using their PayPal Wallet. 
+     * First Name of the Payee.
+     * @deprecated Not publicly available
+     * @param string $first_name
      * 
-     *
+     * @return $this
+     */
+    public function setFirstName($first_name)
+    {
+        $this->first_name = $first_name;
+        return $this;
+    }
+
+    /**
+     * First Name of the Payee.
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getFirstName()
+    {
+        return $this->first_name;
+    }
+
+    /**
+     * Last Name of the Payee.
+     * @deprecated Not publicly available
+     * @param string $last_name
+     * 
+     * @return $this
+     */
+    public function setLastName($last_name)
+    {
+        $this->last_name = $last_name;
+        return $this;
+    }
+
+    /**
+     * Last Name of the Payee.
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getLastName()
+    {
+        return $this->last_name;
+    }
+
+    /**
+     * Unencrypted PayPal account Number of the Payee
+     * @deprecated Not publicly available
+     * @param string $account_number
+     * 
+     * @return $this
+     */
+    public function setAccountNumber($account_number)
+    {
+        $this->account_number = $account_number;
+        return $this;
+    }
+
+    /**
+     * Unencrypted PayPal account Number of the Payee
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getAccountNumber()
+    {
+        return $this->account_number;
+    }
+
+    /**
+     * Information related to the Payee.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Phone $phone
      * 
@@ -82,6 +146,6 @@
 
     /**
-     * Information related to the Payer. In case of PayPal Wallet payment, this information will be filled in by PayPal after the user approves the payment using their PayPal Wallet. 
-     *
+     * Information related to the Payee.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Phone
      */
Index: /lib/PayPal/Api/Payer.php
===================================================================
--- /lib/PayPal/Api/Payer.php	(revision 7220)
+++ /lib/PayPal/Api/Payer.php	(revision 7221)
@@ -14,10 +14,6 @@
  * @property string payment_method
  * @property string status
- * @property string account_type
- * @property string account_age
  * @property \PayPal\Api\FundingInstrument[] funding_instruments
- * @property string funding_option_id
- * @property \PayPal\Api\FundingOption funding_option
- * @property \PayPal\Api\FundingOption related_funding_option
+ * @property string external_selected_funding_instrument_type
  * @property \PayPal\Api\PayerInfo payer_info
  */
@@ -25,6 +21,8 @@
 {
     /**
-     * Payment method being used - PayPal Wallet payment, Bank Direct Debit  or Direct Credit card.
-     * Valid Values: ["credit_card", "bank", "paypal", "pay_upon_invoice", "carrier"]
+     * Payment method being used. "credit_card" is not available for general use.
+     * Please ensure that you have acquired the approval for using "credit_card" for your live
+     * credentials.
+     * Valid Values: ["credit_card", "paypal"]
      *
      * @param string $payment_method
@@ -75,5 +73,5 @@
      * Type of account relationship payer has with PayPal.
      * Valid Values: ["BUSINESS", "PERSONAL", "PREMIER"]
-     *
+     * @deprecated Not publicly available
      * @param string $account_type
      * 
@@ -88,5 +86,5 @@
     /**
      * Type of account relationship payer has with PayPal.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -98,5 +96,5 @@
     /**
      * Duration since the payer established account relationship with PayPal in days.
-     *
+     * @deprecated Not publicly available
      * @param string $account_age
      * 
@@ -111,5 +109,5 @@
     /**
      * Duration since the payer established account relationship with PayPal in days.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -120,5 +118,5 @@
 
     /**
-     * List of funding instruments to fund the payment.
+     * List of funding instruments to fund the payment. 'OneOf' funding_instruments,funding_option_id to be used to identify the specifics of payment method passed.
      *
      * @param \PayPal\Api\FundingInstrument[] $funding_instruments
@@ -133,5 +131,5 @@
 
     /**
-     * List of funding instruments to fund the payment.
+     * List of funding instruments to fund the payment. 'OneOf' funding_instruments,funding_option_id to be used to identify the specifics of payment method passed.
      *
      * @return \PayPal\Api\FundingInstrument[]
@@ -173,6 +171,6 @@
 
     /**
-     * Id of user selected funding option for the payment. 'OneOf' funding_instruments or funding_option_id to be present 
-     *
+     * Id of user selected funding option for the payment.'OneOf' funding_instruments,funding_option_id to be used to identify the specifics of payment method passed.
+     * @deprecated Not publicly available
      * @param string $funding_option_id
      * 
@@ -186,6 +184,6 @@
 
     /**
-     * Id of user selected funding option for the payment. 'OneOf' funding_instruments or funding_option_id to be present 
-     *
+     * Id of user selected funding option for the payment.'OneOf' funding_instruments,funding_option_id to be used to identify the specifics of payment method passed.
+     * @deprecated Not publicly available
      * @return string
      */
@@ -197,5 +195,5 @@
     /**
      * Default funding option available for the payment 
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\FundingOption $funding_option
      * 
@@ -210,5 +208,5 @@
     /**
      * Default funding option available for the payment 
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\FundingOption
      */
@@ -219,6 +217,30 @@
 
     /**
+     * Instrument type pre-selected by the user outside of PayPal and passed along the payment creation. This param is used in cases such as PayPal Credit Second Button
+     * Valid Values: ["CREDIT", "PAY_UPON_INVOICE"]
+     *
+     * @param string $external_selected_funding_instrument_type
+     * 
+     * @return $this
+     */
+    public function setExternalSelectedFundingInstrumentType($external_selected_funding_instrument_type)
+    {
+        $this->external_selected_funding_instrument_type = $external_selected_funding_instrument_type;
+        return $this;
+    }
+
+    /**
+     * Instrument type pre-selected by the user outside of PayPal and passed along the payment creation. This param is used in cases such as PayPal Credit Second Button
+     *
+     * @return string
+     */
+    public function getExternalSelectedFundingInstrumentType()
+    {
+        return $this->external_selected_funding_instrument_type;
+    }
+
+    /**
      * Funding option related to default funding option.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\FundingOption $related_funding_option
      * 
@@ -233,5 +255,5 @@
     /**
      * Funding option related to default funding option.
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\FundingOption
      */
Index: /lib/PayPal/Api/PayerInfo.php
===================================================================
--- /lib/PayPal/Api/PayerInfo.php	(revision 7220)
+++ /lib/PayPal/Api/PayerInfo.php	(revision 7221)
@@ -28,10 +28,9 @@
  * @property string country_code
  * @property \PayPal\Api\Address billing_address
- * @property \PayPal\Api\ShippingAddress shipping_address
  */
 class PayerInfo extends PayPalModel
 {
     /**
-     * Email address representing the Payer.
+     * Email address representing the payer. 127 characters max.
      *
      * @param string $email
@@ -46,5 +45,5 @@
 
     /**
-     * Email address representing the Payer.
+     * Email address representing the payer. 127 characters max.
      *
      * @return string
@@ -56,5 +55,5 @@
 
     /**
-     * External Remember Me id representing the Payer
+     * External Remember Me id representing the payer
      *
      * @param string $external_remember_me_id
@@ -69,5 +68,5 @@
 
     /**
-     * External Remember Me id representing the Payer
+     * External Remember Me id representing the payer
      *
      * @return string
@@ -81,4 +80,31 @@
      * Account Number representing the Payer
      *
+     * @deprecated Use #setBuyerAccountNumberInstead
+     * @param string $account_number
+     *
+     * @return $this
+     */
+    public function setAccountNumber($account_number)
+    {
+        $this->account_number = $account_number;
+        return $this;
+    }
+
+    /**
+     * Account Number representing the Payer
+     *
+     * @deprecated Use #getBuyerAccountNumberInstead
+     *
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getAccountNumber()
+    {
+        return $this->account_number;
+    }
+
+    /**
+     * Account Number representing the Payer
+     *
      * @param string $buyer_account_number
      * 
@@ -102,5 +128,5 @@
 
     /**
-     * Salutation of the Payer.
+     * Salutation of the payer.
      *
      * @param string $salutation
@@ -115,5 +141,5 @@
 
     /**
-     * Salutation of the Payer.
+     * Salutation of the payer.
      *
      * @return string
@@ -125,5 +151,5 @@
 
     /**
-     * First Name of the Payer.
+     * First name of the payer.
      *
      * @param string $first_name
@@ -138,5 +164,5 @@
 
     /**
-     * First Name of the Payer.
+     * First name of the payer.
      *
      * @return string
@@ -148,5 +174,5 @@
 
     /**
-     * Middle Name of the Payer.
+     * Middle name of the payer.
      *
      * @param string $middle_name
@@ -161,5 +187,5 @@
 
     /**
-     * Middle Name of the Payer.
+     * Middle name of the payer.
      *
      * @return string
@@ -171,5 +197,5 @@
 
     /**
-     * Last Name of the Payer.
+     * Last name of the payer.
      *
      * @param string $last_name
@@ -184,5 +210,5 @@
 
     /**
-     * Last Name of the Payer.
+     * Last name of the payer.
      *
      * @return string
@@ -194,5 +220,5 @@
 
     /**
-     * Suffix of the Payer.
+     * Suffix of the payer.
      *
      * @param string $suffix
@@ -207,5 +233,5 @@
 
     /**
-     * Suffix of the Payer.
+     * Suffix of the payer.
      *
      * @return string
@@ -217,5 +243,5 @@
 
     /**
-     * PayPal assigned Payer ID.
+     * PayPal assigned encrypted Payer ID.
      *
      * @param string $payer_id
@@ -230,5 +256,5 @@
 
     /**
-     * PayPal assigned Payer ID.
+     * PayPal assigned encrypted Payer ID.
      *
      * @return string
@@ -240,5 +266,5 @@
 
     /**
-     * Phone number representing the Payer.
+     * Phone number representing the payer. 20 characters max.
      *
      * @param string $phone
@@ -253,5 +279,5 @@
 
     /**
-     * Phone number representing the Payer.
+     * Phone number representing the payer. 20 characters max.
      *
      * @return string
@@ -310,5 +336,5 @@
 
     /**
-     * Payer's tax ID.
+     * Payerâs tax ID. Only supported when the `payment_method` is set to `paypal`.
      *
      * @param string $tax_id
@@ -323,5 +349,5 @@
 
     /**
-     * Payer's tax ID.
+     * Payerâs tax ID. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -333,5 +359,5 @@
 
     /**
-     * Payer's tax ID type.
+     * Payerâs tax ID type. Allowed values: `BR_CPF` or `BR_CNPJ`. Only supported when the `payment_method` is set to `paypal`.
      * Valid Values: ["BR_CPF", "BR_CNPJ"]
      *
@@ -347,5 +373,5 @@
 
     /**
-     * Payer's tax ID type.
+     * Payerâs tax ID type. Allowed values: `BR_CPF` or `BR_CNPJ`. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -357,5 +383,5 @@
 
     /**
-     * 2 letter registered country code of the payer to identify the buyer country
+     * Two-letter registered country code of the payer to identify the buyer country.
      *
      * @param string $country_code
@@ -370,5 +396,5 @@
 
     /**
-     * 2 letter registered country code of the payer to identify the buyer country
+     * Two-letter registered country code of the payer to identify the buyer country.
      *
      * @return string
@@ -403,5 +429,5 @@
 
     /**
-     * Obsolete. Use shipping address present in purchase unit.
+     * @deprecated [DEPRECATED] Use shipping address present in purchase unit or at root level of checkout Session.
      *
      * @param \PayPal\Api\ShippingAddress $shipping_address
@@ -416,5 +442,5 @@
 
     /**
-     * Obsolete. Use shipping address present in purchase unit.
+     * @deprecated  [DEPRECATED] Use shipping address present in purchase unit or at root level of checkout Session.
      *
      * @return \PayPal\Api\ShippingAddress
Index: /lib/PayPal/Api/Payment.php
===================================================================
--- /lib/PayPal/Api/Payment.php	(revision 7220)
+++ /lib/PayPal/Api/Payment.php	(revision 7221)
@@ -6,8 +6,5 @@
 use PayPal\Core\PayPalConstants;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\object;
-use PayPal\Api\PaymentHistory;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
@@ -19,16 +16,16 @@
  *
  * @property string id
+ * @property string intent
+ * @property \PayPal\Api\Payer payer
+ * @property \PayPal\Api\Transaction[] transactions
+ * @property string state
+ * @property string experience_profile_id
+ * @property string note_to_payer
+ * @property \PayPal\Api\Payee $payee
+ * @property \PayPal\Api\RedirectUrls redirect_urls
+ * @property string failure_reason
  * @property string create_time
  * @property string update_time
- * @property string intent
- * @property \PayPal\Api\Payer payer
- * @property \PayPal\Api\Payee payee
- * @property string cart
- * @property \PayPal\Api\Transaction[] transactions
- * @property \PayPal\Api\Error[] failed_transactions
- * @property \PayPal\Api\PaymentInstruction payment_instruction
- * @property string state
- * @property \PayPal\Api\RedirectUrls redirect_urls
- * @property string experience_profile_id
+ * @property \PayPal\Api\Links[] links
  */
 class Payment extends PayPalResourceModel
@@ -58,5 +55,5 @@
 
     /**
-     * Intent of the payment - Sale or Authorization or Order.
+     * Payment intent.
      * Valid Values: ["sale", "authorize", "order"]
      *
@@ -72,5 +69,5 @@
 
     /**
-     * Intent of the payment - Sale or Authorization or Order.
+     * Payment intent.
      *
      * @return string
@@ -105,6 +102,28 @@
 
     /**
-     * .
-     *
+     * Information that the merchant knows about the payer.  This information is not definitive and only serves as a hint to the UI or any pre-processing logic.
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\PotentialPayerInfo $potential_payer_info
+     * 
+     * @return $this
+     */
+    public function setPotentialPayerInfo($potential_payer_info)
+    {
+        $this->potential_payer_info = $potential_payer_info;
+        return $this;
+    }
+
+    /**
+     * Information that the merchant knows about the payer.  This information is not definitive and only serves as a hint to the UI or any pre-processing logic.
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\PotentialPayerInfo
+     */
+    public function getPotentialPayerInfo()
+    {
+        return $this->potential_payer_info;
+    }
+
+    /**
+     * Receiver of funds for this payment.
      * @param \PayPal\Api\Payee $payee
      * 
@@ -118,6 +137,5 @@
 
     /**
-     * .
-     *
+     * Receiver of funds for this payment.
      * @return \PayPal\Api\Payee
      */
@@ -129,5 +147,5 @@
     /**
      * ID of the cart to execute the payment.
-     *
+     * @deprecated Not publicly available
      * @param string $cart
      * 
@@ -142,5 +160,5 @@
     /**
      * ID of the cart to execute the payment.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -151,5 +169,5 @@
 
     /**
-     * A payment can have more than one transaction, with each transaction establishing a contract between the payer and a payee
+     * Transactional details including the amount and item details.
      *
      * @param \PayPal\Api\Transaction[] $transactions
@@ -164,5 +182,5 @@
 
     /**
-     * A payment can have more than one transaction, with each transaction establishing a contract between the payer and a payee
+     * Transactional details including the amount and item details.
      *
      * @return \PayPal\Api\Transaction[]
@@ -205,5 +223,5 @@
     /**
      * Applicable for advanced payments like multi seller payment (MSP) to support partial failures
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Error[] $failed_transactions
      * 
@@ -218,5 +236,5 @@
     /**
      * Applicable for advanced payments like multi seller payment (MSP) to support partial failures
-     *
+     * @deprecated Not publicly available
      * @return \PayPal\Api\Error[]
      */
@@ -228,5 +246,5 @@
     /**
      * Append FailedTransactions to the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Error $error
      * @return $this
@@ -245,5 +263,5 @@
     /**
      * Remove FailedTransactions from the list.
-     *
+     * @deprecated Not publicly available
      * @param \PayPal\Api\Error $error
      * @return $this
@@ -257,6 +275,82 @@
 
     /**
-     * A payment instruction resource
-     *
+     * Collection of PayPal generated billing agreement tokens.
+     * @deprecated Not publicly available
+     * @param string[] $billing_agreement_tokens
+     * 
+     * @return $this
+     */
+    public function setBillingAgreementTokens($billing_agreement_tokens)
+    {
+        $this->billing_agreement_tokens = $billing_agreement_tokens;
+        return $this;
+    }
+
+    /**
+     * Collection of PayPal generated billing agreement tokens.
+     * @deprecated Not publicly available
+     * @return string[]
+     */
+    public function getBillingAgreementTokens()
+    {
+        return $this->billing_agreement_tokens;
+    }
+
+    /**
+     * Append BillingAgreementTokens to the list.
+     * @deprecated Not publicly available
+     * @param string $billingAgreementToken
+     * @return $this
+     */
+    public function addBillingAgreementToken($billingAgreementToken)
+    {
+        if (!$this->getBillingAgreementTokens()) {
+            return $this->setBillingAgreementTokens(array($billingAgreementToken));
+        } else {
+            return $this->setBillingAgreementTokens(
+                array_merge($this->getBillingAgreementTokens(), array($billingAgreementToken))
+            );
+        }
+    }
+
+    /**
+     * Remove BillingAgreementTokens from the list.
+     * @deprecated Not publicly available
+     * @param string $billingAgreementToken
+     * @return $this
+     */
+    public function removeBillingAgreementToken($billingAgreementToken)
+    {
+        return $this->setBillingAgreementTokens(
+            array_diff($this->getBillingAgreementTokens(), array($billingAgreementToken))
+        );
+    }
+
+    /**
+     * Credit financing offered to payer on PayPal side. Returned in payment after payer opts-in
+     * @deprecated Not publicly available
+     * @param \PayPal\Api\CreditFinancingOffered $credit_financing_offered
+     * 
+     * @return $this
+     */
+    public function setCreditFinancingOffered($credit_financing_offered)
+    {
+        $this->credit_financing_offered = $credit_financing_offered;
+        return $this;
+    }
+
+    /**
+     * Credit financing offered to payer on PayPal side. Returned in payment after payer opts-in
+     * @deprecated Not publicly available
+     * @return \PayPal\Api\CreditFinancingOffered
+     */
+    public function getCreditFinancingOffered()
+    {
+        return $this->credit_financing_offered;
+    }
+
+    /**
+     * Instructions for the payer to complete this payment.
+     * @deprecated Not publicly available
      * @param \PayPal\Api\PaymentInstruction $payment_instruction
      * 
@@ -270,6 +364,6 @@
 
     /**
-     * A payment instruction resource
-     *
+     * Instructions for the payer to complete this payment.
+     * @deprecated Not publicly available
      * @return \PayPal\Api\PaymentInstruction
      */
@@ -280,6 +374,6 @@
 
     /**
-     * state of the payment
-     * Valid Values: ["created", "approved", "completed", "partially_completed", "failed", "canceled", "expired", "in_progress"]
+     * The state of the payment, authorization, or order transaction. The value is:<ul><li><code>created</code>. The transaction was successfully created.</li><li><code>approved</code>. The buyer approved the transaction.</li><li><code>failed</code>. The transaction request failed.</li></ul>
+     * Valid Values: ["created", "approved", "failed", "partially_completed", "in_progress"]
      *
      * @param string $state
@@ -294,5 +388,5 @@
 
     /**
-     * state of the payment
+     * The state of the payment, authorization, or order transaction. The value is:<ul><li><code>created</code>. The transaction was successfully created.</li><li><code>approved</code>. The buyer approved the transaction.</li><li><code>failed</code>. The transaction request failed.</li></ul>
      *
      * @return string
@@ -304,5 +398,5 @@
 
     /**
-     * Identifier for the payment experience.
+     * PayPal generated identifier for the merchant's payment experience profile. Refer to [this](https://developer.paypal.com/docs/api/#payment-experience) link to create experience profile ID.
      *
      * @param string $experience_profile_id
@@ -317,5 +411,5 @@
 
     /**
-     * Identifier for the payment experience.
+     * PayPal generated identifier for the merchant's payment experience profile. Refer to [this](https://developer.paypal.com/docs/api/#payment-experience) link to create experience profile ID.
      *
      * @return string
@@ -327,5 +421,28 @@
 
     /**
-     * Redirect urls required only when using payment_method as PayPal - the only settings supported are return and cancel urls.
+     * free-form field for the use of clients to pass in a message to the payer
+     *
+     * @param string $note_to_payer
+     * 
+     * @return $this
+     */
+    public function setNoteToPayer($note_to_payer)
+    {
+        $this->note_to_payer = $note_to_payer;
+        return $this;
+    }
+
+    /**
+     * free-form field for the use of clients to pass in a message to the payer
+     *
+     * @return string
+     */
+    public function getNoteToPayer()
+    {
+        return $this->note_to_payer;
+    }
+
+    /**
+     * Set of redirect URLs you provide only for PayPal-based payments.
      *
      * @param \PayPal\Api\RedirectUrls $redirect_urls
@@ -340,5 +457,5 @@
 
     /**
-     * Redirect urls required only when using payment_method as PayPal - the only settings supported are return and cancel urls.
+     * Set of redirect URLs you provide only for PayPal-based payments.
      *
      * @return \PayPal\Api\RedirectUrls
@@ -350,5 +467,29 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Failure reason code returned when the payment failed for some valid reasons.
+     * Valid Values: ["UNABLE_TO_COMPLETE_TRANSACTION", "INVALID_PAYMENT_METHOD", "PAYER_CANNOT_PAY", "CANNOT_PAY_THIS_PAYEE", "REDIRECT_REQUIRED", "PAYEE_FILTER_RESTRICTIONS"]
+     *
+     * @param string $failure_reason
+     * 
+     * @return $this
+     */
+    public function setFailureReason($failure_reason)
+    {
+        $this->failure_reason = $failure_reason;
+        return $this;
+    }
+
+    /**
+     * Failure reason code returned when the payment failed for some valid reasons.
+     *
+     * @return string
+     */
+    public function getFailureReason()
+    {
+        return $this->failure_reason;
+    }
+
+    /**
+     * Payment creation time as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $create_time
@@ -363,5 +504,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Payment creation time as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -373,5 +514,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Payment update time as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $update_time
@@ -386,5 +527,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Payment update time as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -404,7 +545,19 @@
         return $this->getLink(PayPalConstants::APPROVAL_URL);
     }
-
-    /**
-     * Create and process a payment by passing a payment object that includes the intent, payer, and transactions in the body of the request JSON. For PayPal payments, include redirect URLs in the payment object.
+	
+	/**
+     * Get token from Approval Link
+     *
+     * @return null|string
+     */
+	public function getToken()
+	{
+		$parameter_name = "token";
+		parse_str(parse_url($this->getApprovalLink(), PHP_URL_QUERY), $query);
+		return !isset($query[$parameter_name]) ? null : $query[$parameter_name];
+	}
+	
+    /**
+     * Creates and processes a payment. In the JSON request body, include a `payment` object with the intent, payer, and transactions. For PayPal payments, include redirect URLs in the `payment` object.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -428,5 +581,5 @@
 
     /**
-     * Look up a particular payment resource by passing the payment_id in the request URI.
+     * Shows details for a payment, by ID.
      *
      * @param string $paymentId
@@ -453,5 +606,5 @@
 
     /**
-     * Partially update a payment resource by by passing the payment_id in the request URI. In addition, pass a patch_request_object in the body of the request JSON that specifies the operation to perform, path of the target location, and new value to apply. Please note that it is not possible to use patch after execute has been called.
+     * Partially updates a payment, by ID. You can update the amount, shipping address, invoice ID, and custom data. You cannot use patch after execute has been called.
      *
      * @param PatchRequest $patchRequest
@@ -477,5 +630,5 @@
 
     /**
-     * Execute (complete) a PayPal payment that has been approved by the payer by passing the payment_id in the request URI. This request only works after a buyer has approved the payment using the provided PayPal approval URL. Optionally update transaction information when executing the payment by passing in one or more transactions.
+     * Executes, or completes, a PayPal payment that the payer has approved. You can optionally update selective payment information when you execute a payment.
      *
      * @param PaymentExecution $paymentExecution
@@ -502,5 +655,5 @@
 
     /**
-     * List payments in any state (created, approved, failed, etc.). Payments returned are the payments made to the merchant issuing the request.
+     * List payments that were made to the merchant who issues the request. Payments can be in any state.
      *
      * @param array $params
@@ -514,12 +667,12 @@
         $payLoad = "";
         $allowedParams = array(
-            'count' => 1,
-            'start_id' => 1,
-            'start_index' => 1,
-            'start_time' => 1,
-            'end_time' => 1,
-            'payee_id' => 1,
-            'sort_by' => 1,
-            'sort_order' => 1,
+                    'count' => 1,
+                    'start_id' => 1,
+                    'start_index' => 1,
+                    'start_time' => 1,
+                    'end_time' => 1,
+                    'payee_id' => 1,
+                    'sort_by' => 1,
+                    'sort_order' => 1,
         );
         $json = self::executeCall(
Index: /lib/PayPal/Api/PaymentCard.php
===================================================================
--- /lib/PayPal/Api/PaymentCard.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentCard.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PaymentCard
  *
- * A resource representing a payment card that can be used to fund a payment.
+ * A payment card that can fund a payment.
  *
  * @package PayPal\Api
@@ -15,6 +15,6 @@
  * @property string number
  * @property string type
- * @property int expire_month
- * @property int expire_year
+ * @property string expire_month
+ * @property string expire_year
  * @property string start_month
  * @property string start_year
@@ -26,5 +26,7 @@
  * @property string external_customer_id
  * @property string status
+ * @property string card_product_class
  * @property string valid_until
+ * @property string issue_number
  * @property \PayPal\Api\Links[] links
  */
@@ -32,5 +34,5 @@
 {
     /**
-     * ID of the credit card being saved for later use.
+     * The ID of a credit card to save for later use.
      *
      * @param string $id
@@ -45,5 +47,5 @@
 
     /**
-     * ID of the credit card being saved for later use.
+     * The ID of a credit card to save for later use.
      *
      * @return string
@@ -55,5 +57,5 @@
 
     /**
-     * Card number.
+     * The card number.
      *
      * @param string $number
@@ -68,5 +70,5 @@
 
     /**
-     * Card number.
+     * The card number.
      *
      * @return string
@@ -78,5 +80,5 @@
 
     /**
-     * Type of the Card.
+     * The card type.
      * Valid Values: ["VISA", "AMEX", "SOLO", "JCB", "STAR", "DELTA", "DISCOVER", "SWITCH", "MAESTRO", "CB_NATIONALE", "CONFINOGA", "COFIDIS", "ELECTRON", "CETELEM", "CHINA_UNION_PAY", "MASTERCARD"]
      *
@@ -92,5 +94,5 @@
 
     /**
-     * Type of the Card.
+     * The card type.
      *
      * @return string
@@ -102,7 +104,7 @@
 
     /**
-     * 2 digit card expiry month.
-     *
-     * @param int $expire_month
+     * The two-digit expiry month for the card.
+     *
+     * @param string $expire_month
      * 
      * @return $this
@@ -115,7 +117,7 @@
 
     /**
-     * 2 digit card expiry month.
-     *
-     * @return int
+     * The two-digit expiry month for the card.
+     *
+     * @return string
      */
     public function getExpireMonth()
@@ -125,7 +127,7 @@
 
     /**
-     * 4 digit card expiry year
-     *
-     * @param int $expire_year
+     * The four-digit expiry year for the card.
+     *
+     * @param string $expire_year
      * 
      * @return $this
@@ -138,7 +140,7 @@
 
     /**
-     * 4 digit card expiry year
-     *
-     * @return int
+     * The four-digit expiry year for the card.
+     *
+     * @return string
      */
     public function getExpireYear()
@@ -148,5 +150,5 @@
 
     /**
-     * 2 digit card start month.
+     * The two-digit start month for the card. Required for UK Maestro cards.
      *
      * @param string $start_month
@@ -161,5 +163,5 @@
 
     /**
-     * 2 digit card start month.
+     * The two-digit start month for the card. Required for UK Maestro cards.
      *
      * @return string
@@ -171,5 +173,5 @@
 
     /**
-     * 4 digit card start year.
+     * The four-digit start year for the card. Required for UK Maestro cards. 
      *
      * @param string $start_year
@@ -184,5 +186,5 @@
 
     /**
-     * 4 digit card start year.
+     * The four-digit start year for the card. Required for UK Maestro cards. 
      *
      * @return string
@@ -194,5 +196,5 @@
 
     /**
-     * Card validation code. Only supported when making a Payment but not when saving a payment card for future use.
+     * The validation code for the card. Supported for payments but not for saving payment cards for future use.
      *
      * @param string $cvv2
@@ -207,5 +209,5 @@
 
     /**
-     * Card validation code. Only supported when making a Payment but not when saving a payment card for future use.
+     * The validation code for the card. Supported for payments but not for saving payment cards for future use.
      *
      * @return string
@@ -217,5 +219,5 @@
 
     /**
-     * Card holder's first name.
+     * The first name of the card holder.
      *
      * @param string $first_name
@@ -230,5 +232,5 @@
 
     /**
-     * Card holder's first name.
+     * The first name of the card holder.
      *
      * @return string
@@ -240,5 +242,5 @@
 
     /**
-     * Card holder's last name.
+     * The last name of the card holder.
      *
      * @param string $last_name
@@ -253,5 +255,5 @@
 
     /**
-     * Card holder's last name.
+     * The last name of the card holder.
      *
      * @return string
@@ -263,5 +265,5 @@
 
     /**
-     * 2 letter country code
+     * The two-letter country code.
      *
      * @param string $billing_country
@@ -276,5 +278,5 @@
 
     /**
-     * 2 letter country code
+     * The two-letter country code.
      *
      * @return string
@@ -286,5 +288,5 @@
 
     /**
-     * Billing Address associated with this card.
+     * The billing address for the card.
      *
      * @param \PayPal\Api\Address $billing_address
@@ -299,5 +301,5 @@
 
     /**
-     * Billing Address associated with this card.
+     * The billing address for the card.
      *
      * @return \PayPal\Api\Address
@@ -309,5 +311,5 @@
 
     /**
-     * A unique identifier of the customer to whom this card account belongs to. Generated and provided by the facilitator. This is required when creating or using a stored funding instrument in vault.
+     * The ID of the customer who owns this card account. The facilitator generates and provides this ID. Required when you create or use a stored funding instrument in the PayPal vault.
      *
      * @param string $external_customer_id
@@ -322,5 +324,5 @@
 
     /**
-     * A unique identifier of the customer to whom this card account belongs to. Generated and provided by the facilitator. This is required when creating or using a stored funding instrument in vault.
+     * The ID of the customer who owns this card account. The facilitator generates and provides this ID. Required when you create or use a stored funding instrument in the PayPal vault.
      *
      * @return string
@@ -332,5 +334,5 @@
 
     /**
-     * State of the funding instrument.
+     * The state of the funding instrument.
      * Valid Values: ["EXPIRED", "ACTIVE"]
      *
@@ -346,5 +348,5 @@
 
     /**
-     * State of the funding instrument.
+     * The state of the funding instrument.
      *
      * @return string
@@ -356,5 +358,29 @@
 
     /**
-     * Date/Time until this resource can be used fund a payment.
+     * The product class of the financial instrument issuer.
+     * Valid Values: ["CREDIT", "DEBIT", "GIFT", "PAYPAL_PREPAID", "PREPAID", "UNKNOWN"]
+     *
+     * @param string $card_product_class
+     * 
+     * @return $this
+     */
+    public function setCardProductClass($card_product_class)
+    {
+        $this->card_product_class = $card_product_class;
+        return $this;
+    }
+
+    /**
+     * The product class of the financial instrument issuer.
+     *
+     * @return string
+     */
+    public function getCardProductClass()
+    {
+        return $this->card_product_class;
+    }
+
+    /**
+     * The date and time until when this instrument can be used fund a payment.
      *
      * @param string $valid_until
@@ -369,5 +395,5 @@
 
     /**
-     * Date/Time until this resource can be used fund a payment.
+     * The date and time until when this instrument can be used fund a payment.
      *
      * @return string
@@ -376,4 +402,27 @@
     {
         return $this->valid_until;
+    }
+
+    /**
+     * The one- to two-digit card issue number. Required for UK Maestro cards.
+     *
+     * @param string $issue_number
+     * 
+     * @return $this
+     */
+    public function setIssueNumber($issue_number)
+    {
+        $this->issue_number = $issue_number;
+        return $this;
+    }
+
+    /**
+     * The one- to two-digit card issue number. Required for UK Maestro cards.
+     *
+     * @return string
+     */
+    public function getIssueNumber()
+    {
+        return $this->issue_number;
     }
 
Index: /lib/PayPal/Api/PaymentDetail.php
===================================================================
--- /lib/PayPal/Api/PaymentDetail.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentDetail.php	(revision 7221)
@@ -18,9 +18,10 @@
  * @property string method
  * @property string note
+ * @property \PayPal\Api\Currency amount
  */
 class PaymentDetail extends PayPalModel
 {
     /**
-     * PayPal payment detail indicating whether payment was made in an invoicing flow via PayPal or externally. In the case of the mark-as-paid API, payment type is EXTERNAL and this is what is now supported. The PAYPAL value is provided for backward compatibility.
+     * The PayPal payment detail. Indicates whether payment was made in an invoicing flow through PayPal or externally. In the case of the mark-as-paid API, the supported payment type is `EXTERNAL`. For backward compatibility, the `PAYPAL` payment type is still supported.
      * Valid Values: ["PAYPAL", "EXTERNAL"]
      *
@@ -36,5 +37,5 @@
 
     /**
-     * PayPal payment detail indicating whether payment was made in an invoicing flow via PayPal or externally. In the case of the mark-as-paid API, payment type is EXTERNAL and this is what is now supported. The PAYPAL value is provided for backward compatibility.
+     * The PayPal payment detail. Indicates whether payment was made in an invoicing flow through PayPal or externally. In the case of the mark-as-paid API, the supported payment type is `EXTERNAL`. For backward compatibility, the `PAYPAL` payment type is still supported.
      *
      * @return string
@@ -46,5 +47,5 @@
 
     /**
-     * PayPal payment transaction id. Mandatory field in case the type value is PAYPAL.
+     * The PayPal payment transaction ID. Required with the `PAYPAL` payment type.
      *
      * @param string $transaction_id
@@ -59,5 +60,5 @@
 
     /**
-     * PayPal payment transaction id. Mandatory field in case the type value is PAYPAL.
+     * The PayPal payment transaction ID. Required with the `PAYPAL` payment type.
      *
      * @return string
@@ -93,5 +94,5 @@
 
     /**
-     * Date when the invoice was paid. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice was paid. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $date
@@ -106,5 +107,5 @@
 
     /**
-     * Date when the invoice was paid. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice was paid. The date format is *yyyy*-*MM*-*dd* *z* as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -116,5 +117,5 @@
 
     /**
-     * Payment mode or method. This field is mandatory if the value of the type field is EXTERNAL.
+     * The payment mode or method. Required with the `EXTERNAL` payment type.
      * Valid Values: ["BANK_TRANSFER", "CASH", "CHECK", "CREDIT_CARD", "DEBIT_CARD", "PAYPAL", "WIRE_TRANSFER", "OTHER"]
      *
@@ -130,5 +131,5 @@
 
     /**
-     * Payment mode or method. This field is mandatory if the value of the type field is EXTERNAL.
+     * The payment mode or method. Required with the `EXTERNAL` payment type.
      *
      * @return string
@@ -140,5 +141,5 @@
 
     /**
-     * Optional note associated with the payment.
+     * Optional. A note associated with the payment.
      *
      * @param string $note
@@ -153,5 +154,5 @@
 
     /**
-     * Optional note associated with the payment.
+     * Optional. A note associated with the payment.
      *
      * @return string
@@ -162,3 +163,26 @@
     }
 
+    /**
+     * The amount to record as payment against invoice. If you omit this parameter, the total invoice amount is recorded as payment.
+     *
+     * @param \PayPal\Api\Currency $amount
+     * 
+     * @return $this
+     */
+    public function setAmount($amount)
+    {
+        $this->amount = $amount;
+        return $this;
+    }
+
+    /**
+     * The amount to record as payment against invoice. If you omit this parameter, the total invoice amount is recorded as payment.
+     *
+     * @return \PayPal\Api\Currency
+     */
+    public function getAmount()
+    {
+        return $this->amount;
+    }
+
 }
Index: /lib/PayPal/Api/PaymentExecution.php
===================================================================
--- /lib/PayPal/Api/PaymentExecution.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentExecution.php	(revision 7221)
@@ -18,5 +18,5 @@
 {
     /**
-     * PayPal assigned Payer ID returned in the approval return url.
+     * The ID of the Payer, passed in the `return_url` by PayPal.
      *
      * @param string $payer_id
@@ -31,5 +31,5 @@
 
     /**
-     * PayPal assigned Payer ID returned in the approval return url.
+     * The ID of the Payer, passed in the `return_url` by PayPal.
      *
      * @return string
@@ -41,5 +41,28 @@
 
     /**
-     * Transaction information to be used at the time of execute payment. Only amount and shipping_address can be updated in execute payment
+     * Carrier account id for a carrier billing payment. For a carrier billing payment, payer_id is not applicable.
+     * @deprecated Not publicly available
+     * @param string $carrier_account_id
+     * 
+     * @return $this
+     */
+    public function setCarrierAccountId($carrier_account_id)
+    {
+        $this->carrier_account_id = $carrier_account_id;
+        return $this;
+    }
+
+    /**
+     * Carrier account id for a carrier billing payment. For a carrier billing payment, payer_id is not applicable.
+     * @deprecated Not publicly available
+     * @return string
+     */
+    public function getCarrierAccountId()
+    {
+        return $this->carrier_account_id;
+    }
+
+    /**
+     * Transactional details including the amount and item details.
      *
      * @param \PayPal\Api\Transaction[] $transactions
@@ -54,5 +77,5 @@
 
     /**
-     * Transaction information to be used at the time of execute payment. Only amount and shipping_address can be updated in execute payment
+     * Transactional details including the amount and item details.
      *
      * @return \PayPal\Api\Transaction[]
Index: /lib/PayPal/Api/PaymentHistory.php
===================================================================
--- /lib/PayPal/Api/PaymentHistory.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentHistory.php	(revision 7221)
@@ -72,5 +72,5 @@
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items. Maximum value: 20.
      *
      * @param int $count
@@ -85,5 +85,5 @@
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items. Maximum value: 20.
      *
      * @return int
Index: /lib/PayPal/Api/PaymentInstruction.php
===================================================================
--- /lib/PayPal/Api/PaymentInstruction.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentInstruction.php	(revision 7221)
@@ -4,22 +4,21 @@
 
 use PayPal\Common\PayPalResourceModel;
+use PayPal\Rest\ApiContext;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
  * Class PaymentInstruction
  *
- * Object used to represent payment instruction.
+ * Contain details of how and when the payment should be made to PayPal in cases of manual bank transfer.
  *
  * @package PayPal\Api
  *
- * @property string reference_number
- * @property string instruction_type
+ * @property string                                  reference_number
+ * @property string                                  instruction_type
  * @property \PayPal\Api\RecipientBankingInstruction recipient_banking_instruction
- * @property \PayPal\Api\Currency amount
- * @property string payment_due_date
- * @property string note
- * @property \PayPal\Api\Links[] links
+ * @property \PayPal\Api\Currency                    amount
+ * @property string                                  payment_due_date
+ * @property string                                  note
+ * @property \PayPal\Api\Links[]                     links
  */
 class PaymentInstruction extends PayPalResourceModel
@@ -29,5 +28,5 @@
      *
      * @param string $reference_number
-     * 
+     *
      * @return $this
      */
@@ -47,4 +46,5 @@
         return $this->reference_number;
     }
+
     /**
      * Type of payment instruction
@@ -52,5 +52,5 @@
      *
      * @param string $instruction_type
-     * 
+     *
      * @return $this
      */
@@ -75,5 +75,5 @@
      *
      * @param \PayPal\Api\RecipientBankingInstruction $recipient_banking_instruction
-     * 
+     *
      * @return $this
      */
@@ -98,5 +98,5 @@
      *
      * @param \PayPal\Api\Currency $amount
-     * 
+     *
      * @return $this
      */
@@ -121,5 +121,5 @@
      *
      * @param string $payment_due_date
-     * 
+     *
      * @return $this
      */
@@ -144,5 +144,5 @@
      *
      * @param string $note
-     * 
+     *
      * @return $this
      */
@@ -166,7 +166,7 @@
      * Retrieve a payment instruction by passing the payment_id in the request URI. Use this request if you are implementing a solution that includes delayed payment like Pay Upon Invoice (PUI).
      *
-     * @param string $paymentId
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @param string         $paymentId
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return PaymentInstruction
      */
Index: /lib/PayPal/Api/PaymentOptions.php
===================================================================
--- /lib/PayPal/Api/PaymentOptions.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentOptions.php	(revision 7221)
@@ -40,3 +40,49 @@
     }
 
+    /**
+     * Indicator if this payment request is a recurring payment. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @param bool $recurring_flag
+     * 
+     * @return $this
+     */
+    public function setRecurringFlag($recurring_flag)
+    {
+        $this->recurring_flag = $recurring_flag;
+        return $this;
+    }
+
+    /**
+     * Indicator if this payment request is a recurring payment. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @return bool
+     */
+    public function getRecurringFlag()
+    {
+        return $this->recurring_flag;
+    }
+
+    /**
+     * Indicator if fraud management filters (fmf) should be skipped for this transaction. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @param bool $skip_fmf
+     * 
+     * @return $this
+     */
+    public function setSkipFmf($skip_fmf)
+    {
+        $this->skip_fmf = $skip_fmf;
+        return $this;
+    }
+
+    /**
+     * Indicator if fraud management filters (fmf) should be skipped for this transaction. Only supported when the `payment_method` is set to `credit_card`
+     * @deprecated Not publicly available
+     * @return bool
+     */
+    public function getSkipFmf()
+    {
+        return $this->skip_fmf;
+    }
+
 }
Index: /lib/PayPal/Api/PaymentTerm.php
===================================================================
--- /lib/PayPal/Api/PaymentTerm.php	(revision 7220)
+++ /lib/PayPal/Api/PaymentTerm.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PaymentTerm
  *
- * Payment term of the invoice. If term_type is present, due_date must not be present and vice versa.
+ * The payment term of the invoice. If you specify `term_type`, you cannot specify `due_date` and vice versa.
  *
  * @package PayPal\Api
@@ -18,6 +18,6 @@
 {
     /**
-     * Terms by which the invoice payment is due.
-     * Valid Values: ["DUE_ON_RECEIPT", "NET_10", "NET_15", "NET_30", "NET_45"]
+     * The terms by which the invoice payment is due.
+     * Valid Values: ["DUE_ON_RECEIPT", "DUE_ON_DATE_SPECIFIED", "NET_10", "NET_15", "NET_30", "NET_45", "NET_60", "NET_90", "NO_DUE_DATE"]
      *
      * @param string $term_type
@@ -32,5 +32,5 @@
 
     /**
-     * Terms by which the invoice payment is due.
+     * The terms by which the invoice payment is due.
      *
      * @return string
@@ -42,5 +42,5 @@
 
     /**
-     * Date on which invoice payment is due. It must be always a future date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice payment is due. This date must be a future date. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $due_date
@@ -55,5 +55,5 @@
 
     /**
-     * Date on which invoice payment is due. It must be always a future date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The date when the invoice payment is due. This date must be a future date. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
Index: /lib/PayPal/Api/Payout.php
===================================================================
--- /lib/PayPal/Api/Payout.php	(revision 7220)
+++ /lib/PayPal/Api/Payout.php	(revision 7221)
@@ -4,7 +4,7 @@
 
 use PayPal\Common\PayPalResourceModel;
+use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Rest\ApiContext;
 
 /**
Index: /lib/PayPal/Api/PayoutBatch.php
===================================================================
--- /lib/PayPal/Api/PayoutBatch.php	(revision 7220)
+++ /lib/PayPal/Api/PayoutBatch.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PayoutBatch
  *
- * The batch status as generated by PayPal.
+ * The PayPal-generated batch status.
  *
  * @package PayPal\Api
@@ -19,5 +19,5 @@
 {
     /**
-     * A batch header that includes the generated batch status.
+     * A batch header. Includes the generated batch status.
      *
      * @param \PayPal\Api\PayoutBatchHeader $batch_header
@@ -32,5 +32,5 @@
 
     /**
-     * A batch header that includes the generated batch status.
+     * A batch header. Includes the generated batch status.
      *
      * @return \PayPal\Api\PayoutBatchHeader
@@ -42,5 +42,5 @@
 
     /**
-     * Array of the items in a batch payout.
+     * An array of items in a batch payout.
      *
      * @param \PayPal\Api\PayoutItemDetails[] $items
@@ -55,5 +55,5 @@
 
     /**
-     * Array of the items in a batch payout.
+     * An array of items in a batch payout.
      *
      * @return \PayPal\Api\PayoutItemDetails[]
Index: /lib/PayPal/Api/PayoutBatchHeader.php
===================================================================
--- /lib/PayPal/Api/PayoutBatchHeader.php	(revision 7220)
+++ /lib/PayPal/Api/PayoutBatchHeader.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PayoutBatchHeader
  *
- * This object enables you to get payout header information for an entire batch request. This object represents payout header data, and can be the response to a batch header request.
+ * Batch header resource.
  *
  * @package PayPal\Api
@@ -25,5 +25,5 @@
 {
     /**
-     * An ID for the batch payout. Generated by PayPal. 30 characters max.
+     * The PayPal-generated ID for a batch payout.
      *
      * @param string $payout_batch_id
@@ -38,5 +38,5 @@
 
     /**
-     * An ID for the batch payout. Generated by PayPal. 30 characters max.
+     * The PayPal-generated ID for a batch payout.
      *
      * @return string
@@ -48,5 +48,5 @@
 
     /**
-     * Generated batch status.
+     * The PayPal-generated batch payout status. If the batch payout passes the preliminary checks, the status is `PENDING`.
      *
      * @param string $batch_status
@@ -61,5 +61,5 @@
 
     /**
-     * Generated batch status.
+     * The PayPal-generated batch payout status. If the batch payout passes the preliminary checks, the status is `PENDING`.
      *
      * @return string
@@ -74,5 +74,5 @@
      *
      * @param string $time_created
-     * 
+     *
      * @return $this
      */
@@ -97,5 +97,5 @@
      *
      * @param string $time_completed
-     * 
+     *
      * @return $this
      */
@@ -130,5 +130,5 @@
 
     /**
-     * The original batch header as provided by the payment sender.
+     * The sender-provided batch payout header.
      *
      * @return \PayPal\Api\PayoutSenderBatchHeader
@@ -143,5 +143,5 @@
      *
      * @param \PayPal\Api\Currency $amount
-     * 
+     *
      * @return $this
      */
@@ -166,5 +166,5 @@
      *
      * @param \PayPal\Api\Currency $fees
-     * 
+     *
      * @return $this
      */
@@ -189,5 +189,5 @@
      *
      * @param \PayPal\Api\Error $errors
-     * 
+     *
      * @return $this
      */
Index: /lib/PayPal/Api/PayoutItem.php
===================================================================
--- /lib/PayPal/Api/PayoutItem.php	(revision 7220)
+++ /lib/PayPal/Api/PayoutItem.php	(revision 7221)
@@ -4,12 +4,12 @@
 
 use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 
 /**
  * Class PayoutItem
  *
- * Sender-created description of a payout to a single recipient.
+ * A sender-created definition of a payout to a single recipient.
  *
  * @package PayPal\Api
@@ -24,8 +24,8 @@
 {
     /**
-     * The type of identification for the payment receiver. If this field is provided, the payout items without a `recipient_type` will use the provided value. If this field is not provided, each payout item must include a value for the `recipient_type`.
+     * The type of ID that identifies the payment receiver. Value is:<ul><code>EMAIL</code>. Unencrypted email. Value is a string of up to 127 single-byte characters.</li><li><code>PHONE</code>. Unencrypted phone number.<blockquote><strong>Note:</strong> The PayPal sandbox does not support the <code>PHONE</code> recipient type.</blockquote></li><li><code>PAYPAL_ID</code>. Encrypted PayPal account number.</li></ul>If the <code>sender_batch_header</code> includes the <code>recipient_type</code> attribute, any payout item without its own <code>recipient_type</code> attribute uses the <code>recipient_type</code> value from <code>sender_batch_header</code>. If the <code>sender_batch_header</code> omits the <code>recipient_type</code> attribute, each payout item must include its own <code>recipient_type</code> value.
      *
      * @param string $recipient_type
-     *
+     * 
      * @return $this
      */
@@ -37,5 +37,5 @@
 
     /**
-     * The type of identification for the payment receiver. If this field is provided, the payout items without a `recipient_type` will use the provided value. If this field is not provided, each payout item must include a value for the `recipient_type`.
+     * The type of ID that identifies the payment receiver. Value is:<ul><code>EMAIL</code>. Unencrypted email. Value is a string of up to 127 single-byte characters.</li><li><code>PHONE</code>. Unencrypted phone number.<blockquote><strong>Note:</strong> The PayPal sandbox does not support the <code>PHONE</code> recipient type.</blockquote></li><li><code>PAYPAL_ID</code>. Encrypted PayPal account number.</li></ul>If the <code>sender_batch_header</code> includes the <code>recipient_type</code> attribute, any payout item without its own <code>recipient_type</code> attribute uses the <code>recipient_type</code> value from <code>sender_batch_header</code>. If the <code>sender_batch_header</code> omits the <code>recipient_type</code> attribute, each payout item must include its own <code>recipient_type</code> value.
      *
      * @return string
@@ -47,8 +47,8 @@
 
     /**
-     * The amount of money to pay a receiver.
+     * The amount of money to pay the receiver.
      *
      * @param \PayPal\Api\Currency $amount
-     *
+     * 
      * @return $this
      */
@@ -60,5 +60,5 @@
 
     /**
-     * The amount of money to pay a receiver.
+     * The amount of money to pay the receiver.
      *
      * @return \PayPal\Api\Currency
@@ -70,8 +70,8 @@
 
     /**
-     * Note for notifications. The note is provided by the payment sender. This note can be any string. 4000 characters max.
+     * Optional. A sender-specified note for notifications. Value is any string value.
      *
      * @param string $note
-     *
+     * 
      * @return $this
      */
@@ -83,5 +83,5 @@
 
     /**
-     * Note for notifications. The note is provided by the payment sender. This note can be any string. 4000 characters max.
+     * Optional. A sender-specified note for notifications. Value is any string value.
      *
      * @return string
@@ -93,8 +93,8 @@
 
     /**
-     * The receiver of the payment. In a call response, the format of this value corresponds to the `recipient_type` specified in the request. 127 characters max.
+     * The receiver of the payment. Corresponds to the `recipient_type` value in the request.
      *
      * @param string $receiver
-     *
+     * 
      * @return $this
      */
@@ -106,5 +106,5 @@
 
     /**
-     * The receiver of the payment. In a call response, the format of this value corresponds to the `recipient_type` specified in the request. 127 characters max.
+     * The receiver of the payment. Corresponds to the `recipient_type` value in the request.
      *
      * @return string
@@ -116,8 +116,8 @@
 
     /**
-     * A sender-specific ID number, used in an accounting system for tracking purposes. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.
      *
      * @param string $sender_item_id
-     *
+     * 
      * @return $this
      */
@@ -129,5 +129,5 @@
 
     /**
-     * A sender-specific ID number, used in an accounting system for tracking purposes. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.
      *
      * @return string
@@ -187,4 +187,3 @@
         return $ret;
     }
-
 }
Index: /lib/PayPal/Api/PayoutItemDetails.php
===================================================================
--- /lib/PayPal/Api/PayoutItemDetails.php	(revision 7220)
+++ /lib/PayPal/Api/PayoutItemDetails.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PayoutItemDetails
  *
- * This object contains status and other data for an individual payout of a batch.
+ * The payout item status and other details.
  *
  * @package PayPal\Api
@@ -26,5 +26,5 @@
 {
     /**
-     * An ID for an individual payout. Provided by PayPal, such as in the case of getting the status of a batch request. 30 characters max.
+     * The ID for the payout item. Viewable when you show details for a batch payout.
      *
      * @param string $payout_item_id
@@ -39,5 +39,5 @@
 
     /**
-     * An ID for an individual payout. Provided by PayPal, such as in the case of getting the status of a batch request. 30 characters max.
+     * The ID for the payout item. Viewable when you show details for a batch payout.
      *
      * @return string
@@ -49,5 +49,5 @@
 
     /**
-     * Generated ID for the transaction. 30 characters max.
+     * The PayPal-generated ID for the transaction.
      *
      * @param string $transaction_id
@@ -62,5 +62,5 @@
 
     /**
-     * Generated ID for the transaction. 30 characters max.
+     * The PayPal-generated ID for the transaction.
      *
      * @return string
@@ -72,5 +72,5 @@
 
     /**
-     * Status of a transaction.
+     * The transaction status.
      *
      * @param string $transaction_status
@@ -85,5 +85,5 @@
 
     /**
-     * Status of a transaction.
+     * The transaction status.
      *
      * @return string
@@ -95,5 +95,5 @@
 
     /**
-     * Amount of money in U.S. dollars for fees.
+     * The amount of money, in U.S. dollars, for fees.
      *
      * @param \PayPal\Api\Currency $payout_item_fee
@@ -108,5 +108,5 @@
 
     /**
-     * Amount of money in U.S. dollars for fees.
+     * The amount of money, in U.S. dollars, for fees.
      *
      * @return \PayPal\Api\Currency
@@ -118,5 +118,5 @@
 
     /**
-     * An ID for the batch payout. Generated by PayPal. 30 characters max.
+     * The PayPal-generated ID for the batch payout.
      *
      * @param string $payout_batch_id
@@ -131,5 +131,5 @@
 
     /**
-     * An ID for the batch payout. Generated by PayPal. 30 characters max.
+     * The PayPal-generated ID for the batch payout.
      *
      * @return string
@@ -141,5 +141,5 @@
 
     /**
-     * Sender-created ID for tracking the batch in an accounting system. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.
      *
      * @param string $sender_batch_id
@@ -154,5 +154,5 @@
 
     /**
-     * Sender-created ID for tracking the batch in an accounting system. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.
      *
      * @return string
@@ -164,5 +164,5 @@
 
     /**
-     * The data for a payout item that the sender initially provided.
+     * The sender-provided information for the payout item.
      *
      * @param \PayPal\Api\PayoutItem $payout_item
@@ -177,5 +177,5 @@
 
     /**
-     * The data for a payout item that the sender initially provided.
+     * The sender-provided information for the payout item.
      *
      * @return \PayPal\Api\PayoutItem
@@ -187,5 +187,5 @@
 
     /**
-     * Time of the last processing for this item.
+     * The date and time when this item was last processed.
      *
      * @param string $time_processed
@@ -200,5 +200,5 @@
 
     /**
-     * Time of the last processing for this item.
+     * The date and time when this item was last processed.
      *
      * @return string
@@ -210,5 +210,5 @@
 
     /**
-     * Sets Error
+     * Sets Errors
      *
      * @param \PayPal\Api\Error $errors
@@ -223,5 +223,5 @@
 
     /**
-     * Gets Error
+     * Gets Errors
      *
      * @return \PayPal\Api\Error
Index: /lib/PayPal/Api/PayoutSenderBatchHeader.php
===================================================================
--- /lib/PayPal/Api/PayoutSenderBatchHeader.php	(revision 7220)
+++ /lib/PayPal/Api/PayoutSenderBatchHeader.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class PayoutSenderBatchHeader
  *
- * This object represents sender-provided data about a batch header. The data is provided in a POST request. All batch submissions must have a batch header.
+ * The sender-provided batch header for a batch payout request.
  *
  * @package PayPal\Api
@@ -15,9 +15,10 @@
  * @property string email_subject
  * @property string recipient_type
+ * @property string batch_status
  */
 class PayoutSenderBatchHeader extends PayPalModel
 {
     /**
-     * Sender-created ID for tracking the batch payout in an accounting system. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.<blockquote><strong>Note:</strong> PayPal prevents duplicate batches from being processed. If you specify a `sender_batch_id` that was used in the last 30 days, the API rejects the request and returns an error message that indicates the duplicate `sender_batch_id` and includes a HATEOAS link to the original batch payout with the same `sender_batch_id`. If you receive a HTTP `5nn` status code, you can safely retry the request with the same `sender_batch_id`. In any case, the API completes a payment only once for a specific `sender_batch_id` that is used within 30 days.</blockquote>
      *
      * @param string $sender_batch_id
@@ -32,5 +33,5 @@
 
     /**
-     * Sender-created ID for tracking the batch payout in an accounting system. 30 characters max.
+     * A sender-specified ID number. Tracks the batch payout in an accounting system.<blockquote><strong>Note:</strong> PayPal prevents duplicate batches from being processed. If you specify a `sender_batch_id` that was used in the last 30 days, the API rejects the request and returns an error message that indicates the duplicate `sender_batch_id` and includes a HATEOAS link to the original batch payout with the same `sender_batch_id`. If you receive a HTTP `5nn` status code, you can safely retry the request with the same `sender_batch_id`. In any case, the API completes a payment only once for a specific `sender_batch_id` that is used within 30 days.</blockquote>
      *
      * @return string
@@ -42,5 +43,5 @@
 
     /**
-     * The subject line text for the email that PayPal sends when a payout item is completed. (The subject line is the same for all recipients.) Maximum of 255 single-byte alphanumeric characters.
+     * The subject line text for the email that PayPal sends when a payout item completes. The subject line is the same for all recipients. Value is an alphanumeric string with a maximum length of 255 single-byte characters.
      *
      * @param string $email_subject
@@ -55,5 +56,5 @@
 
     /**
-     * The subject line text for the email that PayPal sends when a payout item is completed. (The subject line is the same for all recipients.) Maximum of 255 single-byte alphanumeric characters.
+     * The subject line text for the email that PayPal sends when a payout item completes. The subject line is the same for all recipients. Value is an alphanumeric string with a maximum length of 255 single-byte characters.
      *
      * @return string
@@ -65,5 +66,5 @@
 
     /**
-     * The type of ID for a payment receiver. If this field is provided, the payout items without a `recipient_type` will use the provided value. If this field is not provided, each payout item must include a value for the `recipient_type`. 
+     * The type of ID that identifies the payment receiver. Value is:<ul><code>EMAIL</code>. Unencrypted email. Value is a string of up to 127 single-byte characters.</li><li><code>PHONE</code>. Unencrypted phone number.<blockquote><strong>Note:</strong> The PayPal sandbox does not support the <code>PHONE</code> recipient type.</blockquote></li><li><code>PAYPAL_ID</code>. Encrypted PayPal account number.</li></ul>If the <code>sender_batch_header</code> includes the <code>recipient_type</code> attribute, any payout item without its own <code>recipient_type</code> attribute uses the <code>recipient_type</code> value from <code>sender_batch_header</code>. If the <code>sender_batch_header</code> omits the <code>recipient_type</code> attribute, each payout item must include its own <code>recipient_type</code> value.
      *
      * @param string $recipient_type
@@ -78,5 +79,5 @@
 
     /**
-     * The type of ID for a payment receiver. If this field is provided, the payout items without a `recipient_type` will use the provided value. If this field is not provided, each payout item must include a value for the `recipient_type`. 
+     * The type of ID that identifies the payment receiver. Value is:<ul><code>EMAIL</code>. Unencrypted email. Value is a string of up to 127 single-byte characters.</li><li><code>PHONE</code>. Unencrypted phone number.<blockquote><strong>Note:</strong> The PayPal sandbox does not support the <code>PHONE</code> recipient type.</blockquote></li><li><code>PAYPAL_ID</code>. Encrypted PayPal account number.</li></ul>If the <code>sender_batch_header</code> includes the <code>recipient_type</code> attribute, any payout item without its own <code>recipient_type</code> attribute uses the <code>recipient_type</code> value from <code>sender_batch_header</code>. If the <code>sender_batch_header</code> omits the <code>recipient_type</code> attribute, each payout item must include its own <code>recipient_type</code> value.
      *
      * @return string
@@ -87,3 +88,20 @@
     }
 
+    /**
+     * @deprecated This property is unused
+     */
+    public function setBatchStatus($batch_status)
+    {
+        $this->batch_status = $batch_status;
+        return $this;
+    }
+
+    /**
+     * @deprecated This property is unused
+     */
+    public function getBatchStatus()
+    {
+        return $this->batch_status;
+    }
+
 }
Index: /lib/PayPal/Api/Phone.php
===================================================================
--- /lib/PayPal/Api/Phone.php	(revision 7220)
+++ /lib/PayPal/Api/Phone.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class Phone
  *
- * Information related to the Payer. In case of PayPal Wallet payment, this information will be filled in by PayPal after the user approves the payment using their PayPal Wallet. 
+ * Information related to the Payee.
  *
  * @package PayPal\Api
Index: /lib/PayPal/Api/Plan.php
===================================================================
--- /lib/PayPal/Api/Plan.php	(revision 7220)
+++ /lib/PayPal/Api/Plan.php	(revision 7221)
@@ -5,8 +5,7 @@
 use PayPal\Common\PayPalModel;
 use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\PlanList;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 
 /**
Index: /lib/PayPal/Api/Presentation.php
===================================================================
--- /lib/PayPal/Api/Presentation.php	(revision 7220)
+++ /lib/PayPal/Api/Presentation.php	(revision 7221)
@@ -15,10 +15,11 @@
  * @property string logo_image
  * @property string locale_code
+ * @property string return_url_label
+ * @property string note_to_seller_label
  */
 class Presentation extends PayPalModel
 {
     /**
-     * A label that overrides the business name in the PayPal account on the PayPal pages.
-     * 
+     * A label that overrides the business name in the PayPal account on the PayPal pages. Character length and limitations: 127 single-byte alphanumeric characters.
      *
      * @param string $brand_name
@@ -33,5 +34,5 @@
 
     /**
-     * A label that overrides the business name in the PayPal account on the PayPal pages.
+     * A label that overrides the business name in the PayPal account on the PayPal pages. Character length and limitations: 127 single-byte alphanumeric characters.
      *
      * @return string
@@ -43,6 +44,5 @@
 
     /**
-     * A URL to logo image. Allowed vaues: `.gif`, `.jpg`, or `.png`.
-     * 
+     * A URL to the logo image. A valid media type is `.gif`, `.jpg`, or `.png`. The maximum width of the image is 190 pixels. The maximum height of the image is 60 pixels. PayPal crops images that are larger. PayPal places your logo image at the top of the cart review area. PayPal recommends that you store the image on a secure (HTTPS) server. Otherwise, web browsers display a message that checkout pages contain non-secure items. Character length and limit: 127 single-byte alphanumeric characters.
      *
      * @param string $logo_image
@@ -57,5 +57,5 @@
 
     /**
-     * A URL to logo image. Allowed vaues: `.gif`, `.jpg`, or `.png`.
+     * A URL to the logo image. A valid media type is `.gif`, `.jpg`, or `.png`. The maximum width of the image is 190 pixels. The maximum height of the image is 60 pixels. PayPal crops images that are larger. PayPal places your logo image at the top of the cart review area. PayPal recommends that you store the image on a secure (HTTPS) server. Otherwise, web browsers display a message that checkout pages contain non-secure items. Character length and limit: 127 single-byte alphanumeric characters.
      *
      * @return string
@@ -67,6 +67,5 @@
 
     /**
-     * Locale of pages displayed by PayPal payment experience.
-     * 
+     * The locale of pages displayed by PayPal payment experience. A valid value is `AU`, `AT`, `BE`, `BR`, `CA`, `CH`, `CN`, `DE`, `ES`, `GB`, `FR`, `IT`, `NL`, `PL`, `PT`, `RU`, or `US`. A 5-character code is also valid for languages in specific countries: `da_DK`, `he_IL`, `id_ID`, `ja_JP`, `no_NO`, `pt_BR`, `ru_RU`, `sv_SE`, `th_TH`, `zh_CN`, `zh_HK`, or `zh_TW`.
      *
      * @param string $locale_code
@@ -81,5 +80,5 @@
 
     /**
-     * Locale of pages displayed by PayPal payment experience.
+     * The locale of pages displayed by PayPal payment experience. A valid value is `AU`, `AT`, `BE`, `BR`, `CA`, `CH`, `CN`, `DE`, `ES`, `GB`, `FR`, `IT`, `NL`, `PL`, `PT`, `RU`, or `US`. A 5-character code is also valid for languages in specific countries: `da_DK`, `he_IL`, `id_ID`, `ja_JP`, `no_NO`, `pt_BR`, `ru_RU`, `sv_SE`, `th_TH`, `zh_CN`, `zh_HK`, or `zh_TW`.
      *
      * @return string
@@ -90,3 +89,49 @@
     }
 
+    /**
+     * A label to use as hypertext for the return to merchant link.
+     *
+     * @param string $return_url_label
+     * 
+     * @return $this
+     */
+    public function setReturnUrlLabel($return_url_label)
+    {
+        $this->return_url_label = $return_url_label;
+        return $this;
+    }
+
+    /**
+     * A label to use as hypertext for the return to merchant link.
+     *
+     * @return string
+     */
+    public function getReturnUrlLabel()
+    {
+        return $this->return_url_label;
+    }
+
+    /**
+     * A label to use as the title for the note to seller field. Used only when `allow_note` is `1`.
+     *
+     * @param string $note_to_seller_label
+     * 
+     * @return $this
+     */
+    public function setNoteToSellerLabel($note_to_seller_label)
+    {
+        $this->note_to_seller_label = $note_to_seller_label;
+        return $this;
+    }
+
+    /**
+     * A label to use as the title for the note to seller field. Used only when `allow_note` is `1`.
+     *
+     * @return string
+     */
+    public function getNoteToSellerLabel()
+    {
+        return $this->note_to_seller_label;
+    }
+
 }
Index: /lib/PayPal/Api/RedirectUrls.php
===================================================================
--- /lib/PayPal/Api/RedirectUrls.php	(revision 7220)
+++ /lib/PayPal/Api/RedirectUrls.php	(revision 7221)
@@ -9,5 +9,5 @@
  * Class RedirectUrls
  *
- * Redirect urls required only when using payment_method as PayPal - the only settings supported are return and cancel urls.
+ * Set of redirect URLs you provide only for PayPal-based payments.
  *
  * @package PayPal\Api
@@ -19,5 +19,5 @@
 {
     /**
-     * Url where the payer would be redirected to after approving the payment.
+     * Url where the payer would be redirected to after approving the payment. **Required for PayPal account payments.**
      *
      * @param string $return_url
@@ -33,5 +33,5 @@
 
     /**
-     * Url where the payer would be redirected to after approving the payment.
+     * Url where the payer would be redirected to after approving the payment. **Required for PayPal account payments.**
      *
      * @return string
@@ -43,5 +43,5 @@
 
     /**
-     * Url where the payer would be redirected to after canceling the payment.
+     * Url where the payer would be redirected to after canceling the payment. **Required for PayPal account payments.**
      *
      * @param string $cancel_url
@@ -57,5 +57,5 @@
 
     /**
-     * Url where the payer would be redirected to after canceling the payment.
+     * Url where the payer would be redirected to after canceling the payment. **Required for PayPal account payments.**
      *
      * @return string
Index: /lib/PayPal/Api/Refund.php
===================================================================
--- /lib/PayPal/Api/Refund.php	(revision 7220)
+++ /lib/PayPal/Api/Refund.php	(revision 7221)
@@ -6,5 +6,4 @@
 use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
@@ -16,13 +15,15 @@
  *
  * @property string id
- * @property string create_time
- * @property string update_time
  * @property \PayPal\Api\Amount amount
  * @property string state
  * @property string reason
+ * @property string invoice_number
  * @property string sale_id
  * @property string capture_id
  * @property string parent_payment
  * @property string description
+ * @property string create_time
+ * @property string update_time
+ * @property string reason_code
  * @property \PayPal\Api\Links[] links
  */
@@ -30,5 +31,5 @@
 {
     /**
-     * Identifier of the refund transaction in UTC ISO8601 format.
+     * ID of the refund transaction. 17 characters max.
      *
      * @param string $id
@@ -43,5 +44,5 @@
 
     /**
-     * Identifier of the refund transaction in UTC ISO8601 format.
+     * ID of the refund transaction. 17 characters max.
      *
      * @return string
@@ -53,5 +54,5 @@
 
     /**
-     * Details including both refunded amount (to Payer) and refunded fee (to Payee).If amount is not specified, it's assumed to be full refund.
+     * Details including both refunded amount (to payer) and refunded fee (to payee). 10 characters max.
      *
      * @param \PayPal\Api\Amount $amount
@@ -66,5 +67,5 @@
 
     /**
-     * Details including both refunded amount (to Payer) and refunded fee (to Payee).If amount is not specified, it's assumed to be full refund.
+     * Details including both refunded amount (to payer) and refunded fee (to payee). 10 characters max.
      *
      * @return \PayPal\Api\Amount
@@ -76,5 +77,5 @@
 
     /**
-     * State of the refund transaction.
+     * State of the refund.
      * Valid Values: ["pending", "completed", "failed"]
      *
@@ -90,5 +91,5 @@
 
     /**
-     * State of the refund transaction.
+     * State of the refund.
      *
      * @return string
@@ -123,4 +124,27 @@
 
     /**
+     * Your own invoice or tracking ID number. Character length and limitations: 127 single-byte alphanumeric characters.
+     *
+     * @param string $invoice_number
+     * 
+     * @return $this
+     */
+    public function setInvoiceNumber($invoice_number)
+    {
+        $this->invoice_number = $invoice_number;
+        return $this;
+    }
+
+    /**
+     * Your own invoice or tracking ID number. Character length and limitations: 127 single-byte alphanumeric characters.
+     *
+     * @return string
+     */
+    public function getInvoiceNumber()
+    {
+        return $this->invoice_number;
+    }
+
+    /**
      * ID of the Sale transaction being refunded. 
      *
@@ -146,5 +170,5 @@
 
     /**
-     * ID of the Capture transaction being refunded. 
+     * ID of the sale transaction being refunded.
      *
      * @param string $capture_id
@@ -159,5 +183,5 @@
 
     /**
-     * ID of the Capture transaction being refunded. 
+     * ID of the sale transaction being refunded.
      *
      * @return string
@@ -169,5 +193,5 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * ID of the payment resource on which this transaction is based.
      *
      * @param string $parent_payment
@@ -182,5 +206,5 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * ID of the payment resource on which this transaction is based.
      *
      * @return string
@@ -215,5 +239,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Time of refund as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $create_time
@@ -228,5 +252,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Time of refund as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -238,5 +262,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Time that the resource was last updated.
      *
      * @param string $update_time
@@ -251,5 +275,5 @@
 
     /**
-     * Time the resource was last updated in UTC ISO8601 format.
+     * Time that the resource was last updated.
      *
      * @return string
@@ -261,5 +285,29 @@
 
     /**
-     * Retrieve details about a specific refund by passing the refund_id in the request URI.
+     * The reason code for the refund state being pending
+     * Valid Values: ["ECHECK"]
+     *
+     * @param string $reason_code
+     * 
+     * @return $this
+     */
+    public function setReasonCode($reason_code)
+    {
+        $this->reason_code = $reason_code;
+        return $this;
+    }
+
+    /**
+     * The reason code for the refund state being pending
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reason_code;
+    }
+
+    /**
+     * Shows details for a refund, by ID.
      *
      * @param string $refundId
Index: /lib/PayPal/Api/RefundDetail.php
===================================================================
--- /lib/PayPal/Api/RefundDetail.php	(revision 7220)
+++ /lib/PayPal/Api/RefundDetail.php	(revision 7221)
@@ -13,11 +13,13 @@
  *
  * @property string type
+ * @property string transaction_id
  * @property string date
  * @property string note
+ * @property \PayPal\Api\Currency amount
  */
 class RefundDetail extends PayPalModel
 {
     /**
-     * PayPal refund type indicating whether refund was done in invoicing flow via PayPal or externally. In the case of the mark-as-refunded API, refund type is EXTERNAL and this is what is now supported. The PAYPAL value is provided for backward compatibility.
+     * The PayPal refund type. Indicates whether refund was paid in invoicing flow through PayPal or externally. In the case of mark-as-refunded API, the supported refund type is `EXTERNAL`. For backward compatability, the `PAYPAL` refund type is still supported.
      * Valid Values: ["PAYPAL", "EXTERNAL"]
      *
@@ -33,5 +35,5 @@
 
     /**
-     * PayPal refund type indicating whether refund was done in invoicing flow via PayPal or externally. In the case of the mark-as-refunded API, refund type is EXTERNAL and this is what is now supported. The PAYPAL value is provided for backward compatibility.
+     * The PayPal refund type. Indicates whether refund was paid in invoicing flow through PayPal or externally. In the case of mark-as-refunded API, the supported refund type is `EXTERNAL`. For backward compatability, the `PAYPAL` refund type is still supported.
      *
      * @return string
@@ -43,5 +45,28 @@
 
     /**
-     * Date when the invoice was marked as refunded. If no date is specified, the current date and time is used as the default. In addition, the date must be after the invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The PayPal refund transaction ID. Required with the `PAYPAL` refund type.
+     *
+     * @param string $transaction_id
+     * 
+     * @return $this
+     */
+    public function setTransactionId($transaction_id)
+    {
+        $this->transaction_id = $transaction_id;
+        return $this;
+    }
+
+    /**
+     * The PayPal refund transaction ID. Required with the `PAYPAL` refund type.
+     *
+     * @return string
+     */
+    public function getTransactionId()
+    {
+        return $this->transaction_id;
+    }
+
+    /**
+     * Date on which the invoice was refunded. Date format: yyyy-MM-dd z. For example, 2014-02-27 PST.
      *
      * @param string $date
@@ -56,5 +81,5 @@
 
     /**
-     * Date when the invoice was marked as refunded. If no date is specified, the current date and time is used as the default. In addition, the date must be after the invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * Date on which the invoice was refunded. Date format: yyyy-MM-dd z. For example, 2014-02-27 PST.
      *
      * @return string
@@ -88,3 +113,26 @@
     }
 
+    /**
+     * Amount to be recorded as refund against invoice. If this field is not passed, the total invoice paid amount is recorded as refund.
+     *
+     * @param \PayPal\Api\Currency $amount
+     * 
+     * @return $this
+     */
+    public function setAmount($amount)
+    {
+        $this->amount = $amount;
+        return $this;
+    }
+
+    /**
+     * Amount to be recorded as refund against invoice. If this field is not passed, the total invoice paid amount is recorded as refund.
+     *
+     * @return \PayPal\Api\Currency
+     */
+    public function getAmount()
+    {
+        return $this->amount;
+    }
+
 }
Index: /lib/PayPal/Api/RelatedResources.php
===================================================================
--- /lib/PayPal/Api/RelatedResources.php	(revision 7220)
+++ /lib/PayPal/Api/RelatedResources.php	(revision 7221)
@@ -21,9 +21,8 @@
 {
     /**
-     * A sale transaction
-     *
+     * Sale transaction
      *
      * @param \PayPal\Api\Sale $sale
-     *
+     * 
      * @return $this
      */
@@ -35,5 +34,5 @@
 
     /**
-     * A sale transaction
+     * Sale transaction
      *
      * @return \PayPal\Api\Sale
@@ -45,9 +44,8 @@
 
     /**
-     * An authorization transaction
-     *
+     * Authorization transaction
      *
      * @param \PayPal\Api\Authorization $authorization
-     *
+     * 
      * @return $this
      */
@@ -59,5 +57,5 @@
 
     /**
-     * An authorization transaction
+     * Authorization transaction
      *
      * @return \PayPal\Api\Authorization
@@ -69,9 +67,8 @@
 
     /**
-     * An order transaction
-     *
+     * Order transaction
      *
      * @param \PayPal\Api\Order $order
-     *
+     * 
      * @return $this
      */
@@ -83,5 +80,5 @@
 
     /**
-     * An order transaction
+     * Order transaction
      *
      * @return \PayPal\Api\Order
@@ -93,9 +90,8 @@
 
     /**
-     * A capture transaction
-     *
+     * Capture transaction
      *
      * @param \PayPal\Api\Capture $capture
-     *
+     * 
      * @return $this
      */
@@ -107,5 +103,5 @@
 
     /**
-     * A capture transaction
+     * Capture transaction
      *
      * @return \PayPal\Api\Capture
@@ -117,9 +113,8 @@
 
     /**
-     * A refund transaction
-     *
+     * Refund transaction
      *
      * @param \PayPal\Api\Refund $refund
-     *
+     * 
      * @return $this
      */
@@ -131,5 +126,5 @@
 
     /**
-     * A refund transaction
+     * Refund transaction
      *
      * @return \PayPal\Api\Refund
Index: /lib/PayPal/Api/Sale.php
===================================================================
--- /lib/PayPal/Api/Sale.php	(revision 7220)
+++ /lib/PayPal/Api/Sale.php	(revision 7221)
@@ -6,19 +6,16 @@
 use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
  * Class Sale
  *
- * A sale transaction.
+ * A sale transaction. This is the resource that is returned as a part related resources in Payment
  *
  * @package PayPal\Api
  *
  * @property string id
- * @property string create_time
- * @property string update_time
+ * @property string purchase_unit_reference_id
  * @property \PayPal\Api\Amount amount
  * @property string payment_mode
- * @property string pending_reason
  * @property string state
  * @property string reason_code
@@ -26,6 +23,6 @@
  * @property string protection_eligibility_type
  * @property string clearing_time
- * @property string recipient_fund_status
- * @property string hold_reason
+ * @property string payment_hold_status
+ * @property string[] payment_hold_reasons
  * @property \PayPal\Api\Currency transaction_fee
  * @property \PayPal\Api\Currency receivable_amount
@@ -34,4 +31,8 @@
  * @property string receipt_id
  * @property string parent_payment
+ * @property \PayPal\Api\ProcessorResponse processor_response
+ * @property string billing_agreement_id
+ * @property string create_time
+ * @property string update_time
  * @property \PayPal\Api\Links[] links
  */
@@ -62,5 +63,5 @@
 
     /**
-     * Identifier to the purchase unit corresponding to this sale transaction.
+     * Identifier to the purchase or transaction unit corresponding to this sale transaction.
      *
      * @param string $purchase_unit_reference_id
@@ -75,5 +76,5 @@
 
     /**
-     * Identifier to the purchase unit corresponding to this sale transaction.
+     * Identifier to the purchase or transaction unit corresponding to this sale transaction.
      *
      * @return string
@@ -108,5 +109,5 @@
 
     /**
-     * specifies payment mode of the transaction
+     * Specifies payment mode of the transaction. Only supported when the `payment_method` is set to `paypal`.
      * Valid Values: ["INSTANT_TRANSFER", "MANUAL_BANK_TRANSFER", "DELAYED_TRANSFER", "ECHECK"]
      *
@@ -122,5 +123,5 @@
 
     /**
-     * specifies payment mode of the transaction
+     * Specifies payment mode of the transaction. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -132,30 +133,6 @@
 
     /**
-     * Reason of Pending transaction.
-     *
-     *
-     *
-     * @param  string  $pending_reason
-     * @return $this
-     */
-    public function setPendingReason($pending_reason)
-    {
-        $this->pending_reason = $pending_reason;
-        return $this;
-    }
-
-    /**
-     * Reason of Pending transaction.
-     *
-     * @return string
-     */
-    public function getPendingReason()
-    {
-        return $this->pending_reason;
-    }
-
-    /**
      * State of the sale transaction.
-     * Valid Values: ["completed", "partially_refunded", "pending", "refunded"]
+     * Valid Values: ["completed", "partially_refunded", "pending", "refunded", "denied"]
      *
      * @param string $state
@@ -180,6 +157,6 @@
 
     /**
-     * Reason code for the transaction state being Pending or Reversed.
-     * Valid Values: ["CHARGEBACK", "GUARANTEE", "BUYER_COMPLAINT", "REFUND", "UNCONFIRMED_SHIPPING_ADDRESS", "ECHECK", "INTERNATIONAL_WITHDRAWAL", "RECEIVING_PREFERENCE_MANDATES_MANUAL_ACTION", "PAYMENT_REVIEW", "REGULATORY_REVIEW", "UNILATERAL", "VERIFICATION_REQUIRED"]
+     * Reason code for the transaction state being Pending or Reversed. Only supported when the `payment_method` is set to `paypal`.
+     * Valid Values: ["CHARGEBACK", "GUARANTEE", "BUYER_COMPLAINT", "REFUND", "UNCONFIRMED_SHIPPING_ADDRESS", "ECHECK", "INTERNATIONAL_WITHDRAWAL", "RECEIVING_PREFERENCE_MANDATES_MANUAL_ACTION", "PAYMENT_REVIEW", "REGULATORY_REVIEW", "UNILATERAL", "VERIFICATION_REQUIRED", "TRANSACTION_APPROVED_AWAITING_FUNDING"]
      *
      * @param string $reason_code
@@ -194,5 +171,5 @@
 
     /**
-     * Reason code for the transaction state being Pending or Reversed.
+     * Reason code for the transaction state being Pending or Reversed. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -204,5 +181,5 @@
 
     /**
-     * Protection Eligibility of the Payer 
+     * The level of seller protection in force for the transaction. Only supported when the `payment_method` is set to `paypal`. 
      * Valid Values: ["ELIGIBLE", "PARTIALLY_ELIGIBLE", "INELIGIBLE"]
      *
@@ -218,5 +195,5 @@
 
     /**
-     * Protection Eligibility of the Payer 
+     * The level of seller protection in force for the transaction. Only supported when the `payment_method` is set to `paypal`. 
      *
      * @return string
@@ -228,6 +205,6 @@
 
     /**
-     * Protection Eligibility Type of the Payer 
-     * Valid Values: ["ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE", "INELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE"]
+     * The kind of seller protection in force for the transaction. It is returned only when protection_eligibility is ELIGIBLE or PARTIALLY_ELIGIBLE. Only supported when the `payment_method` is set to `paypal`.
+     * Valid Values: ["ITEM_NOT_RECEIVED_ELIGIBLE", "UNAUTHORIZED_PAYMENT_ELIGIBLE", "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE"]
      *
      * @param string $protection_eligibility_type
@@ -242,5 +219,5 @@
 
     /**
-     * Protection Eligibility Type of the Payer 
+     * The kind of seller protection in force for the transaction. It is returned only when protection_eligibility is ELIGIBLE or PARTIALLY_ELIGIBLE. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -252,5 +229,5 @@
 
     /**
-     * Expected clearing time for eCheck Transactions
+     * Expected clearing time for eCheck Transactions. Returned when payment is made with eCheck. Only supported when the `payment_method` is set to `paypal`.
      *
      * @param string $clearing_time
@@ -265,5 +242,5 @@
 
     /**
-     * Expected clearing time for eCheck Transactions
+     * Expected clearing time for eCheck Transactions. Returned when payment is made with eCheck. Only supported when the `payment_method` is set to `paypal`.
      *
      * @return string
@@ -275,49 +252,78 @@
 
     /**
-     * Indicates the credit status of fund to the recipient. It will be returned only when payment status is 'completed' 
-     * Valid Values: ["COMPLETED", "HELD"]
-     *
-     * @param string $recipient_fund_status
-     * 
-     * @return $this
-     */
-    public function setRecipientFundStatus($recipient_fund_status)
-    {
-        $this->recipient_fund_status = $recipient_fund_status;
-        return $this;
-    }
-
-    /**
-     * Indicates the credit status of fund to the recipient. It will be returned only when payment status is 'completed' 
-     *
-     * @return string
-     */
-    public function getRecipientFundStatus()
-    {
-        return $this->recipient_fund_status;
-    }
-
-    /**
-     * Reason for holding the funds.
-     * Valid Values: ["NEW_SELLER_PAYMENT_HOLD", "PAYMENT_HOLD"]
-     *
-     * @param string $hold_reason
-     * 
-     * @return $this
-     */
-    public function setHoldReason($hold_reason)
-    {
-        $this->hold_reason = $hold_reason;
-        return $this;
-    }
-
-    /**
-     * Reason for holding the funds.
-     *
-     * @return string
-     */
-    public function getHoldReason()
-    {
-        return $this->hold_reason;
+     * Status of the Recipient Fund. For now, it will be returned only when fund status is held
+     * Valid Values: ["HELD"]
+     *
+     * @param string $payment_hold_status
+     * 
+     * @return $this
+     */
+    public function setPaymentHoldStatus($payment_hold_status)
+    {
+        $this->payment_hold_status = $payment_hold_status;
+        return $this;
+    }
+
+    /**
+     * Status of the Recipient Fund. For now, it will be returned only when fund status is held
+     *
+     * @return string
+     */
+    public function getPaymentHoldStatus()
+    {
+        return $this->payment_hold_status;
+    }
+
+    /**
+     * Reasons for PayPal holding recipient fund. It is set only if payment hold status is held
+     *
+     * @param string[] $payment_hold_reasons
+     * 
+     * @return $this
+     */
+    public function setPaymentHoldReasons($payment_hold_reasons)
+    {
+        $this->payment_hold_reasons = $payment_hold_reasons;
+        return $this;
+    }
+
+    /**
+     * Reasons for PayPal holding recipient fund. It is set only if payment hold status is held
+     *
+     * @return string[]
+     */
+    public function getPaymentHoldReasons()
+    {
+        return $this->payment_hold_reasons;
+    }
+
+    /**
+     * Append PaymentHoldReasons to the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function addPaymentHoldReason($string)
+    {
+        if (!$this->getPaymentHoldReasons()) {
+            return $this->setPaymentHoldReasons(array($string));
+        } else {
+            return $this->setPaymentHoldReasons(
+                array_merge($this->getPaymentHoldReasons(), array($string))
+            );
+        }
+    }
+
+    /**
+     * Remove PaymentHoldReasons from the list.
+     *
+     * @param string $string
+     * @return $this
+     */
+    public function removePaymentHoldReason($string)
+    {
+        return $this->setPaymentHoldReasons(
+            array_diff($this->getPaymentHoldReasons(), array($string))
+        );
     }
 
@@ -346,5 +352,5 @@
 
     /**
-     * Net amount payee receives for this transaction after deducting transaction fee.
+     * Net amount the merchant receives for this transaction in their receivable currency. Returned only in cross-currency use cases where a merchant bills a buyer in a non-primary currency for that buyer.
      *
      * @param \PayPal\Api\Currency $receivable_amount
@@ -359,5 +365,5 @@
 
     /**
-     * Net amount payee receives for this transaction after deducting transaction fee.
+     * Net amount the merchant receives for this transaction in their receivable currency. Returned only in cross-currency use cases where a merchant bills a buyer in a non-primary currency for that buyer.
      *
      * @return \PayPal\Api\Currency
@@ -369,5 +375,5 @@
 
     /**
-     * Exchange rate applied for this transaction.
+     * Exchange rate applied for this transaction. Returned only in cross-currency use cases where a merchant bills a buyer in a non-primary currency for that buyer.
      *
      * @param string $exchange_rate
@@ -382,5 +388,5 @@
 
     /**
-     * Exchange rate applied for this transaction.
+     * Exchange rate applied for this transaction. Returned only in cross-currency use cases where a merchant bills a buyer in a non-primary currency for that buyer.
      *
      * @return string
@@ -392,5 +398,5 @@
 
     /**
-     * Fraud Management Filter (FMF) details applied for the payment that could result in accept/deny/pending action.
+     * Fraud Management Filter (FMF) details applied for the payment that could result in accept, deny, or pending action. Returned in a payment response only if the merchant has enabled FMF in the profile settings and one of the fraud filters was triggered based on those settings. See [Fraud Management Filters Summary](/docs/classic/fmf/integration-guide/FMFSummary/) for more information.
      *
      * @param \PayPal\Api\FmfDetails $fmf_details
@@ -405,5 +411,5 @@
 
     /**
-     * Fraud Management Filter (FMF) details applied for the payment that could result in accept/deny/pending action.
+     * Fraud Management Filter (FMF) details applied for the payment that could result in accept, deny, or pending action. Returned in a payment response only if the merchant has enabled FMF in the profile settings and one of the fraud filters was triggered based on those settings. See [Fraud Management Filters Summary](/docs/classic/fmf/integration-guide/FMFSummary/) for more information.
      *
      * @return \PayPal\Api\FmfDetails
@@ -415,5 +421,5 @@
 
     /**
-     * Receipt id is 16 digit number payment identification number returned for guest users to identify the payment.
+     * Receipt id is a payment identification number returned for guest users to identify the payment.
      *
      * @param string $receipt_id
@@ -428,5 +434,5 @@
 
     /**
-     * Receipt id is 16 digit number payment identification number returned for guest users to identify the payment.
+     * Receipt id is a payment identification number returned for guest users to identify the payment.
      *
      * @return string
@@ -438,5 +444,5 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * ID of the payment resource on which this transaction is based.
      *
      * @param string $parent_payment
@@ -451,5 +457,5 @@
 
     /**
-     * ID of the Payment resource that this transaction is based on.
+     * ID of the payment resource on which this transaction is based.
      *
      * @return string
@@ -461,5 +467,51 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Response codes returned by the processor concerning the submitted payment. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @param \PayPal\Api\ProcessorResponse $processor_response
+     * 
+     * @return $this
+     */
+    public function setProcessorResponse($processor_response)
+    {
+        $this->processor_response = $processor_response;
+        return $this;
+    }
+
+    /**
+     * Response codes returned by the processor concerning the submitted payment. Only supported when the `payment_method` is set to `credit_card`.
+     *
+     * @return \PayPal\Api\ProcessorResponse
+     */
+    public function getProcessorResponse()
+    {
+        return $this->processor_response;
+    }
+
+    /**
+     * ID of the billing agreement used as reference to execute this transaction.
+     *
+     * @param string $billing_agreement_id
+     * 
+     * @return $this
+     */
+    public function setBillingAgreementId($billing_agreement_id)
+    {
+        $this->billing_agreement_id = $billing_agreement_id;
+        return $this;
+    }
+
+    /**
+     * ID of the billing agreement used as reference to execute this transaction.
+     *
+     * @return string
+     */
+    public function getBillingAgreementId()
+    {
+        return $this->billing_agreement_id;
+    }
+
+    /**
+     * Time of sale as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6)
      *
      * @param string $create_time
@@ -474,5 +526,5 @@
 
     /**
-     * Time the resource was created in UTC ISO8601 format.
+     * Time of sale as defined in [RFC 3339 Section 5.6](http://tools.ietf.org/html/rfc3339#section-5.6)
      *
      * @return string
@@ -507,5 +559,5 @@
 
     /**
-     * Retrieve details about a sale transaction by passing the sale_id in the request URI. This request returns only the sales that were created via the REST API.
+     * Shows details for a sale, by ID. Returns only sales that were created through the REST API.
      *
      * @param string $saleId
@@ -534,7 +586,8 @@
      * Refund a completed payment by passing the sale_id in the request URI. In addition, include an empty JSON payload in the request body for a full refund. For a partial refund, include an amount object in the request body.
      *
-     * @param Refund $refund
-     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
-     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @deprecated Please use #refundSale instead.
+     * @param Refund         $refund
+     * @param ApiContext     $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall   is the Rest Call Service that is used to make rest calls
      * @return Refund
      */
@@ -557,3 +610,28 @@
     }
 
+    /**
+     * Refunds a sale, by ID. For a full refund, include an empty payload in the JSON request body. For a partial refund, include an `amount` object in the JSON request body.
+     *
+     * @param RefundRequest $refundRequest
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return DetailedRefund
+     */
+    public function refundSale($refundRequest, $apiContext = null, $restCall = null)
+    {
+        ArgumentValidator::validate($this->getId(), "Id");
+        ArgumentValidator::validate($refundRequest, 'refundRequest');
+        $payLoad = $refundRequest->toJSON();
+        $json = self::executeCall(
+            "/v1/payments/sale/{$this->getId()}/refund",
+            "POST",
+            $payLoad,
+            null,
+            $apiContext,
+            $restCall
+        );
+        $ret = new DetailedRefund();
+        $ret->fromJson($json);
+        return $ret;
+    }
 }
Index: /lib/PayPal/Api/Search.php
===================================================================
--- /lib/PayPal/Api/Search.php	(revision 7220)
+++ /lib/PayPal/Api/Search.php	(revision 7221)
@@ -31,9 +31,10 @@
  * @property \PayPal\Api\number page_size
  * @property bool total_count_required
+ * @property bool archived
  */
 class Search extends PayPalModel
 {
     /**
-     * Initial letters of the email address.
+     * The initial letters of the email address.
      *
      * @param string $email
@@ -48,5 +49,5 @@
 
     /**
-     * Initial letters of the email address.
+     * The initial letters of the email address.
      *
      * @return string
@@ -58,5 +59,5 @@
 
     /**
-     * Initial letters of the recipient's first name.
+     * The initial letters of the recipient's first name.
      *
      * @param string $recipient_first_name
@@ -71,5 +72,5 @@
 
     /**
-     * Initial letters of the recipient's first name.
+     * The initial letters of the recipient's first name.
      *
      * @return string
@@ -81,5 +82,5 @@
 
     /**
-     * Initial letters of the recipient's last name.
+     * The initial letters of the recipient's last name.
      *
      * @param string $recipient_last_name
@@ -94,5 +95,5 @@
 
     /**
-     * Initial letters of the recipient's last name.
+     * The initial letters of the recipient's last name.
      *
      * @return string
@@ -104,5 +105,5 @@
 
     /**
-     * Initial letters of the recipient's business name.
+     * The initial letters of the recipient's business name.
      *
      * @param string $recipient_business_name
@@ -117,5 +118,5 @@
 
     /**
-     * Initial letters of the recipient's business name.
+     * The initial letters of the recipient's business name.
      *
      * @return string
@@ -127,5 +128,5 @@
 
     /**
-     * The invoice number that appears on the invoice.
+     * The invoice number.
      *
      * @param string $number
@@ -140,5 +141,5 @@
 
     /**
-     * The invoice number that appears on the invoice.
+     * The invoice number.
      *
      * @return string
@@ -150,5 +151,5 @@
 
     /**
-     * Status of the invoice.
+     * The invoice status.
      * Valid Values: ["DRAFT", "SENT", "PAID", "MARKED_AS_PAID", "CANCELLED", "REFUNDED", "PARTIALLY_REFUNDED", "MARKED_AS_REFUNDED"]
      *
@@ -164,5 +165,5 @@
 
     /**
-     * Status of the invoice.
+     * The invoice status.
      *
      * @return string
@@ -174,5 +175,5 @@
 
     /**
-     * Lower limit of total amount.
+     * The lower limit of the total amount.
      *
      * @param \PayPal\Api\Currency $lower_total_amount
@@ -187,5 +188,5 @@
 
     /**
-     * Lower limit of total amount.
+     * The lower limit of the total amount.
      *
      * @return \PayPal\Api\Currency
@@ -197,5 +198,5 @@
 
     /**
-     * Upper limit of total amount.
+     * The upper limit of total amount.
      *
      * @param \PayPal\Api\Currency $upper_total_amount
@@ -210,5 +211,5 @@
 
     /**
-     * Upper limit of total amount.
+     * The upper limit of total amount.
      *
      * @return \PayPal\Api\Currency
@@ -220,5 +221,5 @@
 
     /**
-     * Start invoice date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $start_invoice_date
@@ -233,5 +234,5 @@
 
     /**
-     * Start invoice date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -243,5 +244,5 @@
 
     /**
-     * End invoice date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $end_invoice_date
@@ -256,5 +257,5 @@
 
     /**
-     * End invoice date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -266,5 +267,5 @@
 
     /**
-     * Start invoice due date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start due date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $start_due_date
@@ -279,5 +280,5 @@
 
     /**
-     * Start invoice due date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start due date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -289,5 +290,5 @@
 
     /**
-     * End invoice due date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end due date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $end_due_date
@@ -302,5 +303,5 @@
 
     /**
-     * End invoice due date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end due date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -312,5 +313,5 @@
 
     /**
-     * Start invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start payment date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $start_payment_date
@@ -325,5 +326,5 @@
 
     /**
-     * Start invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start payment date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -335,5 +336,5 @@
 
     /**
-     * End invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end payment date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $end_payment_date
@@ -348,5 +349,5 @@
 
     /**
-     * End invoice payment date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end payment date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -358,5 +359,5 @@
 
     /**
-     * Start invoice creation date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start creation date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $start_creation_date
@@ -371,5 +372,5 @@
 
     /**
-     * Start invoice creation date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The start creation date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -381,5 +382,5 @@
 
     /**
-     * End invoice creation date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end creation date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @param string $end_creation_date
@@ -394,5 +395,5 @@
 
     /**
-     * End invoice creation date. Date format yyyy-MM-dd z, as defined in [ISO8601](http://tools.ietf.org/html/rfc3339#section-5.6).
+     * The end creation date for the invoice. Date format is *yyyy*-*MM*-*dd* *z*, as defined in [Internet Date/Time Format](http://tools.ietf.org/html/rfc3339#section-5.6).
      *
      * @return string
@@ -404,5 +405,5 @@
 
     /**
-     * Offset of the search results.
+     * The offset for the search results.
      *
      * @param \PayPal\Api\number $page
@@ -417,5 +418,5 @@
 
     /**
-     * Offset of the search results.
+     * The offset for the search results.
      *
      * @return \PayPal\Api\number
@@ -427,5 +428,5 @@
 
     /**
-     * Page size of the search results.
+     * The page size for the search results.
      *
      * @param \PayPal\Api\number $page_size
@@ -440,5 +441,5 @@
 
     /**
-     * Page size of the search results.
+     * The page size for the search results.
      *
      * @return \PayPal\Api\number
@@ -450,5 +451,5 @@
 
     /**
-     * A flag indicating whether total count is required in the response.
+     * Indicates whether the total count appears in the response. Default is `false`.
      *
      * @param bool $total_count_required
@@ -463,5 +464,5 @@
 
     /**
-     * A flag indicating whether total count is required in the response.
+     * Indicates whether the total count appears in the response. Default is `false`.
      *
      * @return bool
@@ -472,3 +473,26 @@
     }
 
+    /**
+     * A flag indicating whether search is on invoices archived by merchant. true - returns archived / false returns unarchived / null returns all.
+     *
+     * @param bool $archived
+     * 
+     * @return $this
+     */
+    public function setArchived($archived)
+    {
+        $this->archived = $archived;
+        return $this;
+    }
+
+    /**
+     * A flag indicating whether search is on invoices archived by merchant. true - returns archived / false returns unarchived / null returns all.
+     *
+     * @return bool
+     */
+    public function getArchived()
+    {
+        return $this->archived;
+    }
+
 }
Index: /lib/PayPal/Api/ShippingAddress.php
===================================================================
--- /lib/PayPal/Api/ShippingAddress.php	(revision 7220)
+++ /lib/PayPal/Api/ShippingAddress.php	(revision 7221)
@@ -2,6 +2,4 @@
 
 namespace PayPal\Api;
-
-use PayPal\Common\PayPalModel;
 
 /**
@@ -12,8 +10,5 @@
  * @package PayPal\Api
  *
- * @property string id
  * @property string recipient_name
- * @property bool default_address
- * @property bool preferred_address
  */
 class ShippingAddress extends Address
@@ -21,7 +16,7 @@
     /**
      * Address ID assigned in PayPal system.
-     *
+     * @deprecated Not publicly available
      * @param string $id
-     *
+     * 
      * @return $this
      */
@@ -34,5 +29,5 @@
     /**
      * Address ID assigned in PayPal system.
-     *
+     * @deprecated Not publicly available
      * @return string
      */
@@ -46,5 +41,5 @@
      *
      * @param string $recipient_name
-     *
+     * 
      * @return $this
      */
@@ -67,7 +62,7 @@
     /**
      * Default shipping address of the Payer.
-     *
+     * @deprecated Not publicly available
      * @param bool $default_address
-     *
+     * 
      * @return $this
      */
@@ -80,5 +75,5 @@
     /**
      * Default shipping address of the Payer.
-     *
+     * @deprecated Not publicly available
      * @return bool
      */
@@ -90,7 +85,7 @@
     /**
      * Shipping Address marked as preferred by Payer.
-     *
+     * @deprecated Not publicly available
      * @param bool $preferred_address
-     *
+     * 
      * @return $this
      */
@@ -103,5 +98,5 @@
     /**
      * Shipping Address marked as preferred by Payer.
-     *
+     * @deprecated Not publicly available
      * @return bool
      */
Index: /lib/PayPal/Api/ShippingCost.php
===================================================================
--- /lib/PayPal/Api/ShippingCost.php	(revision 7220)
+++ /lib/PayPal/Api/ShippingCost.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class ShippingCost
  *
- * Shipping cost in percent or amount.
+ * Shipping cost, as a percent or an amount.
  *
  * @package PayPal\Api
@@ -18,5 +18,5 @@
 {
     /**
-     * Shipping cost in amount. Range of 0 to 999999.99.
+     * The shipping cost, as an amount. Valid range is from 0 to 999999.99.
      *
      * @param \PayPal\Api\Currency $amount
@@ -31,5 +31,5 @@
 
     /**
-     * Shipping cost in amount. Range of 0 to 999999.99.
+     * The shipping cost, as an amount. Valid range is from 0 to 999999.99.
      *
      * @return \PayPal\Api\Currency
@@ -41,5 +41,5 @@
 
     /**
-     * Tax percentage on shipping amount.
+     * The tax percentage on the shipping amount.
      *
      * @param \PayPal\Api\Tax $tax
@@ -54,5 +54,5 @@
 
     /**
-     * Tax percentage on shipping amount.
+     * The tax percentage on the shipping amount.
      *
      * @return \PayPal\Api\Tax
Index: /lib/PayPal/Api/ShippingInfo.php
===================================================================
--- /lib/PayPal/Api/ShippingInfo.php	(revision 7220)
+++ /lib/PayPal/Api/ShippingInfo.php	(revision 7221)
@@ -21,5 +21,5 @@
 {
     /**
-     * First name of the invoice recipient. 30 characters max.
+     * The invoice recipient first name. Maximum length is 30 characters.
      *
      * @param string $first_name
@@ -34,5 +34,5 @@
 
     /**
-     * First name of the invoice recipient. 30 characters max.
+     * The invoice recipient first name. Maximum length is 30 characters.
      *
      * @return string
@@ -44,5 +44,5 @@
 
     /**
-     * Last name of the invoice recipient. 30 characters max.
+     * The invoice recipient last name. Maximum length is 30 characters.
      *
      * @param string $last_name
@@ -57,5 +57,5 @@
 
     /**
-     * Last name of the invoice recipient. 30 characters max.
+     * The invoice recipient last name. Maximum length is 30 characters.
      *
      * @return string
@@ -67,5 +67,5 @@
 
     /**
-     * Company business name of the invoice recipient. 100 characters max.
+     * The invoice recipient company business name. Maximum length is 100 characters.
      *
      * @param string $business_name
@@ -80,5 +80,5 @@
 
     /**
-     * Company business name of the invoice recipient. 100 characters max.
+     * The invoice recipient company business name. Maximum length is 100 characters.
      *
      * @return string
@@ -112,4 +112,26 @@
 
     /**
+     * @deprecated Not used anymore
+     *
+     * @param string $email
+     * @return $this
+     */
+    public function setEmail($email)
+    {
+        $this->email = $email;
+        return $this;
+    }
+
+    /**
+     * @deprecated Not used anymore
+     *
+     * @return string
+     */
+    public function getEmail()
+    {
+        return $this->email;
+    }
+
+    /**
      * Address of the invoice recipient.
      *
@@ -125,5 +147,5 @@
 
     /**
-     * Address of the invoice recipient.
+     * The invoice recipient address.
      *
      * @return \PayPal\Api\InvoiceAddress
Index: /lib/PayPal/Api/Tax.php
===================================================================
--- /lib/PayPal/Api/Tax.php	(revision 7220)
+++ /lib/PayPal/Api/Tax.php	(revision 7221)
@@ -22,5 +22,5 @@
 {
     /**
-     * Identifier of the resource.
+     * The resource ID.
      *
      * @param string $id
@@ -35,5 +35,5 @@
 
     /**
-     * Identifier of the resource.
+     * The resource ID.
      *
      * @return string
@@ -45,5 +45,5 @@
 
     /**
-     * Name of the tax. 10 characters max.
+     * The tax name. Maximum length is 20 characters.
      *
      * @param string $name
@@ -58,5 +58,5 @@
 
     /**
-     * Name of the tax. 10 characters max.
+     * The tax name. Maximum length is 20 characters.
      *
      * @return string
@@ -68,5 +68,5 @@
 
     /**
-     * Rate of the specified tax. Range of 0.001 to 99.999.
+     * The rate of the specified tax. Valid range is from 0.001 to 99.999.
      *
      * @param string|double $percent
@@ -83,5 +83,5 @@
 
     /**
-     * Rate of the specified tax. Range of 0.001 to 99.999.
+     * The rate of the specified tax. Valid range is from 0.001 to 99.999.
      *
      * @return string
@@ -93,5 +93,5 @@
 
     /**
-     * Tax in the form of money. Cannot be specified in a request.
+     * The tax as a monetary amount. Cannot be specified in a request.
      *
      * @param \PayPal\Api\Currency $amount
@@ -106,5 +106,5 @@
 
     /**
-     * Tax in the form of money. Cannot be specified in a request.
+     * The tax as a monetary amount. Cannot be specified in a request.
      *
      * @return \PayPal\Api\Currency
Index: /lib/PayPal/Api/Transaction.php
===================================================================
--- /lib/PayPal/Api/Transaction.php	(revision 7220)
+++ /lib/PayPal/Api/Transaction.php	(revision 7221)
@@ -10,6 +10,4 @@
  * @package PayPal\Api
  *
- * @property string purchase_unit_reference_id
- * @property Transaction transactions
  */
 class Transaction extends TransactionBase
@@ -43,5 +41,5 @@
      *
      * @param string $purchase_unit_reference_id
-     *
+     * @deprecated Use #setReferenceId instead
      * @return $this
      */
@@ -55,4 +53,5 @@
      * Identifier to the purchase unit corresponding to this sale transaction
      *
+     * @deprecated Use #getReferenceId instead
      * @return string
      */
Index: /lib/PayPal/Api/TransactionBase.php
===================================================================
--- /lib/PayPal/Api/TransactionBase.php	(revision 7220)
+++ /lib/PayPal/Api/TransactionBase.php	(revision 7221)
@@ -2,7 +2,4 @@
 
 namespace PayPal\Api;
-
-use PayPal\Common\PayPalModel;
-use PayPal\Rest\ApiContext;
 
 /**
@@ -21,5 +18,5 @@
      * 
      *
-     * @param \PayPal\Api\RelatedResources $related_resources
+     * @param \PayPal\Api\RelatedResources[] $related_resources
      * 
      * @return $this
Index: /lib/PayPal/Api/Transactions.php
===================================================================
--- /lib/PayPal/Api/Transactions.php	(revision 7220)
+++ /lib/PayPal/Api/Transactions.php	(revision 7221)
@@ -4,5 +4,4 @@
 
 use PayPal\Common\PayPalModel;
-use PayPal\Rest\ApiContext;
 
 /**
Index: /lib/PayPal/Api/WebProfile.php
===================================================================
--- /lib/PayPal/Api/WebProfile.php	(revision 7220)
+++ /lib/PayPal/Api/WebProfile.php	(revision 7221)
@@ -4,13 +4,12 @@
 
 use PayPal\Common\PayPalResourceModel;
-use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\CreateProfileResponse;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 
 /**
  * Class WebProfile
  *
- * Payment Web experience profile resource
+ * Payment web experience profile resource
  *
  * @package PayPal\Api
@@ -18,4 +17,5 @@
  * @property string id
  * @property string name
+ * @property bool temporary
  * @property \PayPal\Api\FlowConfig flow_config
  * @property \PayPal\Api\InputFields input_fields
@@ -25,6 +25,5 @@
 {
     /**
-     * ID of the web experience profile.
-     * 
+     * The unique ID of the web experience profile.
      *
      * @param string $id
@@ -39,5 +38,5 @@
 
     /**
-     * ID of the web experience profile.
+     * The unique ID of the web experience profile.
      *
      * @return string
@@ -49,6 +48,5 @@
 
     /**
-     * Name of the web experience profile.
-     * 
+     * The web experience profile name. Unique for a specified merchant's profiles.
      *
      * @param string $name
@@ -63,5 +61,5 @@
 
     /**
-     * Name of the web experience profile.
+     * The web experience profile name. Unique for a specified merchant's profiles.
      *
      * @return string
@@ -73,6 +71,28 @@
 
     /**
+     * Indicates whether the profile persists for three hours or permanently. Set to `false` to persist the profile permanently. Set to `true` to persist the profile for three hours.
+     *
+     * @param bool $temporary
+     * 
+     * @return $this
+     */
+    public function setTemporary($temporary)
+    {
+        $this->temporary = $temporary;
+        return $this;
+    }
+
+    /**
+     * Indicates whether the profile persists for three hours or permanently. Set to `false` to persist the profile permanently. Set to `true` to persist the profile for three hours.
+     *
+     * @return bool
+     */
+    public function getTemporary()
+    {
+        return $this->temporary;
+    }
+
+    /**
      * Parameters for flow configuration.
-     * 
      *
      * @param \PayPal\Api\FlowConfig $flow_config
@@ -98,5 +118,4 @@
     /**
      * Parameters for input fields customization.
-     * 
      *
      * @param \PayPal\Api\InputFields $input_fields
@@ -122,5 +141,4 @@
     /**
      * Parameters for style and presentation.
-     * 
      *
      * @param \PayPal\Api\Presentation $presentation
@@ -145,5 +163,5 @@
 
     /**
-     * Create a web experience profile by passing the name of the profile and other profile details in the request JSON to the request URI.
+     * Creates a web experience profile. Pass the profile name and details in the JSON request body.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -168,5 +186,5 @@
 
     /**
-     * Update a web experience profile by passing the ID of the profile to the request URI. In addition, pass the profile details in the request JSON. If your request does not include values for all profile detail fields, the previously set values for the omitted fields are removed by this operation.
+     * Updates a web experience profile. Pass the ID of the profile to the request URI and pass the profile details in the JSON request body. If your request omits any profile detail fields, the operation removes the previously set values for those fields.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -190,5 +208,5 @@
 
     /**
-     * Partially update an existing web experience profile by passing the ID of the profile to the request URI. In addition, pass a patch object in the request JSON that specifies the operation to perform, path of the profile location to update, and a new value if needed to complete the operation.
+     * Partially-updates a web experience profile. Pass the profile ID to the request URI. Pass a patch object with the operation, path of the profile location to update, and, if needed, a new value to complete the operation in the JSON request body.
      *
      * @param Patch[] $patch
@@ -218,5 +236,5 @@
 
     /**
-     * Retrieve the details of a particular web experience profile by passing the ID of the profile to the request URI.
+     * Shows details for a web experience profile, by ID.
      *
      * @param string $profileId
@@ -243,5 +261,5 @@
 
     /**
-     * Lists all web experience profiles that exist for a merchant (or subject).
+     * Lists all web experience profiles for a merchant or subject.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -264,5 +282,5 @@
 
     /**
-     * Delete an existing web experience profile by passing the profile ID to the request URI.
+     * Deletes a web experience profile, by ID.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
Index: /lib/PayPal/Api/Webhook.php
===================================================================
--- /lib/PayPal/Api/Webhook.php	(revision 7220)
+++ /lib/PayPal/Api/Webhook.php	(revision 7221)
@@ -7,5 +7,4 @@
 use PayPal\Api\WebhookList;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 use PayPal\Validation\UrlValidator;
 
@@ -13,5 +12,5 @@
  * Class Webhook
  *
- * Represents Webhook resource.
+ * One or more webhook objects.
  *
  * @package PayPal\Api
@@ -24,5 +23,5 @@
 {
     /**
-     * Identifier of the webhook resource.
+     * The ID of the webhook.
      *
      * @param string $id
@@ -37,5 +36,5 @@
 
     /**
-     * Identifier of the webhook resource.
+     * The ID of the webhook.
      *
      * @return string
@@ -47,5 +46,5 @@
 
     /**
-     * Webhook notification endpoint url.
+     * The URL that is configured to listen on `localhost` for incoming `POST` notification messages that contain event information.
      *
      * @param string $url
@@ -61,5 +60,5 @@
 
     /**
-     * Webhook notification endpoint url.
+     * The URL that is configured to listen on `localhost` for incoming `POST` notification messages that contain event information.
      *
      * @return string
@@ -71,5 +70,5 @@
 
     /**
-     * List of Webhooks event-types.
+     * A list of up to ten events to which to subscribe your webhook. To subscribe to all events including new events as they are added, specify the asterisk (`*`) wildcard. To replace the `event_types` array, specify the `*` wildcard. To see all supported events, [list available events](#available-event-type.list).
      *
      * @param \PayPal\Api\WebhookEventType[] $event_types
@@ -84,5 +83,5 @@
 
     /**
-     * List of Webhooks event-types.
+     * A list of up to ten events to which to subscribe your webhook. To subscribe to all events including new events as they are added, specify the asterisk (`*`) wildcard. To replace the `event_types` array, specify the `*` wildcard. To see all supported events, [list available events](#available-event-type.list).
      *
      * @return \PayPal\Api\WebhookEventType[]
@@ -124,5 +123,5 @@
 
     /**
-     * Creates the Webhook for the application associated with the access token.
+     * Subscribes your webhook listener to events. A successful call returns a [`webhook`](/docs/api/webhooks/#definition-webhook) object, which includes the webhook ID for later use.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -146,5 +145,5 @@
 
     /**
-     * Retrieves the Webhook identified by webhook_id for the application associated with access token.
+     * Shows details for a webhook, by ID.
      *
      * @param string $webhookId
@@ -173,4 +172,6 @@
      * Retrieves all Webhooks for the application associated with access token.
      *
+     * @deprecated Please use Webhook#getAllWithParams instead.
+     *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
      * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
@@ -179,7 +180,24 @@
     public static function getAll($apiContext = null, $restCall = null)
     {
+        return self::getAllWithParams(array(), $apiContext, $restCall);
+    }
+
+    /**
+     * Lists all webhooks for an app.
+     *
+     * @param array $params
+     * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
+     * @param PayPalRestCall $restCall is the Rest Call Service that is used to make rest calls
+     * @return WebhookList
+     */
+    public static function getAllWithParams($params = array(), $apiContext = null, $restCall = null)
+    {
+        ArgumentValidator::validate($params, 'params');
         $payLoad = "";
-        $json = self::executeCall(
-            "/v1/notifications/webhooks",
+        $allowedParams = array(
+            'anchor_type' => 1,
+        );
+        $json = self::executeCall(
+            "/v1/notifications/webhooks?" . http_build_query(array_intersect_key($params, $allowedParams)),
             "GET",
             $payLoad,
@@ -194,5 +212,5 @@
 
     /**
-     * Updates the Webhook identified by webhook_id for the application associated with access token.
+     * Replaces webhook fields with new values. Pass a `json_patch` object with `replace` operation and `path`, which is `/url` for a URL or `/event_types` for events. The `value` is either the URL or a list of events.
      *
      * @param PatchRequest $patchRequest
@@ -219,5 +237,5 @@
 
     /**
-     * Deletes the Webhook identified by webhook_id for the application associated with access token.
+     * Deletes a webhook, by ID.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
Index: /lib/PayPal/Api/WebhookEvent.php
===================================================================
--- /lib/PayPal/Api/WebhookEvent.php	(revision 7220)
+++ /lib/PayPal/Api/WebhookEvent.php	(revision 7221)
@@ -5,7 +5,7 @@
 use PayPal\Common\PayPalResourceModel;
 use PayPal\Exception\PayPalConnectionException;
-use PayPal\Validation\ArgumentValidator;
 use PayPal\Rest\ApiContext;
 use PayPal\Transport\PayPalRestCall;
+use PayPal\Validation\ArgumentValidator;
 use PayPal\Validation\JsonValidator;
 
@@ -13,5 +13,5 @@
  * Class WebhookEvent
  *
- * Represents a Webhooks event
+ * A webhook event notification.
  *
  * @package PayPal\Api
@@ -20,12 +20,15 @@
  * @property string create_time
  * @property string resource_type
+ * @property string event_version
  * @property string event_type
  * @property string summary
- * @property mixed resource
+ * @property \PayPal\Common\PayPalModel resource
+ * @property string status
+ * @property mixed[] transmissions
  */
 class WebhookEvent extends PayPalResourceModel
 {
     /**
-     * Identifier of the Webhooks event resource.
+     * The ID of the webhook event notification.
      *
      * @param string $id
@@ -40,5 +43,5 @@
 
     /**
-     * Identifier of the Webhooks event resource.
+     * The ID of the webhook event notification.
      *
      * @return string
@@ -50,5 +53,5 @@
 
     /**
-     * Time the resource was created.
+     * The date and time when the webhook event notification was created.
      *
      * @param string $create_time
@@ -63,5 +66,5 @@
 
     /**
-     * Time the resource was created.
+     * The date and time when the webhook event notification was created.
      *
      * @return string
@@ -73,5 +76,5 @@
 
     /**
-     * Name of the resource contained in resource element.
+     * The name of the resource related to the webhook notification event.
      *
      * @param string $resource_type
@@ -86,5 +89,5 @@
 
     /**
-     * Name of the resource contained in resource element.
+     * The name of the resource related to the webhook notification event.
      *
      * @return string
@@ -96,5 +99,28 @@
 
     /**
-     * Name of the event type that occurred on resource, identified by data_resource element, to trigger the Webhooks event.
+     * The version of the event.
+     *
+     * @param string $event_version
+     * 
+     * @return $this
+     */
+    public function setEventVersion($event_version)
+    {
+        $this->event_version = $event_version;
+        return $this;
+    }
+
+    /**
+     * The version of the event.
+     *
+     * @return string
+     */
+    public function getEventVersion()
+    {
+        return $this->event_version;
+    }
+
+    /**
+     * The event that triggered the webhook event notification.
      *
      * @param string $event_type
@@ -109,5 +135,5 @@
 
     /**
-     * Name of the event type that occurred on resource, identified by data_resource element, to trigger the Webhooks event.
+     * The event that triggered the webhook event notification.
      *
      * @return string
@@ -119,5 +145,5 @@
 
     /**
-     * A summary description of the event. E.g. A successful payment authorization was created for $$
+     * A summary description for the event notification. For example, `A payment authorization was created.`
      *
      * @param string $summary
@@ -132,5 +158,5 @@
 
     /**
-     * A summary description of the event. E.g. A successful payment authorization was created for $$
+     * A summary description for the event notification. For example, `A payment authorization was created.`
      *
      * @return string
@@ -142,5 +168,5 @@
 
     /**
-     * This contains the resource that is identified by resource_type element.
+     * The resource that triggered the webhook event notification.
      *
      * @param \PayPal\Common\PayPalModel $resource
@@ -155,5 +181,5 @@
 
     /**
-     * This contains the resource that is identified by resource_type element.
+     * The resource that triggered the webhook event notification.
      *
      * @return \PayPal\Common\PayPalModel
@@ -171,4 +197,6 @@
      *
      * NOTE: PLEASE DO NOT USE THE DATA PROVIDED IN WEBHOOK DIRECTLY, AS HACKER COULD PASS IN FAKE DATA. IT IS VERY IMPORTANT THAT YOU RETRIEVE THE ID AND MAKE A SEPARATE CALL TO PAYPAL API.
+     *
+     * @deprecated Please use `VerifyWebhookSignature->post()` instead.
      *
      * @param string     $body
@@ -228,5 +256,5 @@
 
     /**
-     * Resends the Webhooks event resource identified by event_id.
+     * Resends a webhook event notification, by ID. Any pending notifications are not resent.
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
@@ -251,5 +279,5 @@
 
     /**
-     * Retrieves the list of Webhooks events resources for the application associated with token. The developers can use it to see list of past webhooks events.
+     * Lists webhook event notifications. Use query parameters to filter the response.
      *
      * @param array $params
@@ -266,4 +294,6 @@
           'start_time' => 1,
           'end_time' => 1,
+          'transaction_id' => 1,
+          'event_type' => 1,
       );
         $json = self::executeCall(
Index: /lib/PayPal/Api/WebhookEventList.php
===================================================================
--- /lib/PayPal/Api/WebhookEventList.php	(revision 7220)
+++ /lib/PayPal/Api/WebhookEventList.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class WebhookEventList
  *
- * List of Webhooks event resources
+ * List of webhooks events.
  *
  * @package PayPal\Api
@@ -19,5 +19,5 @@
 {
     /**
-     * A list of Webhooks event resources
+     * A list of webhooks events.
      *
      * @param \PayPal\Api\WebhookEvent[] $events
@@ -32,5 +32,5 @@
 
     /**
-     * A list of Webhooks event resources
+     * A list of webhooks events.
      *
      * @return \PayPal\Api\WebhookEvent[]
@@ -72,5 +72,5 @@
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * The number of items in each range of results. Note that the response might have fewer items than the requested `page_size` value.
      *
      * @param int $count
@@ -85,5 +85,5 @@
 
     /**
-     * Number of items returned in each range of results. Note that the last results range could have fewer items than the requested number of items.
+     * The number of items in each range of results. Note that the response might have fewer items than the requested `page_size` value.
      *
      * @return int
Index: /lib/PayPal/Api/WebhookEventType.php
===================================================================
--- /lib/PayPal/Api/WebhookEventType.php	(revision 7220)
+++ /lib/PayPal/Api/WebhookEventType.php	(revision 7221)
@@ -5,12 +5,11 @@
 use PayPal\Common\PayPalResourceModel;
 use PayPal\Validation\ArgumentValidator;
-use PayPal\Api\WebhookEventList;
+use PayPal\Api\WebhookEventTypeList;
 use PayPal\Rest\ApiContext;
-use PayPal\Transport\PayPalRestCall;
 
 /**
  * Class WebhookEventType
  *
- * Contains the information for a Webhooks event-type
+ * A list of events.
  *
  * @package PayPal\Api
@@ -18,9 +17,10 @@
  * @property string name
  * @property string description
+ * @property string status
  */
 class WebhookEventType extends PayPalResourceModel
 {
     /**
-     * Unique event-type name.
+     * The unique event name.
      *
      * @param string $name
@@ -35,5 +35,5 @@
 
     /**
-     * Unique event-type name.
+     * The unique event name.
      *
      * @return string
@@ -45,5 +45,5 @@
 
     /**
-     * Human readable description of the event-type
+     * A human-readable description of the event.
      *
      * @param string $description
@@ -58,5 +58,5 @@
 
     /**
-     * Human readable description of the event-type
+     * A human-readable description of the event.
      *
      * @return string
@@ -68,5 +68,28 @@
 
     /**
-     * Retrieves the list of events-types subscribed by the given Webhook.
+     * The status of a webhook event.
+     *
+     * @param string $status
+     * 
+     * @return $this
+     */
+    public function setStatus($status)
+    {
+        $this->status = $status;
+        return $this;
+    }
+
+    /**
+     * The status of a webhook event.
+     *
+     * @return string
+     */
+    public function getStatus()
+    {
+        return $this->status;
+    }
+
+    /**
+     * Lists event subscriptions for a webhook, by ID.
      *
      * @param string $webhookId
@@ -93,5 +116,5 @@
 
     /**
-     * Retrieves the master list of available Webhooks events-types resources for any webhook to subscribe to.
+     * Lists available events to which any webhook can subscribe. For a list of supported events, see [Webhook events](/docs/integration/direct/rest/webhooks/webhook-events/).
      *
      * @param ApiContext $apiContext is the APIContext for this call. It can be used to pass dynamic configuration and credentials.
Index: /lib/PayPal/Api/WebhookEventTypeList.php
===================================================================
--- /lib/PayPal/Api/WebhookEventTypeList.php	(revision 7220)
+++ /lib/PayPal/Api/WebhookEventTypeList.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class WebhookEventTypeList
  *
- * List of Webhooks event-types
+ * List of webhook events.
  *
  * @package PayPal\Api
@@ -17,5 +17,5 @@
 {
     /**
-     * A list of Webhooks event-types
+     * A list of webhook events.
      *
      * @param \PayPal\Api\WebhookEventType[] $event_types
@@ -30,5 +30,5 @@
 
     /**
-     * A list of Webhooks event-types
+     * A list of webhook events.
      *
      * @return \PayPal\Api\WebhookEventType[]
Index: /lib/PayPal/Api/WebhookList.php
===================================================================
--- /lib/PayPal/Api/WebhookList.php	(revision 7220)
+++ /lib/PayPal/Api/WebhookList.php	(revision 7221)
@@ -8,5 +8,5 @@
  * Class WebhookList
  *
- * List of Webhooks
+ * List of webhooks.
  *
  * @package PayPal\Api
@@ -17,5 +17,5 @@
 {
     /**
-     * A list of Webhooks
+     * A list of webhooks.
      *
      * @param \PayPal\Api\Webhook[] $webhooks
@@ -30,5 +30,5 @@
 
     /**
-     * A list of Webhooks
+     * A list of webhooks.
      *
      * @return \PayPal\Api\Webhook[]
Index: /lib/PayPal/Auth/OAuthTokenCredential.php
===================================================================
--- /lib/PayPal/Auth/OAuthTokenCredential.php	(revision 7220)
+++ /lib/PayPal/Auth/OAuthTokenCredential.php	(revision 7221)
@@ -32,12 +32,5 @@
      * @var int $expiryBufferTime
      */
-    private static $expiryBufferTime = 120;
-
-    /**
-     * Private Variable
-     *
-     * @var \PayPal\Core\PayPalLoggingManager $logger
-     */
-    private $logger;
+    public static $expiryBufferTime = 120;
 
     /**
@@ -94,5 +87,4 @@
         $this->clientSecret = $clientSecret;
         $this->cipher = new Cipher($this->clientSecret);
-        $this->logger = PayPalLoggingManager::getInstance(__CLASS__);
     }
 
@@ -126,4 +118,8 @@
     public function getAccessToken($config)
     {
+        // Check if we already have accessToken in Cache
+        if ($this->accessToken && (time() - $this->tokenCreateTime) < ($this->tokenExpiresIn - self::$expiryBufferTime)) {
+            return $this->accessToken;
+        }
         // Check for persisted data first
         $token = AuthorizationCache::pull($config, $this->clientId);
@@ -199,4 +195,6 @@
             return $response['refresh_token'];
         }
+
+        return null;
     }
 
@@ -204,5 +202,5 @@
      * Updates Access Token based on given input
      *
-     * @param      $config
+     * @param array $config
      * @param string|null $refreshToken
      * @return string
@@ -229,4 +227,9 @@
         $httpConfig = new PayPalHttpConfig(null, 'POST', $config);
 
+        // if proxy set via config, add it
+        if (!empty($config['http.Proxy'])) {
+            $httpConfig->setHttpProxy($config['http.Proxy']);
+        }
+
         $handlers = array(self::$AUTH_HANDLER);
 
@@ -252,4 +255,5 @@
      *
      * @param array $config
+     * @param null|string $refreshToken
      * @return null
      * @throws PayPalConnectionException
@@ -270,7 +274,5 @@
             $this->accessToken = null;
             $this->tokenExpiresIn = null;
-            $this->logger->warning(
-                "Could not generate new Access token. Invalid response from server: "
-            );
+            PayPalLoggingManager::getInstance(__CLASS__)->warning("Could not generate new Access token. Invalid response from server: ");
             throw new PayPalConnectionException(null, "Could not generate new Access token. Invalid response from server: ");
         } else {
Index: /lib/PayPal/Cache/AuthorizationCache.php
===================================================================
--- /lib/PayPal/Cache/AuthorizationCache.php	(revision 7220)
+++ /lib/PayPal/Cache/AuthorizationCache.php	(revision 7221)
@@ -21,5 +21,7 @@
     {
         // Return if not enabled
-        if (!self::isEnabled($config)) { return null; }
+        if (!self::isEnabled($config)) {
+            return null;
+        }
 
         $tokens = null;
@@ -33,5 +35,5 @@
                     // If client Id is found, just send in that data only
                     return $tokens[$clientId];
-                } else if ($clientId) {
+                } elseif ($clientId) {
                     // If client Id is provided, but no key in persisted data found matching it.
                     return null;
@@ -55,5 +57,7 @@
     {
         // Return if not enabled
-        if (!self::isEnabled($config)) { return; }
+        if (!self::isEnabled($config)) {
+            return;
+        }
 
         $cachePath = self::cachePath($config);
@@ -75,5 +79,5 @@
             );
         }
-        if(!file_put_contents($cachePath, json_encode($tokens))) {
+        if (!file_put_contents($cachePath, json_encode($tokens))) {
             throw new \Exception("Failed to write cache");
         };
@@ -89,5 +93,5 @@
     {
         $value = self::getConfigValue('cache.enabled', $config);
-        return empty($value) ? false : ((trim($value) == true || trim($value) == 'true') ?  true : false);
+        return empty($value) ? false : ((trim($value) == true || trim($value) == 'true'));
     }
     
@@ -117,5 +121,3 @@
         return (array_key_exists($key, $config)) ? trim($config[$key]) : null;
     }
-
-
 }
Index: /lib/PayPal/Common/ArrayUtil.php
===================================================================
--- /lib/PayPal/Common/ArrayUtil.php	(revision 7220)
+++ /lib/PayPal/Common/ArrayUtil.php	(revision 7221)
@@ -11,5 +11,4 @@
 class ArrayUtil
 {
-
     /**
      *
Index: /lib/PayPal/Common/PayPalModel.php
===================================================================
--- /lib/PayPal/Common/PayPalModel.php	(revision 7220)
+++ /lib/PayPal/Common/PayPalModel.php	(revision 7221)
@@ -2,6 +2,6 @@
 
 namespace PayPal\Common;
+
 use PayPal\Validation\JsonValidator;
-use PayPal\Validation\ModelAccessorValidator;
 
 /**
@@ -39,5 +39,5 @@
      * to do $obj->fromJson($data) later after creating the object.
      *
-     * @param null $data
+     * @param array|string|null $data
      * @throws \InvalidArgumentException
      */
@@ -68,5 +68,7 @@
     {
         // Return Null if Null
-        if ($data === null) { return null; }
+        if ($data === null) {
+            return null;
+        }
 
         if (is_a($data, get_class(new \stdClass()))) {
@@ -123,5 +125,4 @@
     public function __set($key, $value)
     {
-        ModelAccessorValidator::validate($this, $this->convertToCamelCase($key));
         if (!is_array($value) && $value === null) {
             $this->__unset($key);
@@ -175,7 +176,7 @@
             if ($v instanceof PayPalModel) {
                 $ret[$k] = $v->toArray();
-            } else if (sizeof($v) <= 0 && is_array($v)) {
+            } elseif (is_array($v) && sizeof($v) <= 0) {
                 $ret[$k] = array();
-            } else if (is_array($v)) {
+            } elseif (is_array($v)) {
                 $ret[$k] = $this->_convertToArray($v);
             } else {
@@ -206,7 +207,7 @@
                 if (is_array($v)) {
                     // Determine the class of the object
-                    if (($clazz = ReflectionUtil::getPropertyClass(get_class($this), $k)) != null){
+                    if (($clazz = ReflectionUtil::getPropertyClass(get_class($this), $k)) != null) {
                         // If the value is an associative array, it means, its an object. Just make recursive call to it.
-                        if (empty($v)){
+                        if (empty($v)) {
                             if (ReflectionUtil::isPropertyClassArray(get_class($this), $k)) {
                                 // It means, it is an array of objects.
@@ -250,7 +251,7 @@
     private function assignValue($key, $value)
     {
-        // If we find the getter setter, use that, otherwise use magic method.
-        if (ModelAccessorValidator::validate($this, $this->convertToCamelCase($key))) {
-            $setter = "set" . $this->convertToCamelCase($key);
+        $setter = 'set'. $this->convertToCamelCase($key);
+        // If we find the setter, use that, otherwise use magic method.
+        if (method_exists($this, $setter)) {
             $this->$setter($value);
         } else {
Index: /lib/PayPal/Common/PayPalResourceModel.php
===================================================================
--- /lib/PayPal/Common/PayPalResourceModel.php	(revision 7220)
+++ /lib/PayPal/Common/PayPalResourceModel.php	(revision 7221)
@@ -2,9 +2,8 @@
 
 namespace PayPal\Common;
-use PayPal\Handler\IPayPalHandler;
+
 use PayPal\Rest\ApiContext;
 use PayPal\Rest\IResource;
 use PayPal\Transport\PayPalRestCall;
-
 
 /**
@@ -43,7 +42,9 @@
     public function getLink($rel)
     {
-        foreach ($this->links as $link) {
-            if ($link->getRel() == $rel) {
-                return $link->getHref();
+        if (is_array($this->links)) {
+            foreach ($this->links as $link) {
+                if ($link->getRel() == $rel) {
+                    return $link->getHref();
+                }
             }
         }
@@ -104,3 +105,16 @@
         return $json;
     }
-} 
+
+    /**
+     * Updates Access Token using long lived refresh token
+     *
+     * @param string|null $refreshToken
+     * @param ApiContext $apiContext
+     * @return void
+     */
+    public function updateAccessToken($refreshToken, $apiContext)
+    {
+        $apiContext = $apiContext ? $apiContext : new ApiContext(self::$credential);
+        $apiContext->getCredential()->updateAccessToken($apiContext->getConfig(), $refreshToken);
+    }
+}
Index: /lib/PayPal/Common/PayPalUserAgent.php
===================================================================
--- /lib/PayPal/Common/PayPalUserAgent.php	(revision 7220)
+++ /lib/PayPal/Common/PayPalUserAgent.php	(revision 7221)
@@ -22,8 +22,6 @@
     public static function getValue($sdkName, $sdkVersion)
     {
-
         $featureList = array(
-            'lang=PHP',
-            'v=' . PHP_VERSION,
+            'platform-ver=' . PHP_VERSION,
             'bit=' . self::_getPHPBit(),
             'os=' . str_replace(' ', '_', php_uname('s') . ' ' . php_uname('r')),
@@ -32,5 +30,5 @@
         if (defined('OPENSSL_VERSION_TEXT')) {
             $opensslVersion = explode(' ', OPENSSL_VERSION_TEXT);
-            $featureList[] = 'openssl=' . $opensslVersion[1];
+            $featureList[] = 'crypto-lib-ver=' . $opensslVersion[1];
         }
         if (function_exists('curl_version')) {
@@ -38,5 +36,5 @@
             $featureList[] = 'curl=' . $curlVersion['version'];
         }
-        return sprintf("PayPalSDK/%s %s (%s)", $sdkName, $sdkVersion, implode(';', $featureList));
+        return sprintf("PayPalSDK/%s %s (%s)", $sdkName, $sdkVersion, implode('; ', $featureList));
     }
 
Index: /lib/PayPal/Common/ReflectionUtil.php
===================================================================
--- /lib/PayPal/Common/ReflectionUtil.php	(revision 7220)
+++ /lib/PayPal/Common/ReflectionUtil.php	(revision 7221)
@@ -2,4 +2,5 @@
 
 namespace PayPal\Common;
+
 use PayPal\Exception\PayPalConfigurationException;
 
@@ -113,5 +114,5 @@
 
         // todo: smarter regexp
-        if ( !preg_match_all(
+        if (!preg_match_all(
             '~\@([^\s@\(]+)[\t ]*(?:\(?([^\n@]+)\)?)?~i',
             $refl->getDocComment(),
@@ -121,5 +122,5 @@
         }
         foreach ($annots[1] as $i => $annot) {
-            $annotations[strtolower($annot)] = empty($annots[2][$i]) ? TRUE : rtrim($annots[2][$i], " \t\n\r)");
+            $annotations[strtolower($annot)] = empty($annots[2][$i]) ? true : rtrim($annots[2][$i], " \t\n\r)");
         }
 
Index: /lib/PayPal/Converter/FormatConverter.php
===================================================================
--- /lib/PayPal/Converter/FormatConverter.php	(revision 7220)
+++ /lib/PayPal/Converter/FormatConverter.php	(revision 7221)
@@ -3,6 +3,6 @@
 namespace PayPal\Converter;
 
-class FormatConverter {
-
+class FormatConverter
+{
     /**
      * Format the data based on the input formatter value
@@ -47,12 +47,12 @@
     {
         $decimals = 2;
-        $currencyDecimals = array('JPY' => 0, 'TWD' => 0);
+        $currencyDecimals = array('JPY' => 0, 'TWD' => 0, 'HUF' => 0);
         if ($currency && array_key_exists($currency, $currencyDecimals)) {
             if (strpos($value, ".") !== false && (floor($value) != $value)) {
-                //throw exception if it has decimal values for JPY and TWD which does not ends with .00
+                //throw exception if it has decimal values for JPY, TWD and HUF which does not ends with .00
                 throw new \InvalidArgumentException("value cannot have decimals for $currency currency");
             }
             $decimals = $currencyDecimals[$currency];
-        } else if (strpos($value, ".") === false) {
+        } elseif (strpos($value, ".") === false) {
             // Check if value has decimal values. If not no need to assign 2 decimals with .00 at the end
             $decimals = 0;
Index: /lib/PayPal/Core/PayPalConfigManager.php
===================================================================
--- /lib/PayPal/Core/PayPalConfigManager.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalConfigManager.php	(revision 7221)
@@ -96,12 +96,13 @@
     public function get($searchKey)
     {
-
         if (array_key_exists($searchKey, $this->configs)) {
             return $this->configs[$searchKey];
         } else {
             $arr = array();
-            foreach ($this->configs as $k => $v) {
-                if (strstr($k, $searchKey)) {
-                    $arr[$k] = $v;
+            if ($searchKey !== '') {
+                foreach ($this->configs as $k => $v) {
+                    if (strstr($k, $searchKey)) {
+                        $arr[$k] = $v;
+                    }
                 }
             }
@@ -109,5 +110,4 @@
             return $arr;
         }
-
     }
 
@@ -124,5 +124,4 @@
     public function getIniPrefix($userId = null)
     {
-
         if ($userId == null) {
             $arr = array();
@@ -158,6 +157,3 @@
         trigger_error('Clone is not allowed.', E_USER_ERROR);
     }
-
 }
-
-    
Index: /lib/PayPal/Core/PayPalConstants.php
===================================================================
--- /lib/PayPal/Core/PayPalConstants.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalConstants.php	(revision 7221)
@@ -13,5 +13,5 @@
 
     const SDK_NAME = 'PayPal-PHP-SDK';
-    const SDK_VERSION = '1.4.0';
+    const SDK_VERSION = '1.13.0';
 
     /**
@@ -21,7 +21,7 @@
 
     const REST_SANDBOX_ENDPOINT = "https://api.sandbox.paypal.com/";
-    const OPENID_REDIRECT_SANDBOX_URL = "https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect";
+    const OPENID_REDIRECT_SANDBOX_URL = "https://www.sandbox.paypal.com";
 
     const REST_LIVE_ENDPOINT = "https://api.paypal.com/";
-    const OPENID_REDIRECT_LIVE_URL = "https://www.paypal.com/webapps/auth/protocol/openidconnect";
+    const OPENID_REDIRECT_LIVE_URL = "https://www.paypal.com";
 }
Index: /lib/PayPal/Core/PayPalCredentialManager.php
===================================================================
--- /lib/PayPal/Core/PayPalCredentialManager.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalCredentialManager.php	(revision 7221)
@@ -97,5 +97,5 @@
         $userName = null;
         while (in_array($key, $arrayPartKeys)) {
-            if (isset($credArr[$key . ".ClientId"]) && isset($credArr[$key . ".ClientId"])) {
+            if (isset($credArr[$key . ".ClientId"]) && isset($credArr[$key . ".ClientSecret"])) {
                 $userName = $key;
                 $this->credentialHashmap[$userName] = new OAuthTokenCredential(
@@ -114,5 +114,4 @@
             $key = $prefix . $suffix;
         }
-
     }
 
@@ -147,5 +146,5 @@
         if ($userId == null && array_key_exists($this->defaultAccountName, $this->credentialHashmap)) {
             $credObj = $this->credentialHashmap[$this->defaultAccountName];
-        } else if (array_key_exists($userId, $this->credentialHashmap)) {
+        } elseif (array_key_exists($userId, $this->credentialHashmap)) {
             $credObj = $this->credentialHashmap[$userId];
         }
@@ -165,4 +164,3 @@
         trigger_error('Clone is not allowed.', E_USER_ERROR);
     }
-
 }
Index: /lib/PayPal/Core/PayPalHttpConfig.php
===================================================================
--- /lib/PayPal/Core/PayPalHttpConfig.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalHttpConfig.php	(revision 7221)
@@ -20,7 +20,7 @@
      */
     public static $defaultCurlOptions = array(
-        CURLOPT_SSLVERSION => 1,
+        CURLOPT_SSLVERSION => 6,
         CURLOPT_CONNECTTIMEOUT => 10,
-        CURLOPT_RETURNTRANSFER => TRUE,
+        CURLOPT_RETURNTRANSFER => true,
         CURLOPT_TIMEOUT => 60,    // maximum number of seconds to allow cURL functions to execute
         CURLOPT_USERAGENT => 'PayPal-PHP-SDK',
@@ -28,6 +28,5 @@
         CURLOPT_SSL_VERIFYHOST => 2,
         CURLOPT_SSL_VERIFYPEER => 1,
-   		CURLOPT_SSL_CIPHER_LIST => 'TLSv1:TLSv1.2'
-        //CURLOPT_SSL_CIPHER_LIST => 'TLSv1'
+        CURLOPT_SSL_CIPHER_LIST => 'TLSv1:TLSv1.2'
         //Allowing TLSv1 cipher list.
         //Adding it like this for backward compatibility with older versions of curl
@@ -66,5 +65,5 @@
         $curl = curl_version();
         $sslVersion = isset($curl['ssl_version']) ? $curl['ssl_version'] : '';
-        if (substr_compare($sslVersion, "NSS/", 0, strlen("NSS/")) === 0) {
+        if($sslVersion && substr_compare($sslVersion, "NSS/", 0, strlen("NSS/")) === 0) {
             //Remove the Cipher List for NSS
             $this->removeCurlOption(CURLOPT_SSL_CIPHER_LIST);
Index: /lib/PayPal/Core/PayPalHttpConnection.php
===================================================================
--- /lib/PayPal/Core/PayPalHttpConnection.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalHttpConnection.php	(revision 7221)
@@ -20,11 +20,4 @@
 
     /**
-     * HTTP status codes for which a retry must be attempted
-     * retry is currently attempted for Request timeout, Bad Gateway,
-     * Service Unavailable and Gateway timeout errors.
-     */
-    private static $retryCodes = array('408', '502', '503', '504',);
-
-    /**
      * LoggingManager
      *
@@ -32,4 +25,14 @@
      */
     private $logger;
+
+    /**
+     * @var array
+     */
+    private $responseHeaders = array();
+
+    /**
+     * @var bool
+     */
+    private $skippedHttpStatusLine = false;
 
     /**
@@ -56,5 +59,4 @@
     private function getHttpHeaders()
     {
-
         $ret = array();
         foreach ($this->httpConfig->getHeaders() as $k => $v) {
@@ -65,9 +67,59 @@
 
     /**
-     * Executes an HTTP request
-     *
-     * @param string $data query string OR POST content as a string
-     * @throws PayPalConnectionException
-     */
+     * Parses the response headers for debugging.
+     *
+     * @param resource $ch
+     * @param string $data
+     * @return int
+     */
+    protected function parseResponseHeaders($ch, $data) {
+        if (!$this->skippedHttpStatusLine) {
+            $this->skippedHttpStatusLine = true;
+            return strlen($data);
+        }
+
+        $trimmedData = trim($data);
+        if (strlen($trimmedData) == 0) {
+            return strlen($data);
+        }
+
+        // Added condition to ignore extra header which dont have colon ( : )
+        if (strpos($trimmedData, ":") == false) {
+            return strlen($data);
+        }
+        
+        list($key, $value) = explode(":", $trimmedData, 2);
+
+        $key = trim($key);
+        $value = trim($value);
+
+        // This will skip over the HTTP Status Line and any other lines
+        // that don't look like header lines with values
+        if (strlen($key) > 0 && strlen($value) > 0) {
+            // This is actually a very basic way of looking at response headers
+            // and may miss a few repeated headers with different (appended)
+            // values but this should work for debugging purposes.
+            $this->responseHeaders[$key] = $value;
+        }
+
+        return strlen($data);
+    }
+
+
+    /**
+     * Implodes a key/value array for printing.
+     *
+     * @param array $arr
+     * @return string
+     */
+    protected function implodeArray($arr) {
+        $retStr = '';
+        foreach($arr as $key => $value) {
+            $retStr .= $key . ': ' . $value . ', ';
+        }
+        rtrim($retStr, ', ');
+        return $retStr;
+    }
+
     /**
      * Executes an HTTP request
@@ -84,7 +136,11 @@
         //Initialize Curl Options
         $ch = curl_init($this->httpConfig->getUrl());
-        curl_setopt_array($ch, $this->httpConfig->getCurlOptions());
+        $options = $this->httpConfig->getCurlOptions();
+        if (empty($options[CURLOPT_HTTPHEADER])) {
+            unset($options[CURLOPT_HTTPHEADER]);
+        }
+        curl_setopt_array($ch, $options);
         curl_setopt($ch, CURLOPT_URL, $this->httpConfig->getUrl());
-        curl_setopt($ch, CURLOPT_HEADER, true);
+        curl_setopt($ch, CURLOPT_HEADER, false);
         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
         curl_setopt($ch, CURLOPT_HTTPHEADER, $this->getHttpHeaders());
@@ -94,4 +150,6 @@
             case 'POST':
                 curl_setopt($ch, CURLOPT_POST, true);
+                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+                break;
             case 'PUT':
             case 'PATCH':
@@ -102,13 +160,11 @@
 
         //Default Option if Method not of given types in switch case
-        if ($this->httpConfig->getMethod() != NULL) {
+        if ($this->httpConfig->getMethod() != null) {
             curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->httpConfig->getMethod());
         }
 
-        //Logging Each Headers for debugging purposes
-        foreach ($this->getHttpHeaders() as $header) {
-            //TODO: Strip out credentials and other secure info when logging.
-            // $this->logger->debug($header);
-        }
+        $this->responseHeaders = array();
+        $this->skippedHttpStatusLine = false;
+        curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'parseResponseHeaders'));
 
         //Execute Curl Request
@@ -124,15 +180,4 @@
             //Retrieve Response Status
             $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
-        }
-
-        //Retry if Failing
-        $retries = 0;
-        if (in_array($httpStatus, self::$retryCodes) && $this->httpConfig->getHttpRetryCount() != null) {
-            $this->logger->info("Got $httpStatus response from server. Retrying");
-            do {
-                $result = curl_exec($ch);
-                //Retrieve Response Status
-                $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
-            } while (in_array($httpStatus, self::$retryCodes) && (++$retries < $this->httpConfig->getHttpRetryCount()));
         }
 
@@ -150,13 +195,8 @@
         // Get Request and Response Headers
         $requestHeaders = curl_getinfo($ch, CURLINFO_HEADER_OUT);
-        //Using alternative solution to CURLINFO_HEADER_SIZE as it throws invalid number when called using PROXY.
-        $responseHeaderSize = strlen($result) - curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);
-        $responseHeaders = substr($result, 0, $responseHeaderSize);
-        $result = substr($result, $responseHeaderSize);
-
         $this->logger->debug("Request Headers \t: " . str_replace("\r\n", ", ", $requestHeaders));
         $this->logger->debug(($data && $data != '' ? "Request Data\t\t: " . $data : "No Request Payload") . "\n" . str_repeat('-', 128) . "\n");
         $this->logger->info("Response Status \t: " . $httpStatus);
-        $this->logger->debug("Response Headers\t: " . str_replace("\r\n", ", ", $responseHeaders));
+        $this->logger->debug("Response Headers\t: " . $this->implodeArray($this->responseHeaders));
 
         //Close the curl request
@@ -164,16 +204,5 @@
 
         //More Exceptions based on HttpStatus Code
-        if (in_array($httpStatus, self::$retryCodes)) {
-            $ex = new PayPalConnectionException(
-                $this->httpConfig->getUrl(),
-                "Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " .
-                "Retried $retries times."
-            );
-            $ex->setData($result);
-            $this->logger->error("Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " .
-                "Retried $retries times." . $result);
-            $this->logger->debug("\n\n" . str_repeat('=', 128) . "\n");
-            throw $ex;
-        } else if ($httpStatus < 200 || $httpStatus >= 300) {
+        if ($httpStatus < 200 || $httpStatus >= 300) {
             $ex = new PayPalConnectionException(
                 $this->httpConfig->getUrl(),
@@ -182,5 +211,5 @@
             );
             $ex->setData($result);
-            $this->logger->error("Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " . $result );
+            $this->logger->error("Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " . $result);
             $this->logger->debug("\n\n" . str_repeat('=', 128) . "\n");
             throw $ex;
@@ -192,4 +221,3 @@
         return $result;
     }
-
 }
Index: /lib/PayPal/Core/PayPalLoggingManager.php
===================================================================
--- /lib/PayPal/Core/PayPalLoggingManager.php	(revision 7220)
+++ /lib/PayPal/Core/PayPalLoggingManager.php	(revision 7221)
@@ -2,4 +2,7 @@
 
 namespace PayPal\Core;
+
+use PayPal\Log\PayPalLogFactory;
+use Psr\Log\LoggerInterface;
 
 /**
@@ -10,36 +13,22 @@
 class PayPalLoggingManager
 {
+    /**
+     * @var array of logging manager instances with class name as key
+     */
+    private static $instances = array();
 
     /**
-     * Default Logging Level
+     * The logger to be used for all messages
+     *
+     * @var LoggerInterface
      */
-    const DEFAULT_LOGGING_LEVEL = 0;
+    private $logger;
 
     /**
      * Logger Name
+     *
      * @var string
      */
     private $loggerName;
-
-    /**
-     * Log Enabled
-     *
-     * @var bool
-     */
-    private $isLoggingEnabled;
-
-    /**
-     * Configured Logging Level
-     *
-     * @var int|mixed
-     */
-    private $loggingLevel;
-
-    /**
-     * Configured Logging File
-     *
-     * @var string
-     */
-    private $loggerFile;
 
     /**
@@ -51,70 +40,26 @@
     public static function getInstance($loggerName = __CLASS__)
     {
-        $instance = new self();
-        $instance->setLoggerName($loggerName);
+        if (array_key_exists($loggerName, PayPalLoggingManager::$instances)) {
+            return PayPalLoggingManager::$instances[$loggerName];
+        }
+        $instance = new self($loggerName);
+        PayPalLoggingManager::$instances[$loggerName] = $instance;
         return $instance;
     }
 
     /**
-     * Sets Logger Name. Generally defaulted to Logging Class
+     * Default Constructor
      *
-     * @param string $loggerName
+     * @param string $loggerName Generally represents the class name.
      */
-    public function setLoggerName($loggerName = __CLASS__)
+    private function __construct($loggerName)
     {
+        $config = PayPalConfigManager::getInstance()->getConfigHashmap();
+        // Checks if custom factory defined, and is it an implementation of @PayPalLogFactory
+        $factory = array_key_exists('log.AdapterFactory', $config) && in_array('PayPal\Log\PayPalLogFactory', class_implements($config['log.AdapterFactory'])) ? $config['log.AdapterFactory'] : '\PayPal\Log\PayPalDefaultLogFactory';
+        /** @var PayPalLogFactory $factoryInstance */
+        $factoryInstance = new $factory();
+        $this->logger = $factoryInstance->getLogger($loggerName);
         $this->loggerName = $loggerName;
-    }
-
-    /**
-     * Default Constructor
-     */
-    public function __construct()
-    {
-        // To suppress the warning during the date() invocation in logs, we would default the timezone to GMT.
-        if (!ini_get('date.timezone')) {
-            date_default_timezone_set('GMT');
-        }
-
-        $config = PayPalConfigManager::getInstance()->getConfigHashmap();
-
-        $this->isLoggingEnabled = (array_key_exists('log.LogEnabled', $config) && $config['log.LogEnabled'] == '1');
-
-        if ($this->isLoggingEnabled) {
-            $this->loggerFile = ($config['log.FileName']) ? $config['log.FileName'] : ini_get('error_log');
-            $loggingLevel = strtoupper($config['log.LogLevel']);
-            $this->loggingLevel =
-                (isset($loggingLevel) && defined(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel")) ?
-                constant(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel") :
-                PayPalLoggingManager::DEFAULT_LOGGING_LEVEL;
-        }
-    }
-
-    /**
-     * Default Logger
-     *
-     * @param string $message
-     * @param int $level
-     */
-    private function log($message, $level = PayPalLoggingLevel::INFO)
-    {
-        if ($this->isLoggingEnabled) {
-            $config = PayPalConfigManager::getInstance()->getConfigHashmap();
-            // Check if logging in live
-            if (array_key_exists('mode', $config) && $config['mode'] == 'live') {
-                // Live should not have logging level above INFO.
-                if ($this->loggingLevel >= PayPalLoggingLevel::INFO) {
-                    // If it is at Debug Level, throw an warning in the log.
-                    if ($this->loggingLevel == PayPalLoggingLevel::DEBUG) {
-                        error_log("[" . date('d-m-Y h:i:s') . "] " . $this->loggerName . ": ERROR\t: Not allowed to keep 'Debug' level for Live Environments. Reduced to 'INFO'\n", 3, $this->loggerFile);
-                    }
-                    // Reducing it to info level
-                    $this->loggingLevel = PayPalLoggingLevel::INFO;
-                }
-            }
-
-            if ($level <= $this->loggingLevel) {
-                error_log("[" . date('d-m-Y h:i:s') . "] " . $this->loggerName . ": $message\n", 3, $this->loggerFile);
-            }
-        }
     }
 
@@ -126,5 +71,5 @@
     public function error($message)
     {
-        $this->log("ERROR\t: " . $message, PayPalLoggingLevel::ERROR);
+        $this->logger->error($message);
     }
 
@@ -136,5 +81,5 @@
     public function warning($message)
     {
-        $this->log("WARNING\t: " . $message, PayPalLoggingLevel::WARN);
+        $this->logger->warning($message);
     }
 
@@ -146,5 +91,5 @@
     public function info($message)
     {
-        $this->log("INFO\t: " . $message, PayPalLoggingLevel::INFO);
+        $this->logger->info($message);
     }
 
@@ -156,9 +101,9 @@
     public function fine($message)
     {
-        $this->log("FINE\t: " . $message, PayPalLoggingLevel::FINE);
+        $this->info($message);
     }
 
     /**
-     * Log Fine
+     * Log Debug
      *
      * @param string $message
@@ -166,6 +111,9 @@
     public function debug($message)
     {
-        $this->log("DEBUG\t: " . $message, PayPalLoggingLevel::DEBUG);
+        $config = PayPalConfigManager::getInstance()->getConfigHashmap();
+        // Disable debug in live mode.
+        if (array_key_exists('mode', $config) && $config['mode'] != 'live') {
+            $this->logger->debug($message);
+        }
     }
-
 }
Index: /lib/PayPal/Exception/PayPalInvalidCredentialException.php
===================================================================
--- /lib/PayPal/Exception/PayPalInvalidCredentialException.php	(revision 7220)
+++ /lib/PayPal/Exception/PayPalInvalidCredentialException.php	(revision 7221)
@@ -33,4 +33,3 @@
         return $errorMsg;
     }
-
 }
Index: /lib/PayPal/Exception/PayPalMissingCredentialException.php
===================================================================
--- /lib/PayPal/Exception/PayPalMissingCredentialException.php	(revision 7220)
+++ /lib/PayPal/Exception/PayPalMissingCredentialException.php	(revision 7221)
@@ -34,4 +34,3 @@
         return $errorMsg;
     }
-
 }
Index: /lib/PayPal/Handler/OauthHandler.php
===================================================================
--- /lib/PayPal/Handler/OauthHandler.php	(revision 7220)
+++ /lib/PayPal/Handler/OauthHandler.php	(revision 7221)
@@ -79,7 +79,7 @@
         if (isset($config['oauth.EndPoint'])) {
             $baseEndpoint = $config['oauth.EndPoint'];
-        } else if (isset($config['service.EndPoint'])) {
+        } elseif (isset($config['service.EndPoint'])) {
             $baseEndpoint = $config['service.EndPoint'];
-        } else if (isset($config['mode'])) {
+        } elseif (isset($config['mode'])) {
             switch (strtoupper($config['mode'])) {
                 case 'SANDBOX':
Index: /lib/PayPal/Handler/RestHandler.php
===================================================================
--- /lib/PayPal/Handler/RestHandler.php	(revision 7220)
+++ /lib/PayPal/Handler/RestHandler.php	(revision 7221)
@@ -48,5 +48,4 @@
     public function handle($httpConfig, $request, $options)
     {
-
         $credential = $this->apiContext->getCredential();
         $config = $this->apiContext->getConfig();
@@ -73,4 +72,7 @@
         );
 
+        // Overwrite Expect Header to disable 100 Continue Issue
+        $httpConfig->addHeader("Expect", null);
+
         if (!array_key_exists("User-Agent", $httpConfig->getHeaders())) {
             $httpConfig->addHeader("User-Agent", PayPalUserAgent::getValue(PayPalConstants::SDK_NAME, PayPalConstants::SDK_VERSION));
@@ -81,5 +83,5 @@
         }
 
-        if ($httpConfig->getMethod() == 'POST' || $httpConfig->getMethod() == 'PUT') {
+        if (($httpConfig->getMethod() == 'POST' || $httpConfig->getMethod() == 'PUT') && !is_null($this->apiContext->getRequestId())) {
             $httpConfig->addHeader('PayPal-Request-Id', $this->apiContext->getRequestId());
         }
@@ -103,5 +105,5 @@
         if (isset($config['service.EndPoint'])) {
             return $config['service.EndPoint'];
-        } else if (isset($config['mode'])) {
+        } elseif (isset($config['mode'])) {
             switch (strtoupper($config['mode'])) {
                 case 'SANDBOX':
Index: /lib/PayPal/Rest/ApiContext.php
===================================================================
--- /lib/PayPal/Rest/ApiContext.php	(revision 7220)
+++ /lib/PayPal/Rest/ApiContext.php	(revision 7221)
@@ -29,5 +29,5 @@
      * If the value is not set, it would get the value from @\PayPal\Core\PayPalCredentialManager
      *
-     * @var \Paypal\Auth\OAuthTokenCredential
+     * @var \PayPal\Auth\OAuthTokenCredential
      */
     private $credential;
@@ -86,9 +86,15 @@
     public function getRequestId()
     {
-        if ($this->requestId == null) {
-            $this->requestId = $this->generateRequestId();
-        }
+        return $this->requestId;
+    }
 
-        return $this->requestId;
+    /**
+     * Sets the request ID
+     *
+     * @param string $requestId the PayPal-Request-Id value to use
+     */
+    public function setRequestId($requestId)
+    {
+        $this->requestId = $requestId;
     }
 
@@ -97,4 +103,5 @@
      * header used for idempotency. In cases where you need to make multiple create calls
      * using the same ApiContext object, you need to reset request Id.
+     * @deprecated Call setRequestId with a unique value.
      *
      * @return string
@@ -141,4 +148,5 @@
      * can be used to set the PayPal-Request-Id header
      * that is used for idempotency
+     * @deprecated
      *
      * @return string
Index: /lib/PayPal/Security/Cipher.php
===================================================================
--- /lib/PayPal/Security/Cipher.php	(revision 7220)
+++ /lib/PayPal/Security/Cipher.php	(revision 7221)
@@ -19,5 +19,5 @@
     const IV_SIZE = 16;
 
-    function __construct($secretKey)
+    public function __construct($secretKey)
     {
         $this->secretKey = $secretKey;
@@ -30,5 +30,5 @@
      * @return string
      */
-    function encrypt($input)
+    public function encrypt($input)
     {
         // Create a random IV. Not using mcrypt to generate one, as to not have a dependency on it.
@@ -46,5 +46,5 @@
      * @return string
      */
-    function decrypt($input)
+    public function decrypt($input)
     {
         // Decode the IV + data
Index: /lib/PayPal/Transport/PayPalRestCall.php
===================================================================
--- /lib/PayPal/Transport/PayPalRestCall.php	(revision 7220)
+++ /lib/PayPal/Transport/PayPalRestCall.php	(revision 7221)
@@ -2,7 +2,7 @@
 namespace PayPal\Transport;
 
-use PayPal\Core\PayPalLoggingManager;
 use PayPal\Core\PayPalHttpConfig;
 use PayPal\Core\PayPalHttpConnection;
+use PayPal\Core\PayPalLoggingManager;
 use PayPal\Rest\ApiContext;
 
@@ -53,5 +53,4 @@
     public function execute($handlers = array(), $path, $method, $data = '', $headers = array())
     {
-
         $config = $this->apiContext->getConfig();
         $httpConfig = new PayPalHttpConfig(null, $method, $config);
@@ -62,4 +61,9 @@
             )
         );
+
+        // if proxy set via config, add it
+        if (!empty($config['http.Proxy'])) {
+            $httpConfig->setHttpProxy($config['http.Proxy']);
+        }
 
         /** @var \Paypal\Handler\IPayPalHandler $handler */
@@ -76,4 +80,3 @@
         return $response;
     }
-
 }
Index: /lib/PayPal/Validation/ArgumentValidator.php
===================================================================
--- /lib/PayPal/Validation/ArgumentValidator.php	(revision 7220)
+++ /lib/PayPal/Validation/ArgumentValidator.php	(revision 7221)
@@ -24,5 +24,5 @@
             // Error if Object Null
             throw new \InvalidArgumentException("$argumentName cannot be null");
-        } else if (gettype($argument) == 'string' && trim($argument) == ''){
+        } elseif (gettype($argument) == 'string' && trim($argument) == '') {
             // Error if String Empty
             throw new \InvalidArgumentException("$argumentName string cannot be empty");
Index: /lib/PayPal/Validation/JsonValidator.php
===================================================================
--- /lib/PayPal/Validation/JsonValidator.php	(revision 7220)
+++ /lib/PayPal/Validation/JsonValidator.php	(revision 7221)
@@ -22,4 +22,7 @@
         @json_decode($string);
         if (json_last_error() != JSON_ERROR_NONE) {
+            if ($string === '' || $string === null) {
+                return true;
+            }
             if ($silent == false) {
                 //Throw an Exception for string or array
@@ -30,3 +33,3 @@
         return true;
     }
-} 
+}
Index: /lib/PayPal/Validation/NumericValidator.php
===================================================================
--- /lib/PayPal/Validation/NumericValidator.php	(revision 7220)
+++ /lib/PayPal/Validation/NumericValidator.php	(revision 7221)
@@ -22,5 +22,4 @@
         if (trim($argument) != null && !is_numeric($argument)) {
             throw new \InvalidArgumentException("$argumentName is not a valid numeric value");
-
         }
         return true;
Index: /lib/PayPal/Validation/UrlValidator.php
===================================================================
--- /lib/PayPal/Validation/UrlValidator.php	(revision 7220)
+++ /lib/PayPal/Validation/UrlValidator.php	(revision 7221)
Index: /lib/Psr/Log/AbstractLogger.php
===================================================================
--- /lib/Psr/Log/AbstractLogger.php	(revision 7221)
+++ /lib/Psr/Log/AbstractLogger.php	(revision 7221)
@@ -0,0 +1,128 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger implementation that other Loggers can inherit from.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+abstract class AbstractLogger implements LoggerInterface
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array())
+    {
+        $this->log(LogLevel::EMERGENCY, $message, $context);
+    }
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array())
+    {
+        $this->log(LogLevel::ALERT, $message, $context);
+    }
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array())
+    {
+        $this->log(LogLevel::CRITICAL, $message, $context);
+    }
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array())
+    {
+        $this->log(LogLevel::ERROR, $message, $context);
+    }
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array())
+    {
+        $this->log(LogLevel::WARNING, $message, $context);
+    }
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array())
+    {
+        $this->log(LogLevel::NOTICE, $message, $context);
+    }
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array())
+    {
+        $this->log(LogLevel::INFO, $message, $context);
+    }
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array())
+    {
+        $this->log(LogLevel::DEBUG, $message, $context);
+    }
+}
Index: /lib/Psr/Log/InvalidArgumentException.php
===================================================================
--- /lib/Psr/Log/InvalidArgumentException.php	(revision 7221)
+++ /lib/Psr/Log/InvalidArgumentException.php	(revision 7221)
@@ -0,0 +1,7 @@
+<?php
+
+namespace Psr\Log;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
Index: /lib/Psr/Log/LogLevel.php
===================================================================
--- /lib/Psr/Log/LogLevel.php	(revision 7221)
+++ /lib/Psr/Log/LogLevel.php	(revision 7221)
@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes log levels.
+ */
+class LogLevel
+{
+    const EMERGENCY = 'emergency';
+    const ALERT     = 'alert';
+    const CRITICAL  = 'critical';
+    const ERROR     = 'error';
+    const WARNING   = 'warning';
+    const NOTICE    = 'notice';
+    const INFO      = 'info';
+    const DEBUG     = 'debug';
+}
Index: /lib/Psr/Log/LoggerAwareInterface.php
===================================================================
--- /lib/Psr/Log/LoggerAwareInterface.php	(revision 7221)
+++ /lib/Psr/Log/LoggerAwareInterface.php	(revision 7221)
@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger-aware instance.
+ */
+interface LoggerAwareInterface
+{
+    /**
+     * Sets a logger instance on the object.
+     *
+     * @param LoggerInterface $logger
+     *
+     * @return void
+     */
+    public function setLogger(LoggerInterface $logger);
+}
Index: /lib/Psr/Log/LoggerAwareTrait.php
===================================================================
--- /lib/Psr/Log/LoggerAwareTrait.php	(revision 7221)
+++ /lib/Psr/Log/LoggerAwareTrait.php	(revision 7221)
@@ -0,0 +1,26 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Basic Implementation of LoggerAwareInterface.
+ */
+trait LoggerAwareTrait
+{
+    /**
+     * The logger instance.
+     *
+     * @var LoggerInterface
+     */
+    protected $logger;
+
+    /**
+     * Sets a logger.
+     *
+     * @param LoggerInterface $logger
+     */
+    public function setLogger(LoggerInterface $logger)
+    {
+        $this->logger = $logger;
+    }
+}
Index: /lib/Psr/Log/LoggerInterface.php
===================================================================
--- /lib/Psr/Log/LoggerInterface.php	(revision 7221)
+++ /lib/Psr/Log/LoggerInterface.php	(revision 7221)
@@ -0,0 +1,123 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger instance.
+ *
+ * The message MUST be a string or object implementing __toString().
+ *
+ * The message MAY contain placeholders in the form: {foo} where foo
+ * will be replaced by the context data in key "foo".
+ *
+ * The context array can contain arbitrary data. The only assumption that
+ * can be made by implementors is that if an Exception instance is given
+ * to produce a stack trace, it MUST be in a key named "exception".
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+ * for the full interface specification.
+ */
+interface LoggerInterface
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array());
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array());
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array());
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array());
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array());
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array());
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array());
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array());
+
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function log($level, $message, array $context = array());
+}
Index: /lib/Psr/Log/LoggerTrait.php
===================================================================
--- /lib/Psr/Log/LoggerTrait.php	(revision 7221)
+++ /lib/Psr/Log/LoggerTrait.php	(revision 7221)
@@ -0,0 +1,140 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger trait that classes unable to extend AbstractLogger
+ * (because they extend another class, etc) can include.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+trait LoggerTrait
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array())
+    {
+        $this->log(LogLevel::EMERGENCY, $message, $context);
+    }
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array())
+    {
+        $this->log(LogLevel::ALERT, $message, $context);
+    }
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array())
+    {
+        $this->log(LogLevel::CRITICAL, $message, $context);
+    }
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array())
+    {
+        $this->log(LogLevel::ERROR, $message, $context);
+    }
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array())
+    {
+        $this->log(LogLevel::WARNING, $message, $context);
+    }
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array())
+    {
+        $this->log(LogLevel::NOTICE, $message, $context);
+    }
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array())
+    {
+        $this->log(LogLevel::INFO, $message, $context);
+    }
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array())
+    {
+        $this->log(LogLevel::DEBUG, $message, $context);
+    }
+
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    abstract public function log($level, $message, array $context = array());
+}
Index: /lib/Psr/Log/NullLogger.php
===================================================================
--- /lib/Psr/Log/NullLogger.php	(revision 7221)
+++ /lib/Psr/Log/NullLogger.php	(revision 7221)
@@ -0,0 +1,28 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This Logger can be used to avoid conditional log calls.
+ *
+ * Logging should always be optional, and if no logger is provided to your
+ * library creating a NullLogger instance to have something to throw logs at
+ * is a good way to avoid littering your code with `if ($this->logger) { }`
+ * blocks.
+ */
+class NullLogger extends AbstractLogger
+{
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function log($level, $message, array $context = array())
+    {
+        // noop
+    }
+}
Index: /lib/Psr/Log/Test/LoggerInterfaceTest.php
===================================================================
--- /lib/Psr/Log/Test/LoggerInterfaceTest.php	(revision 7221)
+++ /lib/Psr/Log/Test/LoggerInterfaceTest.php	(revision 7221)
@@ -0,0 +1,144 @@
+<?php
+
+namespace Psr\Log\Test;
+
+use Psr\Log\LoggerInterface;
+use Psr\Log\LogLevel;
+
+/**
+ * Provides a base test class for ensuring compliance with the LoggerInterface.
+ *
+ * Implementors can extend the class and implement abstract methods to run this
+ * as part of their test suite.
+ */
+abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @return LoggerInterface
+     */
+    abstract public function getLogger();
+
+    /**
+     * This must return the log messages in order.
+     *
+     * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>".
+     *
+     * Example ->error('Foo') would yield "error Foo".
+     *
+     * @return string[]
+     */
+    abstract public function getLogs();
+
+    public function testImplements()
+    {
+        $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
+    }
+
+    /**
+     * @dataProvider provideLevelsAndMessages
+     */
+    public function testLogsAtAllLevels($level, $message)
+    {
+        $logger = $this->getLogger();
+        $logger->{$level}($message, array('user' => 'Bob'));
+        $logger->log($level, $message, array('user' => 'Bob'));
+
+        $expected = array(
+            $level.' message of level '.$level.' with context: Bob',
+            $level.' message of level '.$level.' with context: Bob',
+        );
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function provideLevelsAndMessages()
+    {
+        return array(
+            LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
+            LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
+            LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
+            LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
+            LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
+            LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
+            LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
+            LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
+        );
+    }
+
+    /**
+     * @expectedException \Psr\Log\InvalidArgumentException
+     */
+    public function testThrowsOnInvalidLevel()
+    {
+        $logger = $this->getLogger();
+        $logger->log('invalid level', 'Foo');
+    }
+
+    public function testContextReplacement()
+    {
+        $logger = $this->getLogger();
+        $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
+
+        $expected = array('info {Message {nothing} Bob Bar a}');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testObjectCastToString()
+    {
+        if (method_exists($this, 'createPartialMock')) {
+            $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
+        } else {
+            $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
+        }
+        $dummy->expects($this->once())
+            ->method('__toString')
+            ->will($this->returnValue('DUMMY'));
+
+        $this->getLogger()->warning($dummy);
+
+        $expected = array('warning DUMMY');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testContextCanContainAnything()
+    {
+        $closed = fopen('php://memory', 'r');
+        fclose($closed);
+
+        $context = array(
+            'bool' => true,
+            'null' => null,
+            'string' => 'Foo',
+            'int' => 0,
+            'float' => 0.5,
+            'nested' => array('with object' => new DummyTest),
+            'object' => new \DateTime,
+            'resource' => fopen('php://memory', 'r'),
+            'closed' => $closed,
+        );
+
+        $this->getLogger()->warning('Crazy context data', $context);
+
+        $expected = array('warning Crazy context data');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testContextExceptionKeyCanBeExceptionOrOtherValues()
+    {
+        $logger = $this->getLogger();
+        $logger->warning('Random message', array('exception' => 'oops'));
+        $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
+
+        $expected = array(
+            'warning Random message',
+            'critical Uncaught Exception!'
+        );
+        $this->assertEquals($expected, $this->getLogs());
+    }
+}
+
+class DummyTest
+{
+    public function __toString()
+    {
+    }
+}
Index: /lib/Psr/Log/Test/TestLogger.php
===================================================================
--- /lib/Psr/Log/Test/TestLogger.php	(revision 7221)
+++ /lib/Psr/Log/Test/TestLogger.php	(revision 7221)
@@ -0,0 +1,146 @@
+<?php
+
+namespace Psr\Log\Test;
+
+use Psr\Log\AbstractLogger;
+
+/**
+ * Used for testing purposes.
+ *
+ * It records all records and gives you access to them for verification.
+ *
+ * @method bool hasEmergency($record)
+ * @method bool hasAlert($record)
+ * @method bool hasCritical($record)
+ * @method bool hasError($record)
+ * @method bool hasWarning($record)
+ * @method bool hasNotice($record)
+ * @method bool hasInfo($record)
+ * @method bool hasDebug($record)
+ *
+ * @method bool hasEmergencyRecords()
+ * @method bool hasAlertRecords()
+ * @method bool hasCriticalRecords()
+ * @method bool hasErrorRecords()
+ * @method bool hasWarningRecords()
+ * @method bool hasNoticeRecords()
+ * @method bool hasInfoRecords()
+ * @method bool hasDebugRecords()
+ *
+ * @method bool hasEmergencyThatContains($message)
+ * @method bool hasAlertThatContains($message)
+ * @method bool hasCriticalThatContains($message)
+ * @method bool hasErrorThatContains($message)
+ * @method bool hasWarningThatContains($message)
+ * @method bool hasNoticeThatContains($message)
+ * @method bool hasInfoThatContains($message)
+ * @method bool hasDebugThatContains($message)
+ *
+ * @method bool hasEmergencyThatMatches($message)
+ * @method bool hasAlertThatMatches($message)
+ * @method bool hasCriticalThatMatches($message)
+ * @method bool hasErrorThatMatches($message)
+ * @method bool hasWarningThatMatches($message)
+ * @method bool hasNoticeThatMatches($message)
+ * @method bool hasInfoThatMatches($message)
+ * @method bool hasDebugThatMatches($message)
+ *
+ * @method bool hasEmergencyThatPasses($message)
+ * @method bool hasAlertThatPasses($message)
+ * @method bool hasCriticalThatPasses($message)
+ * @method bool hasErrorThatPasses($message)
+ * @method bool hasWarningThatPasses($message)
+ * @method bool hasNoticeThatPasses($message)
+ * @method bool hasInfoThatPasses($message)
+ * @method bool hasDebugThatPasses($message)
+ */
+class TestLogger extends AbstractLogger
+{
+    /**
+     * @var array
+     */
+    public $records = [];
+
+    public $recordsByLevel = [];
+
+    /**
+     * @inheritdoc
+     */
+    public function log($level, $message, array $context = [])
+    {
+        $record = [
+            'level' => $level,
+            'message' => $message,
+            'context' => $context,
+        ];
+
+        $this->recordsByLevel[$record['level']][] = $record;
+        $this->records[] = $record;
+    }
+
+    public function hasRecords($level)
+    {
+        return isset($this->recordsByLevel[$level]);
+    }
+
+    public function hasRecord($record, $level)
+    {
+        if (is_string($record)) {
+            $record = ['message' => $record];
+        }
+        return $this->hasRecordThatPasses(function ($rec) use ($record) {
+            if ($rec['message'] !== $record['message']) {
+                return false;
+            }
+            if (isset($record['context']) && $rec['context'] !== $record['context']) {
+                return false;
+            }
+            return true;
+        }, $level);
+    }
+
+    public function hasRecordThatContains($message, $level)
+    {
+        return $this->hasRecordThatPasses(function ($rec) use ($message) {
+            return strpos($rec['message'], $message) !== false;
+        }, $level);
+    }
+
+    public function hasRecordThatMatches($regex, $level)
+    {
+        return $this->hasRecordThatPasses(function ($rec) use ($regex) {
+            return preg_match($regex, $rec['message']) > 0;
+        }, $level);
+    }
+
+    public function hasRecordThatPasses(callable $predicate, $level)
+    {
+        if (!isset($this->recordsByLevel[$level])) {
+            return false;
+        }
+        foreach ($this->recordsByLevel[$level] as $i => $rec) {
+            if (call_user_func($predicate, $rec, $i)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public function __call($method, $args)
+    {
+        if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
+            $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
+            $level = strtolower($matches[2]);
+            if (method_exists($this, $genericMethod)) {
+                $args[] = $level;
+                return call_user_func_array([$this, $genericMethod], $args);
+            }
+        }
+        throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
+    }
+
+    public function reset()
+    {
+        $this->records = [];
+    }
+}
Index: /lib/wpsg_calculation.class.php
===================================================================
--- /lib/wpsg_calculation.class.php	(revision 7220)
+++ /lib/wpsg_calculation.class.php	(revision 7221)
@@ -323,4 +323,5 @@
 						'tax' => 0
 					],
+					'tax' => [],
 					'product' => []
             	];
Index: /mods/wpsg_mod_paypal.class.php
===================================================================
--- /mods/wpsg_mod_paypal.class.php	(revision 7220)
+++ /mods/wpsg_mod_paypal.class.php	(revision 7221)
@@ -971,4 +971,10 @@
 				if (file_exists($path)) require_once($path);
 					
+			} else if (substr($class, 0, 4) == "Psr\\") {
+				
+				$path = WPSG_PATH_LIB.str_replace("\\", DIRECTORY_SEPARATOR, $class).'.php';
+				
+				if (file_exists($path)) require_once($path);
+				
 			}
 				
