diff --git a/modules/payment_form/src/Entity/Payment/PaymentForm.php b/modules/payment_form/src/Entity/Payment/PaymentForm.php
index e2e90f2..9a9bcdb 100644
--- a/modules/payment_form/src/Entity/Payment/PaymentForm.php
+++ b/modules/payment_form/src/Entity/Payment/PaymentForm.php
@@ -107,7 +107,7 @@ class PaymentForm extends ContentEntityForm {
     $payment->setPaymentMethod($plugin_selector->getSelectedPlugin());
     $payment->save();
     $result = $payment->execute();
-    if (!$result->hasCompleted()) {
+    if (!$result->isCompleted()) {
       $form_state->setRedirectUrl($result->getCompletionResponse()->getRedirectUrl());
     }
   }
diff --git a/modules/payment_form/tests/src/Unit/Entity/Payment/PaymentFormTest.php b/modules/payment_form/tests/src/Unit/Entity/Payment/PaymentFormTest.php
index 5d716f5..6a1ac01 100644
--- a/modules/payment_form/tests/src/Unit/Entity/Payment/PaymentFormTest.php
+++ b/modules/payment_form/tests/src/Unit/Entity/Payment/PaymentFormTest.php
@@ -16,7 +16,7 @@ use Drupal\Core\Form\FormState;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 use Drupal\payment\Entity\PaymentInterface;
-use Drupal\payment\PaymentExecutionResultInterface;
+use Drupal\payment\OperationResultInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodManagerInterface;
 use Drupal\payment\Plugin\Payment\Type\PaymentTypeInterface;
@@ -271,7 +271,7 @@ class PaymentFormTest extends UnitTestCase {
     $redirect_url = new Url($this->randomMachineName());
     $response = new Response($redirect_url);
 
-    $result = $this->getMock(PaymentExecutionResultInterface::class);
+    $result = $this->getMock(OperationResultInterface::class);
     $result->expects($this->atLeastOnce())
       ->method('getCompletionResponse')
       ->willReturn($response);
diff --git a/modules/payment_test/src/Plugin/Payment/Method/PaymentTestResponse.php b/modules/payment_test/src/Plugin/Payment/Method/PaymentTestResponse.php
index 7ed756f..a2860a1 100644
--- a/modules/payment_test/src/Plugin/Payment/Method/PaymentTestResponse.php
+++ b/modules/payment_test/src/Plugin/Payment/Method/PaymentTestResponse.php
@@ -7,7 +7,7 @@
 namespace Drupal\payment_test\Plugin\Payment\Method;
 
 use Drupal\Core\Url;
-use Drupal\payment\PaymentExecutionResult;
+use Drupal\payment\OperationResult;
 use Drupal\payment\Response\Response;
 
 /**
@@ -26,7 +26,7 @@ class PaymentTestResponse extends PaymentTestNoResponse {
    * {@inheritdoc}
    */
   public function getPaymentExecutionResult() {
-    return new PaymentExecutionResult(new Response(Url::fromUri('http://example.com')));
+    return new OperationResult(new Response(Url::fromUri('http://example.com')));
   }
 
 }
diff --git a/src/Element/PaymentReferenceBase.php b/src/Element/PaymentReferenceBase.php
index 7964782..505c5d7 100644
--- a/src/Element/PaymentReferenceBase.php
+++ b/src/Element/PaymentReferenceBase.php
@@ -276,12 +276,12 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
       '#type' => 'payment_line_items_display',
     );
     $build['payment_method'] = $plugin_selector->buildSelectorForm([], $form_state);
