diff --git a/payment/src/Plugin/Payment/Method/Basic.php b/payment/src/Plugin/Payment/Method/Basic.php
index 412d6d7..64612a0 100644
--- a/payment/src/Plugin/Payment/Method/Basic.php
+++ b/payment/src/Plugin/Payment/Method/Basic.php
@@ -142,7 +142,7 @@ class Basic extends PaymentMethodBase implements ContainerFactoryPluginInterface
   /**
    * {@inheritdoc}
    */
-  public function isPaymentExecutionInterruptive() {
+  public function executePaymentReturnsResponse() {
     return FALSE;
   }
 
diff --git a/payment/src/Plugin/Payment/Method/PaymentMethodBase.php b/payment/src/Plugin/Payment/Method/PaymentMethodBase.php
index 4291475..a6bee39 100644
--- a/payment/src/Plugin/Payment/Method/PaymentMethodBase.php
+++ b/payment/src/Plugin/Payment/Method/PaymentMethodBase.php
@@ -177,14 +177,6 @@ abstract class PaymentMethodBase extends PluginBase implements ContainerFactoryP
   /**
    * {@inheritdoc}
    */
-  public function isPaymentExecutionInterruptive() {
-    // To be on the safe side, we assume any payment method is interruptive.
-    return TRUE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function executePaymentAccess(AccountInterface $account) {
     if (!$this->getPayment()) {
       throw new \LogicException('Trying to check access for a non-existing payment. A payment must be set trough self::setPayment() first.');
diff --git a/payment/src/Plugin/Payment/Method/PaymentMethodInterface.php b/payment/src/Plugin/Payment/Method/PaymentMethodInterface.php
index 3e45743..ca088e6 100644
--- a/payment/src/Plugin/Payment/Method/PaymentMethodInterface.php
+++ b/payment/src/Plugin/Payment/Method/PaymentMethodInterface.php
@@ -45,19 +45,25 @@ interface PaymentMethodInterface extends PluginInspectionInterface, Configurable
    * When executing a payment, it may be authorized, or authorized and captured.
    *
    * @see self::executePaymentAccess
+   * @see self::executePaymentReturnsResponse
+   *
+   * @return null|\Symfony\Component\HttpFoundation\Response
+   *   Executing this method must either result in a response being returned or
+   *   self::getPayment()->getPaymentType()->resumeContext() being called. If a
+   *   response is returned, the caller code must let it bubble up to the
+   *   controller. It is the payment method's responsibility to only return a
+   *   response if there is a request.
+   *   If a response is returned, its processing by the controller must result
+   *   in self::getPayment()->getPaymentType()->resumeContext() being called.
    */
   public function executePayment();
 
   /**
-   * Whether payment execution interrupts the payment type's context.
-   *
-   * If payment execution interrupts the context's workflow, this must return
-   * TRUE. An example of an interruption is when the payer must be redirected
-   * off-site.
+   * Whether self::executePayment() returns an HTTP response object.
    *
    * @return bool
    */
-  public function isPaymentExecutionInterruptive();
+  public function executePaymentReturnsResponse();
 
   /**
    * Gets the payment this payment method is for.
diff --git a/payment/src/Plugin/Payment/Method/Unavailable.php b/payment/src/Plugin/Payment/Method/Unavailable.php
index 7ec1fa2..202ed74 100644
--- a/payment/src/Plugin/Payment/Method/Unavailable.php
+++ b/payment/src/Plugin/Payment/Method/Unavailable.php
@@ -72,7 +72,7 @@ class Unavailable extends PluginBase implements PaymentMethodInterface {
   /**
    * {@inheritdoc}
    */
-  public function isPaymentExecutionInterruptive() {
+  public function executePaymentReturnsResponse() {
     return FALSE;
   }
 
diff --git a/payment/src/Plugin/Payment/Type/PaymentTypeBase.php b/payment/src/Plugin/Payment/Type/PaymentTypeBase.php
index e18c275..d3ed6e1 100644
--- a/payment/src/Plugin/Payment/Type/PaymentTypeBase.php
+++ b/payment/src/Plugin/Payment/Type/PaymentTypeBase.php
@@ -111,11 +111,14 @@ abstract class PaymentTypeBase extends PluginBase implements ContainerFactoryPlu
     $event = new PaymentTypePreResumeContext($this->getPayment());
     $this->eventDispatcher->dispatch(PaymentEvents::PAYMENT_TYPE_PRE_RESUME_CONTEXT, $event);
     // @todo Invoke Rules event.
-    $this->doResumeContext();
+    return $this->doResumeContext();
   }
 
   /**
    * Performs the actual context resumption.
+   *
+   * @return \Symfony\Component\HttpFoundation\Response
+   *   The caller code must let the response bubble up to the controller.
    */
   abstract protected function doResumeContext();
 
diff --git a/payment/src/Plugin/Payment/Type/PaymentTypeInterface.php b/payment/src/Plugin/Payment/Type/PaymentTypeInterface.php
index 0aff7d7..6713453 100644
--- a/payment/src/Plugin/Payment/Type/PaymentTypeInterface.php
+++ b/payment/src/Plugin/Payment/Type/PaymentTypeInterface.php
@@ -43,7 +43,7 @@ interface PaymentTypeInterface extends PluginInspectionInterface, ConfigurablePl
   public function paymentDescription($language_code = NULL);
 
   /**
-   * Checks if the payment type context can be resumed..
+   * Checks if the payment type context can be resumed.
    *
    * @param \Drupal\Core\Session\AccountInterface $account
    *
@@ -56,6 +56,9 @@ interface PaymentTypeInterface extends PluginInspectionInterface, ConfigurablePl
   /**
    * Resumes the payment context's workflow.
    *
+   * @return \Symfony\Component\HttpFoundation\Response
+   *   The caller code must let the response bubble up to the controller.
+   *
    * @see self::resumeContextAccess
    */
   public function resumeContext();
diff --git a/payment_form/src/Plugin/Payment/Type/PaymentForm.php b/payment_form/src/Plugin/Payment/Type/PaymentForm.php
index 1031cb8..c46d530 100644
--- a/payment_form/src/Plugin/Payment/Type/PaymentForm.php
+++ b/payment_form/src/Plugin/Payment/Type/PaymentForm.php
@@ -94,11 +94,7 @@ class PaymentForm extends PaymentTypeBase implements ContainerFactoryPluginInter
    * {@inheritdoc}
    */
   protected function doResumeContext() {
-    $response = new RedirectResponse($this->getDestinationUrl());
-    $listener = function(FilterResponseEvent $event) use ($response) {
-      $event->setResponse($response);
-    };
-    $this->eventDispatcher->addListener(KernelEvents::RESPONSE, $listener, 999);
+    return new RedirectResponse($this->getDestinationUrl());
   }
 
   /**
diff --git a/payment_reference/src/Element/PaymentReferenceBase.php b/payment_reference/src/Element/PaymentReferenceBase.php
index b12d9e8..dd35c02 100644
--- a/payment_reference/src/Element/PaymentReferenceBase.php
+++ b/payment_reference/src/Element/PaymentReferenceBase.php
@@ -465,7 +465,7 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
     $payment = $payment_method_selector->getPayment();
     $payment_method = $payment_method_selector->getPaymentMethod();
     $payment->setPaymentMethod($payment_method);
-    if ($payment_method->isPaymentExecutionInterruptive()) {
+    if ($payment_method->executePaymentReturnsResponse()) {
       $this->setTemporaryPayment($root_element, $form_state, $payment);
       if (!$this->requestStack->getCurrentRequest()->isXmlHttpRequest()) {
         $link = $this->linkGenerator->generate($this->t('Complete payment (opens in a new window).'), new Url('payment_reference.pay', array(
@@ -496,7 +496,7 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
     $response = new AjaxResponse();
     $response->addCommand(new ReplaceCommand('#' . $root_element['container']['#id'], drupal_render($root_element['container'])));
 
-    if ($this->getPaymentMethodSelector($root_element, $form_state)->getPaymentMethod()->isPaymentExecutionInterruptive()) {
+    if ($this->getPaymentMethodSelector($root_element, $form_state)->getPaymentMethod()->executePaymentReturnsResponse()) {
       $link = $this->buildCompletePaymentLink($root_element, $form_state);
       $response->addCommand(new OpenModalDialogCommand($this->t('Complete payment'), drupal_render($link)));
     }
diff --git a/payment_reference/src/Plugin/Payment/Type/PaymentReference.php b/payment_reference/src/Plugin/Payment/Type/PaymentReference.php
index 5947555..0c96e5a 100644
--- a/payment_reference/src/Plugin/Payment/Type/PaymentReference.php
+++ b/payment_reference/src/Plugin/Payment/Type/PaymentReference.php
@@ -102,7 +102,7 @@ class PaymentReference extends PaymentTypeBase implements ContainerFactoryPlugin
     // If the payment method does not interrupt the payment type context, the
     // payer is still in the original context and we do not need to redirect
     // them back.
-    if ($this->getPayment()->getPaymentMethod()->isPaymentExecutionInterruptive()) {
+    if ($this->getPayment()->getPaymentMethod()->executePaymentReturnsResponse()) {
       $url = $this->urlGenerator->generateFromRoute('payment_reference.resume_context', array(
         'payment' => $this->getPayment()->id(),
       ), array(
diff --git a/payment_reference/src/Tests/Element/PaymentReferenceWebTest.php b/payment_reference/src/Tests/Element/PaymentReferenceWebTest.php
index c8f2515..caf4aaf 100644
--- a/payment_reference/src/Tests/Element/PaymentReferenceWebTest.php
+++ b/payment_reference/src/Tests/Element/PaymentReferenceWebTest.php
@@ -86,10 +86,10 @@ class PaymentReferenceWebTest extends WebTestBase {
     $value = $state->get('payment_reference_test_payment_reference_element');
     $this->assertNull($value);
 
-    // Test with a non-interruptive payment method.
+    // Test with a payment method that does not return a response.
     $text_field_value = $this->randomMachineName();
     $this->drupalPostForm($path, array(
-      'payment_reference[container][payment_form][payment_method][container][select][container][payment_method_id]' => 'payment_test_uninterruptive',
+      'payment_reference[container][payment_form][payment_method][container][select][container][payment_method_id]' => 'payment_test_execution_returns_no_response',
       'payment_reference[container][payment_form][quxfoobar][0][value]' => $text_field_value,
     ), t('Choose payment method'));
     $this->drupalPostForm(NULL, array(), t('Pay'));
@@ -101,12 +101,12 @@ class PaymentReferenceWebTest extends WebTestBase {
     $this->assertTrue($payment instanceof PaymentInterface);
     $this->assertEqual($payment->get('quxfoobar')[0]->get('value')->getValue(), $text_field_value);
 
-    // Test with an interruptive payment method.
+    // Test with a payment method that returns a response.
     $text_field_value = $this->randomMachineName();
     // @todo Once Behat is supported, test the behavior of opening a new window
     //   and going back to the original form.
     $this->drupalPostForm($path, array(
-      'payment_reference[container][payment_form][payment_method][container][select][container][payment_method_id]' => 'payment_test_interruptive',
+      'payment_reference[container][payment_form][payment_method][container][select][container][payment_method_id]' => 'payment_test_execution_returns_response',
       'payment_reference[container][payment_form][quxfoobar][0][value]' => $text_field_value,
     ), t('Choose payment method'));
     $this->drupalPostForm(NULL, array(), t('Pay'));
diff --git a/payment_reference/tests/src/Unit/Element/PaymentReferenceBaseUnitTest.php b/payment_reference/tests/src/Unit/Element/PaymentReferenceBaseUnitTest.php
index b3e067f..f33f3f7 100644
--- a/payment_reference/tests/src/Unit/Element/PaymentReferenceBaseUnitTest.php
+++ b/payment_reference/tests/src/Unit/Element/PaymentReferenceBaseUnitTest.php
@@ -323,7 +323,7 @@ class PaymentReferenceBaseUnitTest extends UnitTestCase {
    *
    * @dataProvider providerTestPay
    */
-  public function testPay($is_payment_execution_interruptive, $is_xml_http_request) {
+  public function testPay($payment_execution_returns_response, $is_xml_http_request) {
     $configuration = array();
     $plugin_id = $this->randomMachineName();
     $this->pluginDefinition = array();
@@ -361,25 +361,25 @@ class PaymentReferenceBaseUnitTest extends UnitTestCase {
     $request = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Request')
       ->disableOriginalConstructor()
       ->getMock();
-    $request->expects($is_payment_execution_interruptive ? $this->atLeastOnce() : $this->never())
+    $request->expects($payment_execution_returns_response ? $this->atLeastOnce() : $this->never())
       ->method('isXmlHttpRequest')
       ->willReturn($is_xml_http_request);
 
-    $this->requestStack->expects($is_payment_execution_interruptive ? $this->atLeastOnce() : $this->never())
+    $this->requestStack->expects($payment_execution_returns_response ? $this->atLeastOnce() : $this->never())
       ->method('getCurrentRequest')
       ->willReturn($request);
 
     $payment_method = $this->getMock('\Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface');
     $payment_method->expects($this->atLeastOnce())
-      ->method('isPaymentExecutionInterruptive')
-      ->willReturn($is_payment_execution_interruptive);
+      ->method('executePaymentReturnsResponse')
+      ->willReturn($payment_execution_returns_response);
 
     $payment = $this->getMockBuilder('\Drupal\payment\Entity\Payment')
       ->disableOriginalConstructor()
       ->getMock();
-    $payment->expects($is_payment_execution_interruptive ? $this->never() : $this->once())
+    $payment->expects($payment_execution_returns_response ? $this->never() : $this->once())
       ->method('execute');
-    $payment->expects($is_payment_execution_interruptive ? $this->never() : $this->once())
+    $payment->expects($payment_execution_returns_response ? $this->never() : $this->once())
       ->method('save');
     $payment->expects($this->once())
       ->method('setPaymentMethod')
@@ -407,7 +407,7 @@ class PaymentReferenceBaseUnitTest extends UnitTestCase {
     $this->element->expects($this->atLeastOnce())
       ->method('getPaymentMethodSelector')
       ->willReturn($payment_method_selector);
-    $this->element->expects($is_payment_execution_interruptive ? $this->once() : $this->never())
+    $this->element->expects($payment_execution_returns_response ? $this->once() : $this->never())
       ->method('setTemporaryPayment')
       ->with($form['foo']['bar'], $form_state, $payment);
 
@@ -430,7 +430,7 @@ class PaymentReferenceBaseUnitTest extends UnitTestCase {
    *
    * @dataProvider providerTestAjaxPay
    */
-  public function testAjaxPay($is_payment_execution_interruptive, $number_of_commands) {
+  public function testAjaxPay($payment_execution_returns_response, $number_of_commands) {
     $payment = $this->getMockBuilder('\Drupal\payment\Entity\Payment')
       ->disableOriginalConstructor()
       ->getMock();
@@ -440,8 +440,8 @@ class PaymentReferenceBaseUnitTest extends UnitTestCase {
 
     $payment_method = $this->getMock('\Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface');
     $payment_method->expects($this->once())
-      ->method('isPaymentExecutionInterruptive')
-      ->willReturn($is_payment_execution_interruptive);
+      ->method('executePaymentReturnsResponse')
+      ->willReturn($payment_execution_returns_response);
 
     $payment_method_selector_plugin_id = $this->randomMachineName();
 
diff --git a/payment_reference/tests/src/Unit/Plugin/Payment/Type/PaymentReferenceUnitTest.php b/payment_reference/tests/src/Unit/Plugin/Payment/Type/PaymentReferenceUnitTest.php
index c9d99f6..4a59a6d 100644
--- a/payment_reference/tests/src/Unit/Plugin/Payment/Type/PaymentReferenceUnitTest.php
+++ b/payment_reference/tests/src/Unit/Plugin/Payment/Type/PaymentReferenceUnitTest.php
@@ -234,26 +234,27 @@ class PaymentReferenceUnitTest extends UnitTestCase {
   /**
    * @covers ::doResumeContext
    */
-  public function testDoResumeContextWithoutInterruption() {
+  public function testDoResumeContextWithExecutionReturnsNoResponse() {
     $payment_method = $this->getMock('\Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface');
 
     $this->payment->expects($this->atLeastOnce())
       ->method('getPaymentMethod')
       ->will($this->returnValue($payment_method));
 
-    // Nothing should happen when the payment method is not interruptive.
+    // Nothing should happen when the payment method is does not return a
+    // response.
     $this->paymentType->resumeContext();
   }
 
   /**
    * @covers ::doResumeContext
    */
-  public function testDoResumeContextWithInterruption() {
+  public function testDoResumeContextWithExecutionReturnsResponse() {
     $url = 'http://example.com';
 
     $payment_method = $this->getMock('\Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface');
     $payment_method->expects($this->atLeastOnce())
-      ->method('isPaymentExecutionInterruptive')
+      ->method('executePaymentReturnsResponse')
       ->will($this->returnValue(TRUE));
 
     $this->payment->expects($this->atLeastOnce())
diff --git a/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsNoResponse.php b/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsNoResponse.php
new file mode 100644
index 0000000..9207e3d
--- /dev/null
+++ b/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsNoResponse.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * Contains \Drupal\payment_test\Plugin\Payment\Method\PaymentTestExecutionReturnsNoResponse.
+ */
+
+namespace Drupal\payment_test\Plugin\Payment\Method;
+
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Utility\Token;
+use Drupal\payment\Plugin\Payment\Method\PaymentMethodBase;
+use Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+
+/**
+ * A testing payment method.
+ *
+ * @PaymentMethod(
+ *   id = "payment_test_execution_returns_no_response",
+ *   label = @Translation("Test method (returns no response)"),
+ *   message_text = "Foo",
+ *   message_text_format = "plain_text"
+ * )
+ */
+class PaymentTestExecutionReturnsNoResponse extends PaymentMethodBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The payment status manager.
+   *
+   * @var \Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface
+   */
+  protected $paymentStatusManager;
+
+  /**
+   * Constructs a new class instance.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
+   *   The event dispatcher.
+   * @param \Drupal\Core\Utility\Token $token
+   *   The token API.
+   * @param \Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface
+   *   The payment status manager.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EventDispatcherInterface $event_dispatcher, Token $token, PaymentStatusManagerInterface $payment_status_manager) {
+    $configuration += $this->defaultConfiguration();
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $event_dispatcher, $token);
+    $this->paymentStatusManager = $payment_status_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($configuration, $plugin_id, $plugin_definition, $container->get('event_dispatcher'), $container->get('token'), $container->get('plugin.manager.payment.status'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function executePaymentReturnsResponse() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getSupportedCurrencies() {
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doExecutePayment() {
+    $this->getPayment()->setPaymentStatus($this->paymentStatusManager->createInstance('payment_success'));
+    $this->getPayment()->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doCapturePayment() {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doCapturePaymentAccess(AccountInterface $account) {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doRefundPayment() {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doRefundPaymentAccess(AccountInterface $account) {
+    return FALSE;
+  }
+
+}
diff --git a/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsResponse.php b/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsResponse.php
new file mode 100644
index 0000000..6489cb1
--- /dev/null
+++ b/payment_test/src/Plugin/Payment/Method/PaymentTestExecutionReturnsResponse.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Contains \Drupal\payment_test\Plugin\Payment\Method\PaymentTest.
+ */
+
+namespace Drupal\payment_test\Plugin\Payment\Method;
+
+use Symfony\Component\HttpFoundation\RedirectResponse;
+
+/**
+ * A testing payment method.
+ *
+ * @PaymentMethod(
+ *   id = "payment_test_execution_returns_no_response",
+ *   label = @Translation("Test method (does not return response)"),
+ *   message_text = "Foo",
+ *   message_text_format = "plain_text"
+ * )
+ */
+class PaymentTestExecutionReturnsResponse extends PaymentTestExecutionReturnsNoResponse {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function executePaymentReturnsResponse() {
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function executePayment() {
+    parent::executePayment();
+    return new RedirectResponse('http://example.com');
+  }
+
+}
diff --git a/payment_test/src/Plugin/Payment/Method/PaymentTestInterruptive.php b/payment_test/src/Plugin/Payment/Method/PaymentTestInterruptive.php
deleted file mode 100644
index 605c4ff..0000000
--- a/payment_test/src/Plugin/Payment/Method/PaymentTestInterruptive.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-/**
- * Contains \Drupal\payment_test\Plugin\Payment\Method\PaymentTest.
- */
-
-namespace Drupal\payment_test\Plugin\Payment\Method;
-
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Utility\Token;
-use Drupal\payment\Plugin\Payment\Method\PaymentMethodBase;
-use Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
-/**
- * A testing payment method.
- *
- * @PaymentMethod(
- *   id = "payment_test_interruptive",
- *   label = @Translation("Test method (interruptive)"),
- *   message_text = "Foo",
- *   message_text_format = "plain_text"
- * )
- */
-class PaymentTestInterruptive extends PaymentMethodBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The payment status manager.
-   *
-   * @var \Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface
-   */
-  protected $paymentStatusManager;
-
-  /**
-   * Constructs a new class instance.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param array $plugin_definition
-   *   The plugin implementation definition.
-   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
-   *   The event dispatcher.
-   * @param \Drupal\Core\Utility\Token $token
-   *   The token API.
-   * @param \Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface
-   *   The payment status manager.
-   */
-  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EventDispatcherInterface $event_dispatcher, Token $token, PaymentStatusManagerInterface $payment_status_manager) {
-    $configuration += $this->defaultConfiguration();
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $event_dispatcher, $token);
-    $this->paymentStatusManager = $payment_status_manager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static($configuration, $plugin_id, $plugin_definition, $container->get('event_dispatcher'), $container->get('token'), $container->get('plugin.manager.payment.status'));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getSupportedCurrencies() {
-    return TRUE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doExecutePayment() {
-    $this->getPayment()->setPaymentStatus($this->paymentStatusManager->createInstance('payment_success'));
-    $this->getPayment()->save();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doCapturePayment() {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doCapturePaymentAccess(AccountInterface $account) {
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doRefundPayment() {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doRefundPaymentAccess(AccountInterface $account) {
-    return FALSE;
-  }
-
-}
diff --git a/payment_test/src/Plugin/Payment/Method/PaymentTestUninterruptive.php b/payment_test/src/Plugin/Payment/Method/PaymentTestUninterruptive.php
deleted file mode 100644
index 2d8448d..0000000
--- a/payment_test/src/Plugin/Payment/Method/PaymentTestUninterruptive.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * Contains \Drupal\payment_test\Plugin\Payment\Method\PaymentTest.
- */
-
-namespace Drupal\payment_test\Plugin\Payment\Method;
-
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Utility\Token;
-use Drupal\payment\Plugin\Payment\Method\PaymentMethodBase;
-use Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
-/**
- * A testing payment method.
- *
- * @PaymentMethod(
- *   id = "payment_test_uninterruptive",
- *   label = @Translation("Test method (uninterruptive)"),
- *   message_text = "Foo",
- *   message_text_format = "plain_text"
- * )
- */
-class PaymentTestUninterruptive extends PaymentTestInterruptive {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isPaymentExecutionInterruptive() {
-    return FALSE;
-  }
-
-}
