anchor.diff:  
   * The `buildFormDescriptor` method accepts  `Iterable<PluginProperty> properties` as a parameter. As explained above, a `PluginProperty` can be used to pass a plugin specific key-value pair to a plugin. 
   
  -* The code first retrieves the `successRedirectUrl`, `redirectFlowDescription` and `sessionToken` sent by the client application from the `properties` passed in. As explaind earlier, a client application needs to send a `successRedirectUrl`. The  `redirectFlowDescription` and `sessionToken` are GoCardless specific values, so the `buildFormDescriptor` method passes these values to the corresponding GoCardless method
  -
  -* Next, the `client.redirectFlows().create()` is invoked which returns  a `RedirectFlow` object. The `RedirectFlow` object contains the *redirect URL*. 
  +* The code first retrieves the `successRedirectUrl`, `redirectFlowDescription` and `sessionToken` sent by the client application from the `properties` passed in. As explaind earlier, a client application needs to send a `successRedirectUrl`. The  `redirectFlowDescription` and `sessionToken` are GoCardless specific values.
  +
  +* Next, the `client.redirectFlows().create()` is invoked with the `successRedirectUrl`, `redirectFlowDescription` and `sessionToken`. This returns  a `RedirectFlow` object. The `RedirectFlow` object contains the *redirect URL*. 
   
   * Finally, a `HostedPaymentPageFormDescriptor` object is created using the *redirect URL* and the *Kill Bill Account Id*. This is then returned to the client application.
   
   
   ==== Step 5 - Implementing https://github.com/killbill/killbill-gocardless-example-plugin/blob/9522498ecde5849c940574c598ceb5ce088d32a7/src/main/java/org/killbill/billing/plugin/gocardless/GoCardlessPaymentPluginApi.java#L223[GoCardlessPaymentPluginApi#addPaymentMethod]
   
  -The addPayment method is typically used to add a payment method in Kill Bill corresponding to a customer/account. In the case of GoCardless, we will be using it to *complete* the *redirect flow*. So, this method can be implemented as follows:
  +The `addPaymentMethod` is typically used to add a payment method in Kill Bill corresponding to a customer/account. In the case of GoCardless, we will be using it to *complete* the *redirect flow*. So, this method can be implemented as follows:
   
   [source,java,linenums]
   public void addPaymentMethod(UUID kbAccountId, UUID kbPaymentMethodId, PaymentMethodPlugin paymentMethodProps,
  
positive.code: 	return paymentTransactionInfoPlugin;
  }
  
  * Like the other methods, the `purchasePayment` method accepts  `Iterable<PluginProperty> properties` as a parameter. This can be used to pass properties which are related to the `purchasePayment` call.
  
  * In addition, it also accepts parameters corresponding to `amount` (specifies the amount to charge the customer) and `currency` (specifies the currency to be used)
  
  * If you recall, the `addPaymentMethod` stores the *mandate id* in the Kill Bill database. This is first retrieved and assigned to `mandate` 
  
  * Next, the `idempotencyKey` is retrieved from the `properties` passed in. The  `idempotencyKey` is a GoCardless specific value, so the `purchasePayment` method passes it to the corresponding GoCardless method
  
  *  The `currency` object passed in is of type `org.killbill.billing.catalog.api.Currency`. This is then converted to a *GoCardless Currency object* (of type `com.gocardless.services.PaymentService.PaymentCreateRequest.Currency`). Most payment plugins have code similar to this to convert Kill Bill objects to compatible objects in the plugin's client library.
  
  * Finally, the `client.payments().create()` is invoked with the `amount` and `currency` values. This returns a `Payment` object which contains a `paymentId`
  
  * The `purchasePayment` method returns a `PaymentTransactionInfoPlugin` object.  The <<PaymentTransactionInfoPlugin>> section above explaind this interface in detail. In this case, we have created a `GoCardlessPaymentTransactionInfoPlugin` class. 
  
  * If the payment is successful, the `GoCardlessPaymentTransactionInfoPlugin` object is created with the following values:
  
  ** *kbPaymentId* - Set to `kbPaymentId`. It corresponds to the Kill Bill payment id. 
  
  ** *kbTransactionId* - Set to `kbTransactionId`. Tt corresponds to the Kill Bill transaction id. 
  
  ** *TransactionType* - Set to `TransactionType.PURCHASE` since this is a purchase transaction
  
  
negative.code: ** `GC_ACCESS_TOKEN_PROPERTY` - This is a String field that is required for accessing the GoCardless access token
  ** `clock` - This is of type https://github.com/killbill/killbill-commons/blob/aa83708f56377aabff8391c3ddc197817ad19ec2/clock/src/main/java/org/killbill/clock/Clock.java[Clock]. This is part of Kill Bill's clock library.
  
  ** `client` This is of type http://gocardless.github.io/gocardless-pro-java/com/gocardless/GoCardlessClient.html[GoCardlessClient]. This is a GoCardless specific class that can be used to access the GoCardless API
  
  * The constructor simply initializes the fields with the values passed in. In addition, it also creates a GoCardless client and initializes the `client` field 
  
  