@pjedrzejewski I agree on your points. This is quite similar to what Sylius does right now, except it is currently missing the payment to order relation. We are on the same page here. I don't intended to support multiple payments with different amount in this PR.

By the way, I have a question. You said "new payment is created, previous one is set to failed (by Sylius)". May I know will you consider **only let payment gateway change the payment state** (via IPN or whatever). Personally I believe payment state should always reflect the transaction state.

So if the first payment is "Cancelled" (user can cancel before he paid in PayPal), then we should not change it to "Failed". 

Another use case is when we cancel an order in backend. Now Sylius will change payment state to "Void" when an order is cancelled. I suggest we can keep the payment as "Completed" and only cancel the shipment.

What do you think @pjedrzejewski , @winzou ?