diff --git a/payment/lib/Drupal/payment/PaymentProcessingInterface.php b/payment/lib/Drupal/payment/PaymentProcessingInterface.php
index 3a7f468..8cdaf3d 100644
--- a/payment/lib/Drupal/payment/PaymentProcessingInterface.php
+++ b/payment/lib/Drupal/payment/PaymentProcessingInterface.php
@@ -6,7 +6,7 @@
 
 namespace Drupal\payment;
 
-use Drupal\payment\Plugin\Core\entity\Payment;
+use Drupal\payment\Plugin\Core\entity\PaymentInterface;
 
 /**
  * Defines anything that can process payments.
@@ -44,7 +44,7 @@ interface PaymentProcessingInterface {
    *
    * @param Payment $payment
    */
-  public function executePayment(Payment $payment);
+  public function executePayment(PaymentInterface $payment);
 
   /**
    * Validates a payment against a payment method and this controller. Don't
@@ -57,5 +57,5 @@ interface PaymentProcessingInterface {
    *
    * @throws PaymentValidationException
    */
-  public function validatePayment(Payment $payment);
+  public function validatePayment(PaymentInterface $payment);
 }
\ No newline at end of file
diff --git a/payment/lib/Drupal/payment/Plugin/Core/entity/PaymentMethod.php b/payment/lib/Drupal/payment/Plugin/Core/entity/PaymentMethod.php
index 5e51e09..c406d5a 100644
--- a/payment/lib/Drupal/payment/Plugin/Core/entity/PaymentMethod.php
+++ b/payment/lib/Drupal/payment/Plugin/Core/entity/PaymentMethod.php
@@ -12,7 +12,7 @@ use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Core\Entity\EntityStorageControllerInterface;
 use Drupal\payment\Plugin\payment\method\PaymentMethodInterface as PluginPaymentMethodInterface;
-use Drupal\payment\Plugin\Core\entity\Payment;
+use Drupal\payment\Plugin\Core\entity\PaymentInterface;
 use Drupal\payment\Plugin\Core\entity\PaymentMethodInterface;
 
 /**
@@ -149,14 +149,14 @@ class PaymentMethod extends ConfigEntityBase implements PaymentMethodInterface {
   /**
    * {@inheritdoc}
    */