-    if ($selected_payment_method && !$selected_payment_method->getPaymentExecutionResult()->hasCompleted()) {
+    if ($selected_payment_method && !$selected_payment_method->getPaymentExecutionResult()->isCompleted()) {
       $this->disableChildren($build['payment_method']);
     }
     $this->getEntityFormDisplay($element, $form_state)->buildForm($this->getPayment($element, $form_state), $build, $form_state);
     $build['pay_link'] = $this->buildCompletePaymentLink($element, $form_state);
-    $build['pay_link']['#access'] = !$selected_payment_method || !$selected_payment_method->getPaymentExecutionResult()->hasCompleted();
+    $build['pay_link']['#access'] = !$selected_payment_method || !$selected_payment_method->getPaymentExecutionResult()->isCompleted();
     $build['pay_link']['#process'] = array(array(get_class($this), 'processMaxWeight'));
     $plugin_id = $this->getPluginId();
     $build['pay_button'] = array(
@@ -329,7 +329,7 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
     $selected_payment_method = $plugin_selector->getSelectedPlugin();
     if (!$element['#default_value']
       && $element['#available_payment_id']
-      && (!$selected_payment_method || !$selected_payment_method->getPaymentExecutionResult()->hasCompleted())) {
+      && (!$selected_payment_method || !$selected_payment_method->getPaymentExecutionResult()->isCompleted())) {
       $class[] = 'payment-reference-hidden';
     }
     $plugin_id = $this->getPluginId();
@@ -475,7 +475,7 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
 
     $payment->save();
     $result = $payment->execute();
-    if (!$result->hasCompleted() && !$this->requestStack->getCurrentRequest()->isXmlHttpRequest()) {
+    if (!$result->isCompleted() && !$this->requestStack->getCurrentRequest()->isXmlHttpRequest()) {
       $url = $payment->urlInfo('complete');
       $url->setOption('attributes', [
         'target' => '_blank',
@@ -500,7 +500,7 @@ abstract class PaymentReferenceBase extends FormElement implements FormElementIn
     /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface $selected_payment_method */
     $selected_payment_method = $this->getPluginSelector($root_element, $form_state)->getSelectedPlugin();
 
-    if (!$selected_payment_method->getPaymentExecutionResult()->hasCompleted()) {
+    if (!$selected_payment_method->getPaymentExecutionResult()->isCompleted()) {
       $link = $this->buildCompletePaymentLink($root_element, $form_state);
       $response->addCommand(new OpenModalDialogCommand($this->t('Complete payment'), $this->renderer->render($link)));
     }
diff --git a/src/Entity/Payment/PaymentAccessControlHandler.php b/src/Entity/Payment/PaymentAccessControlHandler.php
index 3bf39d9..375d359 100644
--- a/src/Entity/Payment/PaymentAccessControlHandler.php
+++ b/src/Entity/Payment/PaymentAccessControlHandler.php
@@ -53,7 +53,7 @@ class PaymentAccessControlHandler extends EntityAccessControlHandler {
     elseif ($operation == 'complete') {
       if ($payment->getPaymentMethod()) {
         return AccessResult::allowedIf($payment->getOwnerId() == $account->id())
-          ->orIf(AccessResult::forbiddenIf($payment->getPaymentMethod()->getPaymentExecutionResult()->hasCompleted()));
+          ->orIf(AccessResult::forbiddenIf($payment->getPaymentMethod()->getPaymentExecutionResult()->isCompleted()));
       }
       else {
         return AccessResult::forbidden();
diff --git a/src/Entity/PaymentInterface.php b/src/Entity/PaymentInterface.php
index 414b586..9e3c2b0 100644
--- a/src/Entity/PaymentInterface.php
+++ b/src/Entity/PaymentInterface.php
@@ -22,7 +22,7 @@ interface PaymentInterface extends ContentEntityInterface, EntityChangedInterfac
   /**
    * Executes the payment.
    *
-   * @return \Drupal\payment\PaymentExecutionResultInterface
+   * @return \Drupal\payment\OperationResultInterface
    */
   public function execute();
 
diff --git a/src/PaymentExecutionResult.php b/src/OperationResult.php
similarity index 71%
rename from src/PaymentExecutionResult.php
rename to src/OperationResult.php
index eb5727e..0a9f7b0 100644
--- a/src/PaymentExecutionResult.php
+++ b/src/OperationResult.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\payment\PaymentExecutionResult.
+ * Contains \Drupal\payment\OperationResult.
  */
 
 namespace Drupal\payment;
@@ -10,9 +10,9 @@ namespace Drupal\payment;
 use Drupal\payment\Response\ResponseInterface;
 
 /**
- * Provides a payment execution result.
+ * Provides an operation result.
  */
-class PaymentExecutionResult implements PaymentExecutionResultInterface {
+class OperationResult implements OperationResultInterface {
 
   /**
    * The response.
@@ -25,7 +25,7 @@ class PaymentExecutionResult implements PaymentExecutionResultInterface {
    * Creates a new instance.
    *
    * @param \Drupal\payment\Response\ResponseInterface|null $response
-   *   A response or NULL if execution has completed.
+   *   A response or NULL if the operation is completed.
    */
   public function __construct(ResponseInterface $response = NULL) {
     $this->response = $response;
@@ -34,7 +34,7 @@ class PaymentExecutionResult implements PaymentExecutionResultInterface {
   /**
    * {@inheritdoc}
    */
-  public function hasCompleted() {
+  public function isCompleted() {
     return is_null($this->response);
   }
 
diff --git a/src/OperationResultInterface.php b/src/OperationResultInterface.php
new file mode 100644
index 0000000..e65c7dc
--- /dev/null
+++ b/src/OperationResultInterface.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\payment\OperationResultInterface.
+ */
+
+namespace Drupal\payment;
+
+/**
+ * Defines an operation result.
+ *
+ * When operations can be initialized programmatically, but may require human
+ * interaction to be completed, this interface provides calling code with
+ * information to continue the human part of the operation.
+ */
+interface OperationResultInterface {
+
+  /**
+   * Gets whether the operation is completed.
+   *
+   * @return bool
+   *   Whether the operation is completed. When FALSE is returned,
+   *   self::getCompletionResponse() MUST return a response.
+   */
+  public function isCompleted();
+
+  /**
+   * Gets the response to complete the operation.
+   *
+   * @return \Drupal\payment\Response\ResponseInterface|null
+   *   A response (only if self::isInProgress() returns TRUE) or NULL if the
+   *   operation cannot be completed (anymore).
+   */
+  public function getCompletionResponse();
+
+}
diff --git a/src/PaymentExecutionResultInterface.php b/src/PaymentExecutionResultInterface.php
deleted file mode 100644
index f6e0c5a..0000000
--- a/src/PaymentExecutionResultInterface.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\payment\PaymentExecutionResultInterface.
- */
-
-namespace Drupal\payment;
-
-/**
- * Defines a payment execution result.
- *
- * This interface has nothing to do with payment statuses. Instead, it provides
- * information about a payment's execution workflow, during which the payment's
- * status can, but does not have to be changed.
- */
-interface PaymentExecutionResultInterface {
-
-  /**
-   * Checks whether the execution process has completed.
-   *
-   * @return bool
-   *   Whether the execution process is has completed. When FALSE is
-   *   returned, self::getCompletionResponse() MUST return a response.
-   */
-  public function hasCompleted();
-
-  /**
-   * Gets the response to complete payment execution.
-   *
-   * @return \Drupal\payment\Response\ResponseInterface|null
-   *   A response (only if self::isInProgress() returns TRUE) or NULL if payment
-   *   execution cannot be completed (anymore).
-   */
-  public function getCompletionResponse();
-
-}
diff --git a/src/Plugin/Payment/Method/PaymentMethodBase.php b/src/Plugin/Payment/Method/PaymentMethodBase.php
index 3012301..3418ebf 100644
--- a/src/Plugin/Payment/Method/PaymentMethodBase.php
+++ b/src/Plugin/Payment/Method/PaymentMethodBase.php
@@ -18,7 +18,7 @@ use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Utility\Token;
 use Drupal\payment\EventDispatcherInterface;
 use Drupal\payment\PaymentAwareTrait;
-use Drupal\payment\PaymentExecutionResult;
+use Drupal\payment\OperationResult;
 use Drupal\payment\Plugin\Payment\Status\PaymentStatusManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -251,7 +251,7 @@ abstract class PaymentMethodBase extends PluginBase implements ContainerFactoryP
    * {@inheritdoc}
    */
   public function getPaymentExecutionResult() {
-    return new PaymentExecutionResult();
+    return new OperationResult();
   }
 
   /**
diff --git a/src/Plugin/Payment/Method/PaymentMethodInterface.php b/src/Plugin/Payment/Method/PaymentMethodInterface.php
index 89a7951..2a8adac 100644
--- a/src/Plugin/Payment/Method/PaymentMethodInterface.php
+++ b/src/Plugin/Payment/Method/PaymentMethodInterface.php
@@ -49,7 +49,7 @@ interface PaymentMethodInterface extends PluginInspectionInterface, Configurable
    * This method MUST set the payment's status to "payment_pending" before it
    * performs any payment-method-specific logic.
    *
-   * @return \Drupal\payment\PaymentExecutionResultInterface
+   * @return \Drupal\payment\OperationResultInterface
    *
    * @see self::executePaymentAccess
    */
@@ -58,7 +58,7 @@ interface PaymentMethodInterface extends PluginInspectionInterface, Configurable
   /**
    * Gets the payment execution status.
    *
-   * @return \Drupal\payment\PaymentExecutionResultInterface
+   * @return \Drupal\payment\OperationResultInterface
    */
   public function getPaymentExecutionResult();
 
diff --git a/src/Plugin/Payment/Method/Unavailable.php b/src/Plugin/Payment/Method/Unavailable.php
index bd60b1e..d8427f9 100644
--- a/src/Plugin/Payment/Method/Unavailable.php
+++ b/src/Plugin/Payment/Method/Unavailable.php
@@ -11,7 +11,7 @@ use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\payment\Entity\PaymentInterface;
-use Drupal\payment\PaymentExecutionResult;
+use Drupal\payment\OperationResult;
 
 /**
  * A payment method controller that essentially disables payment methods.
@@ -75,7 +75,7 @@ class Unavailable extends PluginBase implements PaymentMethodInterface {
    * {@inheritdoc}
    */
   public function getPaymentExecutionResult() {
-    return new PaymentExecutionResult();
+    return new OperationResult();
   }
 
   /**
diff --git a/tests/src/Unit/Controller/CompletePaymentTest.php b/tests/src/Unit/Controller/CompletePaymentTest.php
index 8f4e3ce..2206841 100644
--- a/tests/src/Unit/Controller/CompletePaymentTest.php
+++ b/tests/src/Unit/Controller/CompletePaymentTest.php
@@ -9,7 +9,7 @@ namespace Drupal\Tests\payment\Unit\Controller;
 
 use Drupal\payment\Controller\CompletePayment;
 use Drupal\payment\Entity\PaymentInterface;
-use Drupal\payment\PaymentExecutionResultInterface;
+use Drupal\payment\OperationResultInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface;
 use Drupal\payment\Response\ResponseInterface;
 use Drupal\Tests\UnitTestCase;
@@ -49,7 +49,7 @@ class CompletePaymentTest extends UnitTestCase {
       ->method('getResponse')
       ->willReturn($response);
 
-    $execution_result = $this->getMock(PaymentExecutionResultInterface::class);
+    $execution_result = $this->getMock(OperationResultInterface::class);
     $execution_result->expects($this->atLeastOnce())
       ->method('getCompletionResponse')
       ->willReturn($completion_response);
diff --git a/tests/src/Unit/Element/PaymentReferenceBaseTest.php b/tests/src/Unit/Element/PaymentReferenceBaseTest.php
index ceb7abc..a0b4efd 100644
--- a/tests/src/Unit/Element/PaymentReferenceBaseTest.php
+++ b/tests/src/Unit/Element/PaymentReferenceBaseTest.php
@@ -25,7 +25,7 @@ namespace Drupal\Tests\payment\Unit\Element {
   use Drupal\currency\Entity\CurrencyInterface;
   use Drupal\payment\Element\PaymentReferenceBase;
   use Drupal\payment\Entity\PaymentInterface;
-  use Drupal\payment\PaymentExecutionResultInterface;
+  use Drupal\payment\OperationResultInterface;
   use Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface;
   use Drupal\payment\Plugin\Payment\Method\PaymentMethodManagerInterface;
   use Drupal\payment\Plugin\Payment\Status\PaymentStatusInterface;
@@ -305,9 +305,9 @@ namespace Drupal\Tests\payment\Unit\Element {
 
       $url = new Url($this->randomMachineName());
 
-      $result = $this->getMock(PaymentExecutionResultInterface::class);
+      $result = $this->getMock(OperationResultInterface::class);
       $result->expects($this->atLeastOnce())
-        ->method('hasCompleted')
+        ->method('isCompleted')
         ->willReturn($has_completed);
 
       $payment = $this->getMock(PaymentInterface::class);
@@ -398,13 +398,13 @@ namespace Drupal\Tests\payment\Unit\Element {
      *
      * @dataProvider providerTestAjaxPay
      */
-    public function testAjaxPay($has_completed, $number_of_commands) {
+    public function testAjaxPay($is_completed, $number_of_commands) {
       $payment = $this->getMock(PaymentInterface::class);
 
-      $result = $this->getMock(PaymentExecutionResultInterface::class);
+      $result = $this->getMock(OperationResultInterface::class);
       $result->expects($this->atLeastOnce())
-        ->method('hasCompleted')
-        ->willReturn($has_completed);
+        ->method('isCompleted')
+        ->willReturn($is_completed);
 
       $payment_method = $this->getMock(PaymentMethodInterface::class);
       $payment_method->expects($this->any())
diff --git a/tests/src/Unit/Entity/Payment/PaymentAccessControlHandlerTest.php b/tests/src/Unit/Entity/Payment/PaymentAccessControlHandlerTest.php
index c1418e7..ac0c30d 100644
--- a/tests/src/Unit/Entity/Payment/PaymentAccessControlHandlerTest.php
+++ b/tests/src/Unit/Entity/Payment/PaymentAccessControlHandlerTest.php
@@ -13,7 +13,7 @@ use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\payment\Entity\Payment\PaymentAccessControlHandler;
 use Drupal\payment\Entity\PaymentInterface;
-use Drupal\payment\PaymentExecutionResultInterface;
+use Drupal\payment\OperationResultInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodCapturePaymentInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface;
 use Drupal\payment\Plugin\Payment\Method\PaymentMethodRefundPaymentInterface;
@@ -250,9 +250,9 @@ class PaymentAccessControlHandlerTest extends UnitTestCase {
     $account->expects($this->never())
       ->method('hasPermission');
 
-    $payment_execution_result = $this->getMock(PaymentExecutionResultInterface::class);
+    $payment_execution_result = $this->getMock(OperationResultInterface::class);
     $payment_execution_result->expects($this->any())
-      ->method('hasCompleted')
+      ->method('isCompleted')
       ->willReturn($payment_execution_has_completed);
 
     $payment_method = $this->getMock(PaymentAccessUnitTestDummyPaymentMethodUpdateStatusInterface::class);
diff --git a/tests/src/Unit/PaymentExecutionResultTest.php b/tests/src/Unit/PaymentExecutionResultTest.php
index aa668a0..b9c711e 100644
--- a/tests/src/Unit/PaymentExecutionResultTest.php
+++ b/tests/src/Unit/PaymentExecutionResultTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Tests\payment\Unit;
 
-use Drupal\payment\PaymentExecutionResult;
+use Drupal\payment\OperationResult;
 use Drupal\payment\Response\ResponseInterface;
 use Drupal\Tests\UnitTestCase;
 
@@ -28,7 +28,7 @@ class PaymentExecutionResultTest extends UnitTestCase {
   /**
    * The class under test.
    *
-   * @var \Drupal\payment\PaymentExecutionResult
+   * @var \Drupal\payment\OperationResult
    */
   protected $sut;
 
@@ -44,11 +44,11 @@ class PaymentExecutionResultTest extends UnitTestCase {
    * @covers ::__construct
    */
   function testHasCompleted() {
-    $this->sut = new PaymentExecutionResult();
-    $this->assertTrue($this->sut->hasCompleted());
+    $this->sut = new OperationResult();
+    $this->assertTrue($this->sut->isCompleted());
 
-    $this->sut = new PaymentExecutionResult($this->response);
-    $this->assertFalse($this->sut->hasCompleted());
+    $this->sut = new OperationResult($this->response);
+    $this->assertFalse($this->sut->isCompleted());
   }
 
   /**
@@ -56,10 +56,10 @@ class PaymentExecutionResultTest extends UnitTestCase {
    * @covers ::__construct
    */
   function testGetCompletionResponse() {
-    $this->sut = new PaymentExecutionResult();
+    $this->sut = new OperationResult();
     $this->assertNULL($this->sut->getCompletionResponse());
 
-    $this->sut = new PaymentExecutionResult($this->response);
+    $this->sut = new OperationResult($this->response);
     $this->assertSame($this->response, $this->sut->getCompletionResponse());
   }
 