-  public function validatePayment(Payment $payment) {
+  public function validatePayment(PaymentInterface $payment) {
     return $this->getPlugin()->validatePayment($payment);
   }
 
   /**
    * {@inheritdoc}
    */
-  public function executePayment(Payment $payment) {
+  public function executePayment(PaymentInterface $payment) {
     return $this->getPlugin()->executePayment($payment);
   }
 
diff --git a/payment/lib/Drupal/payment/Plugin/payment/method/Base.php b/payment/lib/Drupal/payment/Plugin/payment/method/Base.php
index 1d625e6..99b00b2 100644
--- a/payment/lib/Drupal/payment/Plugin/payment/method/Base.php
+++ b/payment/lib/Drupal/payment/Plugin/payment/method/Base.php
@@ -7,10 +7,8 @@
 namespace Drupal\payment\Plugin\payment\method;
 
 use Drupal\Component\Plugin\PluginBase;
-use Drupal\Component\Plugin\PluginInspectionInterface;
 use Drupal\payment\Plugin\payment\method\PaymentMethodInterface;
-use Drupal\payment\Plugin\Core\entity\Payment;
-use Drupal\payment\Plugin\Core\entity\PaymentMethod;
+use Drupal\payment\Plugin\Core\entity\PaymentInterface;
 
 /**
  * A base payment method controller.
@@ -20,46 +18,114 @@ abstract class Base extends PluginBase implements PaymentMethodInterface {
   /**
    * The payment method this plugin is for.
    *
-   * @var \Drupal\payment\PaymentProcessingInterface
+   * @var \Drupal\payment\Plugin\Core\entity\PaymentMethodInterface
    */
   protected $paymentMethod;
 
   /**
    * {@inheritdoc}
    */
-  public function setConfiguration(array $configuration) {
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition) {
+    $configuration += array(
+      'messageText' => '',
+      'messageTextFormat' => '',
+    );
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
   }
 
   /**
    * {@inheritdoc}
    */
   public function getConfiguration() {
-    return array();
+    return $this->configuration;
+  }
+
+  /**
+   * Sets payer message text.
+   *
+   * @param string $text
+   *
+   * @return \Drupal\payment\Plugin\payment\method\PaymentInterface
+   */
+  public function setMessageText($text) {
+    $this->configuration['messageText'] = $text;
+
+    return $this;
+  }
+
+  /**
+   * Gets the payer message text.
+   *
+   * @return string
+   */
+  public function getMessageText() {
+    return $this->configuration['messageText'];
+  }
+
+  /**
+   * Sets payer message text format.
+   *
+   * @param string $format
+   *   The machine name of the text format the payer message is in.
+   *
+   * @return \Drupal\payment\Plugin\payment\method\PaymentInterface
+   */
+  public function setMessageTextFormat($format) {
+    $this->configuration['messageTextFormat'] = $format;
+
+    return $this;
+  }
+
+  /**
+   * Gets the payer message text format.
+   *
+   * @return string
+   */
+  public function getMessageTextFormat() {
+    return $this->configuration['messageTextFormat'];
   }
 
   /**
    * {@inheritdoc}
    */
   public function paymentFormElements(array $form, array &$form_state) {
-    return array();
+    $elements = array();
+    $elements['message'] = array(
+      '#type' => 'markup',
+      '#markup' => check_markup($this->getMessageText(), $this->getMessageTextFormat()),
+    );
+
+    return $elements;
   }
 
   /**
    * {@inheritdoc}
    */
   public function paymentMethodFormElements(array $form, array &$form_state) {
-    return array();
+    $elements['message'] = array(
+      '#element_validate' => array($this, 'PaymentMethodFormElementsValidateMessage'),
+      '#type' => 'text_format',
+      '#title' => t('Payment form message'),
+      '#default_value' => $this->getMessageText(),
+      '#format' => $this->getMessageTextFormat(),
+    );
+
+    return $elements;
   }
 
   /**
-   * {@inheritdoc}
+   * Implements form validate callback for self::paymentMethodFormElements().
    */
-  public function executePayment(Payment $payment) {}
+  public function PaymentMethodFormElementsValidateMessage(array $element, array &$form_state, array $form) {
+    $values = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+    $this->setMessageText($values['message']['value']);
+    $this->setMessageTextFormat($values['message']['format']);
+  }
 
   /**
    * {@inheritdoc}
    */
-  public function validatePayment(Payment $payment) {
+  public function validatePayment(PaymentInterface $payment) {
     // Confirm the payment method is enabled, and thus available in general.
     if (!$this->getPaymentMethod()->status()) {
       throw new PaymentValidationPaymentMethodDisabledException(t('The payment method is disabled.'));
@@ -111,4 +177,4 @@ abstract class Base extends PluginBase implements PaymentMethodInterface {
       rules_invoke_event('payment_validate', $payment, $this->getPaymentMethod());
     }
   }
-}
\ No newline at end of file
+}
diff --git a/payment/lib/Drupal/payment/Plugin/payment/method/Basic.php b/payment/lib/Drupal/payment/Plugin/payment/method/Basic.php
new file mode 100644
index 0000000..d4d340d
--- /dev/null
+++ b/payment/lib/Drupal/payment/Plugin/payment/method/Basic.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * Contains \Drupal\payment\Plugin\payment\method\Basic.
+ */
+
+namespace Drupal\payment\Plugin\payment\method;
+
+use Drupal\Core\Annotation\Translation;
+use Drupal\payment\Annotations\PaymentMethod;
+use Drupal\payment\Plugin\Core\entity\PaymentInterface;
+
+/**
+ * A basic payment method that does not transfer money.
+ *
+ * @PaymentMethod(
+ *   description = "A 'dumb' payment method type that always successfully executes payments, but never actually transfers money. It can be useful for <em>collect on delivery</em>, for instance.",
+ *   id = "payment_basic",
+ *   label = @Translation("Basic"),
+ *   module = "payment"
+ * )
+ */
+class Basic extends Base {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition) {
+    $configuration += array(
+      'status' => '',
+    );
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+  }
+
+  /**
+   * Sets the final payment status.
+   *
+   * @param string $status
+   *   The plugin ID of the payment status to set.
+   *
+   * @return \Drupal\payment\Plugin\payment\method\PaymentInterface
+   */
+  public function setStatus($status) {
+    $this->configuration['status'] = $status;
+
+    return $this;
+  }
+
+  /**
+   * Gets the final payment status.
+   *
+   * @return string
+   *   The plugin ID of the payment status to set.
+   */
+  public function getStatus() {
+    return $this->configuration['status'];
+  }
+
+  /**
+   * {@inheritdoc}.
+   */
+  public function currencies() {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}.
+   */
+  public function executePayment(PaymentInterface $payment) {
+    $payment->setStatus(\Drupal::service('plugin.manager.payment.status')->createInstance($this->getStatus()));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function paymentMethodFormElements(array $form, array &$form_state) {
+    $elements = parent::paymentMethodFormElements($form, $form_state);
+    $elements['status'] = array(
+      '#element_validate' => array($this, 'paymentMethodFormElementsValidateStatus'),
+      '#type' => 'select',
+      '#title' => t('Final payment status'),
+      '#description' => t('The status to give a payment after being processed by this payment method.'),
+      '#default_value' => $this->getStatus() ? $this->getStatus() : 'payment_success',
+      '#options' => \Drupal::service('plugin.manager.payment.status')->options(),
+    );
+
+    return $elements;
+  }
+
+    /**
+     * Implements form validate callback for self::paymentMethodFormElements().
+     */
+    public function paymentMethodFormElementsValidateStatus(array $element, array &$form_state, array $form) {
+      $values = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+      $this->setStatus($values['status']);
+    }
+}
diff --git a/payment/lib/Drupal/payment/Plugin/payment/method/PaymentMethodInterface.php b/payment/lib/Drupal/payment/Plugin/payment/method/PaymentMethodInterface.php
index 10f0a5b..71174ea 100644
--- a/payment/lib/Drupal/payment/Plugin/payment/method/PaymentMethodInterface.php
+++ b/payment/lib/Drupal/payment/Plugin/payment/method/PaymentMethodInterface.php
@@ -18,13 +18,6 @@ use Drupal\payment\Plugin\Core\entity\Payment;
 interface PaymentMethodInterface extends PaymentProcessingInterface, PluginInspectionInterface {
 
   /**
-   * Sets the plugin configuration.
-   *
-   * @param array $configuration
-   */
-  public function setConfiguration(array $configuration);
-
-  /**
    * Gets the plugin configuration.
    *
    * @return array
diff --git a/payment/lib/Drupal/payment/Plugin/payment/method/Unavailable.php b/payment/lib/Drupal/payment/Plugin/payment/method/Unavailable.php
index 022f019..430e025 100644
--- a/payment/lib/Drupal/payment/Plugin/payment/method/Unavailable.php
+++ b/payment/lib/Drupal/payment/Plugin/payment/method/Unavailable.php
@@ -6,9 +6,11 @@
 
 namespace Drupal\payment\Plugin\payment\method;
 
+use Drupal\Component\Plugin\PluginBase;
 use Drupal\Core\Annotation\Translation;
 use Drupal\payment\Annotations\PaymentMethod;
-use Drupal\payment\Plugin\Core\entity\Payment;
+use Drupal\payment\Plugin\Core\entity\PaymentInterface;
+use Drupal\payment\Plugin\payment\method\PaymentMethodInterface;
 
 /**
  * A payment method controller that essentially disables payment methods.
@@ -23,7 +25,7 @@ use Drupal\payment\Plugin\Core\entity\Payment;
  *   module = "payment"
  * )
  */
-class Unavailable extends Base {
+class Unavailable extends PluginBase implements PaymentMethodInterface {
 
   /**
    * {@inheritdoc}.
@@ -35,14 +37,35 @@ class Unavailable extends Base {
   /**
    * {@inheritdoc}.
    */
-  public function executePayment(Payment $payment) {
+  public function executePayment(PaymentInterface $payment) {
     $payment->setStatus(\Drupal::service('plugin.manager.payment.status')->createInstance('payment_unknown'));
   }
 
   /**
    * {@inheritdoc}.
    */
-  public function validatePayment(Payment $payment) {
+  public function validatePayment(PaymentInterface $payment) {
     throw new PaymentValidationException(t('This payment method plugin is unavailable.'));
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfiguration() {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function paymentFormElements(array $form, array &$form_state) {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function paymentMethodFormElements(array $form, array &$form_state) {
+    return array();
+  }
 }
diff --git a/payment/lib/Drupal/payment/Plugin/payment/status/Manager.php b/payment/lib/Drupal/payment/Plugin/payment/status/Manager.php
index ddd0ac6..f064830 100644
--- a/payment/lib/Drupal/payment/Plugin/payment/status/Manager.php
+++ b/payment/lib/Drupal/payment/Plugin/payment/status/Manager.php
@@ -50,4 +50,19 @@ class Manager extends PluginManagerBase {
       return parent::createInstance('payment_unknown', $configuration);
     }
   }
+
+  /**
+   * Returns payment method options.
+   *
+   * @return array
+   *   Keys are plugin IDs. Values are plugin labels.
+   */
+  function options() {
+    $options = array();
+    foreach ($this->getDefinitions() as $entity_type => $definition) {
+      $options[$entity_type] = $definition['label'];
+    }
+
+    return $options;
+  }
 }
diff --git a/payment/lib/Drupal/payment/Tests/Plugin/payment/method/BasicTest.php b/payment/lib/Drupal/payment/Tests/Plugin/payment/method/BasicTest.php
new file mode 100644
index 0000000..4c7ab1b
--- /dev/null
+++ b/payment/lib/Drupal/payment/Tests/Plugin/payment/method/BasicTest.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @file
+ * Contains class \Drupal\payment\Tests\Plugin\payment\method\BaseTest.
+ */
+
+namespace Drupal\payment\Tests\Plugin\payment\method;
+
+use Drupal\payment\Plugin\payment\method\PaymentMethodInterface;
+use Drupal\simpletest\DrupalUnitTestBase;
+
+/**
+ * Tests \Drupal\payment\Plugin\payment\status\Base.
+ */
+class BasicTest extends DrupalUnitTestBase {
+
+  public static $modules = array('payment');
+
+  /**
+   * {@inheritdoc}
+   */
+  static function getInfo() {
+    return array(
+      'name' => '\Drupal\payment\Plugin\payment\method\Basic',
+      'group' => 'Payment',
+    );
+  }
+
+  /**
+   * {@inheritdoc
+   */
+  function setUp() {
+    parent::setUp();
+    $this->method = \Drupal::service('plugin.manager.payment.payment_method')->createInstance('payment_basic');
+  }
+
+  /**
+   * Tests setAmount() and getAmount().
+   */
+  function testGetConfiguration() {
+    $this->method->setMessageText('foo');
+    $this->method->setMessageTextFormat('bar');
+    $this->method->setStatus('baz');
+    $this->assertEqual($this->method->getConfiguration(), array(
+      'messageText' => 'foo',
+      'messageTextFormat' => 'bar',
+      'status' => 'baz',
+    ));
+  }
+
+  /**
+   * Tests setMessageText() and getMessageText().
+   */
+  function testGetMessageText() {
+    $text = $this->randomName();
+    $this->assertTrue($this->method->setMessageText($text) instanceof PaymentMethodInterface);
+    $this->assertIdentical($this->method->getMessageText(), $text);
+  }
+
+  /**
+   * Tests setMessageTextFormat() and getMessageTextFormat().
+   */
+  function testGetMessageTextFormat() {
+    $format = $this->randomName();
+    $this->assertTrue($this->method->setMessageTextFormat($format) instanceof PaymentMethodInterface);
+    $this->assertIdentical($this->method->getMessageTextFormat(), $format);
+  }
+
+  /**
+   * Tests setStatus() and getStatus().
+   */
+  function testGetStatus() {
+    $status = $this->randomName();
+    $this->assertTrue($this->method->setStatus($status) instanceof PaymentMethodInterface);
+    $this->assertIdentical($this->method->getStatus(), $status);
+  }
+
+  /**
+   * Tests paymentMethodFormElements().
+   */
+  function testPaymentMethodFormElements() {
+    $form = array();
+    $form_state = array();
+    $this->assertTrue(is_array($this->method->paymentMethodFormElements($form, $form_state)));
+  }
+}
diff --git a/payment/lib/Drupal/payment/Tests/Plugin/payment/method/ManagerTest.php b/payment/lib/Drupal/payment/Tests/Plugin/payment/method/ManagerTest.php
index cb448ab..bdaa023 100644
--- a/payment/lib/Drupal/payment/Tests/Plugin/payment/method/ManagerTest.php
+++ b/payment/lib/Drupal/payment/Tests/Plugin/payment/method/ManagerTest.php
@@ -40,7 +40,7 @@ class ManagerTest extends DrupalUnitTestBase {
   function testGetDefinitions() {
     // Test the default payment method plugins.
     $definitions = $this->manager->getDefinitions();
-    $this->assertEqual(count($definitions), 1);
+    $this->assertEqual(count($definitions), 2);
     foreach ($definitions as $definition) {
       $this->assertIdentical(strpos($definition['id'], 'payment_'), 0);
       $this->assertTrue(is_subclass_of($definition['class'], '\Drupal\payment\Plugin\payment\method\PaymentMethodInterface'));
diff --git a/payment/payment.install b/payment/payment.install
index 33e961d..02495b5 100644
--- a/payment/payment.install
+++ b/payment/payment.install
@@ -561,7 +561,6 @@ function payment_upgrade_map_status() {
 function payment_upgrade_map_payment_method() {
   return array(
     'PaymentMethodControllerUnavailable' => 'payment_unavailable',
-    // @todo
-    // 'PaymentMethodBasicController' => '',
+    'PaymentMethodBasicController' => 'payment_basic',
   );
 }
diff --git a/paymentmethodbasic/paymentmethodbasic.info.yml b/paymentmethodbasic/paymentmethodbasic.info.yml
deleted file mode 100644
index 8b8dfd0..0000000
--- a/paymentmethodbasic/paymentmethodbasic.info.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-name: Basic Payment Method
-description: A 'dumb' payment method type that always successfully executes payments, but never actually transfers money. It can be useful for <em>collect on delivery</em>, for instance.
-core: 8.x
-type: module
-package: Payment
-dependencies:
-  - payment
diff --git a/paymentmethodbasic/paymentmethodbasic.install b/paymentmethodbasic/paymentmethodbasic.install
deleted file mode 100644
index 4150a51..0000000
--- a/paymentmethodbasic/paymentmethodbasic.install
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Installation and uninstallation functions.
- */
-
-/**
- * Implements hook_schema().
- */
-function paymentmethodbasic_schema() {
-  $schema['paymentmethodbasic'] = array(
-    'fields' => array(
-      'message' => array(
-        'type' => 'text',
-        'size' => 'big',
-      ),
-      'pmid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'status' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-      ),
-      'text_format' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-      ),
-    ),
-    'primary key' => array('pmid'),
-    'unique keys' => array(
-      'pmid' => array('pmid'),
-    ),
-  );
-
-  return $schema;
-}
\ No newline at end of file
diff --git a/paymentmethodbasic/paymentmethodbasic.module b/paymentmethodbasic/paymentmethodbasic.module
deleted file mode 100644
index 729e19f..0000000
--- a/paymentmethodbasic/paymentmethodbasic.module
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-/**
- * @file
- * Hook implementations and shared functions.
- */
-
-/**
- * Implements hook_payment_method_controller_info().
- */
-function paymentmethodbasic_payment_method_controller_info() {
-  return array('PaymentMethodBasicController');
-}
-
-/**
- * Implements hook_entity_load().
- */
-function paymentmethodbasic_entity_load(array $entities, $entity_type) {
-  // @todo Temporarily disable this function until it has been ported to Payment
-  // 8.x-2.x.
-  // @debug
-  return;
-if ($entity_type == 'payment_method') {
-    $pmids = array();
-    foreach ($entities as $payment_method) {
-      if ($payment_method->controller->name == 'PaymentMethodBasicController') {
-        $pmids[] = $payment_method->pmid;
-      }
-    }
-    if ($pmids) {
-      $query = db_select('paymentmethodbasic')
-        ->fields('paymentmethodbasic')
-        ->condition('pmid', $pmids);
-      $result = $query->execute();
-      while ($data = $result->fetchAssoc()) {
-        $payment_method = $entities[$data['pmid']];
-        $payment_method->controller_data = (array) $data;
-        unset($payment_method->controller_data['pmid']);
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_ENTITY_TYPE_ACTION().
- */
-function paymentmethodbasic_payment_method_insert(PaymentMethod $payment_method) {
-  if ($payment_method->controller->name == 'PaymentMethodBasicController') {
-    $payment_method->controller_data += $payment_method->controller->controller_data_defaults;
-    $query = db_insert('paymentmethodbasic');
-    $values = array_merge($payment_method->controller_data, array(
-      'pmid' => $payment_method->pmid,
-    ));
-    $query->fields($values);
-    $query->execute();
-  }
-}
-
-/**
- * Implements hook_ENTITY_TYPE_ACTION().
- */
-function paymentmethodbasic_payment_method_update(PaymentMethod $payment_method) {
-  if ($payment_method->controller->name == 'PaymentMethodBasicController') {
-    $query = db_update('paymentmethodbasic');
-    $values = array_merge($payment_method->controller_data, array(
-      'pmid' => $payment_method->pmid,
-    ));
-    $query->fields($values);
-    $query->condition('pmid', $payment_method->pmid);
-    $query->execute();
-  }
-}
-
-/**
- * Implements hook_ENTITY_TYPE_ACTION().
- */
-function paymentmethodbasic_payment_method_delete($entity) {
-  if ($entity->controller->name == 'PaymentMethodBasicController') {
-    db_delete('paymentmethodbasic')
-      ->condition('pmid', $entity->pmid)
-      ->execute();
-  }
-}
-
-/**
- * A basic payment method controller.
- *
- * This controller always executes payments successfully, does not require
- * payment-specific information and does not transfer any money. It can be
- * useful to create a "collect on delivery" payment method, for instance.
- */
-class PaymentMethodBasicController {
-
-  public $controller_data_defaults = array(
-    'message' => '',
-    'status' => PAYMENT_STATUS_SUCCESS,
-    'text_format' => '',
-  );
-
-  public $payment_method_configuration_form_elements_callback = 'paymentmethodbasic_payment_method_configuration_form_elements';
-
-  public $payment_configuration_form_elements_callback = 'paymentmethodbasic_payment_configuration_form_elements';
-
-  function __construct() {
-    $this->title = t('Basic');
-    $this->description = t("A 'dumb' payment method type that always successfully executes payments, but never actually transfers money. It can be useful for <em>collect on delivery</em>, for instance.");
-  }
-
-  /**
-   * Implements PaymentMethodController::execute().
-   */
-  function execute(Payment $payment) {
-    $payment->setStatus(new PaymentStatusItem($payment->method->controller_data['status']));
-  }
-}
-
-/**
- * Form build callback: implements
- * PaymentMethodController::payment_method_configuration_form_elements_callback.
- *
- * @return array
- *   A Drupal form.
- */
-function paymentmethodbasic_payment_method_configuration_form_elements(array $form, array &$form_state) {
-  $controller_data = $form_state['payment_method']->controller_data;
-
-  $elements['status'] = array(
-    '#type' => 'select',
-    '#title' => t('Final payment status'),
-    '#description' => t('The status to give a payment after being processed by this payment method.'),
-    '#default_value' => isset($controller_data['status']) ? $controller_data['status'] : PAYMENT_STATUS_SUCCESS,
-    '#options' => payment_status_options(),
-  );
-  $elements['message'] = array(
-    '#type' => 'text_format',
-    '#title' => t('Payment form message'),
-    '#default_value' => isset($controller_data['message']) ? $controller_data['message'] : '',
-    '#format' => isset($controller_data['text_format']) ? $controller_data['text_format'] : filter_default_format(),
-  );
-
-  return $elements;
-}
-
-/**
- * Implements form validate callback for
- * paymentmethodbasic_payment_method_configuration_form_elements().
- */
-function paymentmethodbasic_payment_method_configuration_form_elements_validate(array $element, array &$form_state) {
-  $values = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
-  $form_state['payment_method']->controller_data['message'] = $values['message']['value'];
-  $form_state['payment_method']->controller_data['status'] = $values['status'];
-  $form_state['payment_method']->controller_data['text_format'] = $values['message']['format'];
-}
-
-/**
- * Implements
- * PaymentMethodController::payment_configuration_form_elements_callback.
- */
-function paymentmethodbasic_payment_configuration_form_elements(array $element, array &$form_state) {
-  $payment = $form_state['payment'];
-
-  $elements = array();
-  $elements['message'] = array(
-    '#type' => 'markup',
-    '#markup' => check_markup($payment->method->controller_data['message'], $payment->method->controller_data['text_format']),
-  );
-
-  return $elements;
-}
\ No newline at end of file
diff --git a/paymentmethodbasic/tests/paymentmethodbasic_test/paymentmethodbasic_test.info b/paymentmethodbasic/tests/paymentmethodbasic_test/paymentmethodbasic_test.info
deleted file mode 100644
index af2bf0f..0000000
--- a/paymentmethodbasic/tests/paymentmethodbasic_test/paymentmethodbasic_test.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Basic Payment Method tests
-description = "Supports Basic Payment Method's automated tests."
-core = 7.x
-dependencies[] = paymentmethodbasic
-package = Payment
-hidden = TRUE
-files[] = tests/PaymentmethodbasicTestCallablesWebTestCase.test
-files[] = tests/PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase.test
diff --git a/paymentmethodbasic/tests/paymentmethodbasic_test/paymentmethodbasic_test.module b/paymentmethodbasic/tests/paymentmethodbasic_test/paymentmethodbasic_test.module
deleted file mode 100644
index e69de29..0000000
diff --git a/paymentmethodbasic/tests/paymentmethodbasic_test/tests/PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase.test b/paymentmethodbasic/tests/paymentmethodbasic_test/tests/PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase.test
deleted file mode 100644
index 0615302..0000000
--- a/paymentmethodbasic/tests/paymentmethodbasic_test/tests/PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase.test
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains class PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase.
- */
-
-/**
- * Tests PaymentMethodBasicController functionality.
- */
-class PaymentmethodbasicTestPaymentMethodBasicControllerWebTestCase extends PaymentWebTestCase {
-
-  static function getInfo() {
-    return array(
-      'name' => 'PaymentMethodBasicController functionality',
-      'group' => 'Basic Payment Method',
-      'dependencies' => array('paymentmethodbasic_test'),
-    );
-  }
-
-  function setUp(array $modules = array()) {
-    parent::setUp(array('paymentmethodbasic_test'));
-  }
-
-  /**
-   * Test CRUD functionality.
-   */
-  function testCRUD() {
-    $payment_method = new PaymentMethod(array(
-      'controller' => payment_method_controller_load('PaymentMethodBasicController'),
-      'controller_data' => array(
-        'message' => 'foo',
-        'status' => PAYMENT_STATUS_FAILED,
-        'text_format' => 'bar',
-      ),
-    ));
-    entity_save('payment_method', $payment_method);
-    $pmid = $payment_method->pmid;
-    $count = db_query("SELECT COUNT(1) FROM {paymentmethodbasic} WHERE pmid = :pmid AND message = :message AND status = :status AND text_format = :text_format", array(
-      ':pmid' => $pmid,
-      ':message' => $payment_method->controller_data['message'],
-      ':status' => $payment_method->controller_data['status'],
-      ':text_format' => $payment_method->controller_data['text_format'],
-    ))->fetchField();
-    $this->assertTrue($count, "A new BasicPaymentMethodController payment method's controller data is inserted correctly.");
-
-    // Test loading a payment method.
-    $payment_method_loaded = entity_load_single('payment_method', $pmid);
-    $this->assertFalse(array_diff_assoc($payment_method->controller_data, $payment_method_loaded->controller_data), "An BasicPaymentMethodController payment method's controller data is loaded orrectly.");
-
-    // Test updating a payment method.
-    $payment_method->controller_data = array(
-      'message' => 'foo',
-      'status' => PAYMENT_STATUS_NEW,
-      'text_format' => 'bar',
-    );
-    entity_save('payment_method', $payment_method);
-    $count = db_query("SELECT COUNT(1) FROM {paymentmethodbasic} WHERE pmid = :pmid AND message = :message AND status = :status AND text_format = :text_format", array(
-      ':pmid' => $pmid,
-      ':message' => $payment_method->controller_data['message'],
-      ':status' => $payment_method->controller_data['status'],
-      ':text_format' => $payment_method->controller_data['text_format'],
-    ))->fetchField();
-    $this->assertTrue($count, "An BasicPaymentMethodController payment method's controller data is updated correctly.");
-
-    // Test deleting a payment method.
-    entity_delete('payment_method', $pmid);
-    $count = db_query("SELECT COUNT(1) FROM {paymentmethodbasic} WHERE pmid = :pmid", array(
-      ':pmid' => $pmid,
-    ))->fetchField();
-    $this->assertFalse($count, "An BasicPaymentMethodController payment method's controller data is deleted when the payment method is deleted.");
-  }
-
-  /**
-   * Test
-   * BasicPaymentMethodController::payment_method_configuration_form_elements_callback.
-   */
-  function testPaymentMethodFormCallback() {
-    $account = $this->drupalCreateUser(array('payment.payment_method.create.PaymentMethodBasicController'));
-    $this->drupalLogin($account);
-    $this->drupalPost('admin/config/services/payment/method/add/PaymentMethodBasicController', array(
-      'title_specific' => 'Foo',
-      'name' => 'foo',
-      'controller_form[message][value]' => 'bar',
-      'controller_form[status]' => PAYMENT_STATUS_FAILED,
-    ), t('Save'));
-    $payment_method = entity_load_single('payment_method', 1);
-    $reference = array(
-      'message' => 'bar',
-      'status' => PAYMENT_STATUS_FAILED,
-      'text_format' => 'plain_text',
-    );
-    $this->assertFalse(array_diff_assoc($reference, $payment_method->controller_data), "An BasicPaymentMethodController payment method's controller data is correctly saved by the payment method form.");
-  }
-}
