diff --git a/payment/uc_credit/src/Plugin/Ubercart/PaymentMethod/CreditCard.php b/payment/uc_credit/src/Plugin/Ubercart/PaymentMethod/CreditCard.php
index 110be28..a797963 100644
--- a/payment/uc_credit/src/Plugin/Ubercart/PaymentMethod/CreditCard.php
+++ b/payment/uc_credit/src/Plugin/Ubercart/PaymentMethod/CreditCard.php
@@ -22,7 +22,7 @@ use Drupal\uc_store\Encryption;
  *   title = @Translation("Credit card"),
  *   checkout = TRUE,
  *   no_gateway = FALSE,
- *   configurable = TRUE,
+ *   settings_form = "Drupal\uc_credit\Form\CreditSettingsForm",
  *   weight = 2,
  * )
  */
@@ -140,13 +140,6 @@ class CreditCard extends PaymentMethodPluginBase {
   /**
    * {@inheritdoc}
    */
-  public function getSettingsForm() {
-    return \Drupal\uc_credit\Form\CreditSettingsForm::create(\Drupal::getContainer());
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function cartProcess(OrderInterface $order, array $form, FormStateInterface $form_state) {
     $credit_config = \Drupal::config('uc_credit.settings');
     if (!$form_state->hasValue(['panes', 'payment', 'details', 'cc_number'])) {
diff --git a/payment/uc_payment/src/Annotation/PaymentMethod.php b/payment/uc_payment/src/Annotation/PaymentMethod.php
index 9d183bc..6f4c8fc 100644
--- a/payment/uc_payment/src/Annotation/PaymentMethod.php
+++ b/payment/uc_payment/src/Annotation/PaymentMethod.php
@@ -57,11 +57,11 @@ class PaymentMethod extends Plugin {
   public $no_gateway;
 
   /**
-   * Whether the plugin has a configuration form.
+   * The class name of the plugin configuration form.
    *
-   * @var boolean
+   * @var string
    */
-  public $configurable;
+  public $settings_form;
 
   /**
    * The plugin weight.
diff --git a/payment/uc_payment/src/Form/PaymentMethodsForm.php b/payment/uc_payment/src/Form/PaymentMethodsForm.php
index 2b9b9f2..83ab370 100644
--- a/payment/uc_payment/src/Form/PaymentMethodsForm.php
+++ b/payment/uc_payment/src/Form/PaymentMethodsForm.php
@@ -87,7 +87,7 @@ class PaymentMethodsForm extends ConfigFormBase {
       ),
     );
 
-    foreach (uc_payment_method_list() as $id => $method) {
+    foreach ($this->paymentMethodManager->getDefinitions() as $id => $method) {
       $form['methods'][$id]['#attributes']['class'][] = 'draggable';
       $form['methods'][$id]['status'] = array(
         '#type' => 'checkbox',
@@ -117,17 +117,7 @@ class PaymentMethodsForm extends ConfigFormBase {
 
       $links = array();
 
-      if (!isset($method['configurable'])) {
-        // Determine whether a legacy plugin has a valid settings form.
-        $method_settings = $this->paymentMethodManager->createInstance($id)->getSettingsForm();
-        if ($method_settings != NULL) {
-          $links['settings'] = array(
-            'title' => t('Settings'),
-            'url' => Url::fromRoute('uc_payment.method_settings', ['method' => $id]),
-          );
-        }
-      }
-      elseif ($method['configurable']) {
+      if (!empty($method['settings_form'])) {
         $links['settings'] = array(
           'title' => t('Settings'),
           'url' => Url::fromRoute('uc_payment.method_settings', ['method' => $id]),
diff --git a/payment/uc_payment/src/PaymentMethodPluginBase.php b/payment/uc_payment/src/PaymentMethodPluginBase.php
index 473edd2..84355ca 100644
--- a/payment/uc_payment/src/PaymentMethodPluginBase.php
+++ b/payment/uc_payment/src/PaymentMethodPluginBase.php
@@ -100,6 +100,10 @@ abstract class PaymentMethodPluginBase extends PluginBase implements PaymentMeth
    * {@inheritdoc}
    */
   public function getSettingsForm() {
+    if (!empty($this->pluginDefinition['settings_form'])) {
+      return new $this->pluginDefinition['settings_form'];
+    }
+
     return NULL;
   }
 }
diff --git a/payment/uc_payment/src/Plugin/PaymentMethodManager.php b/payment/uc_payment/src/Plugin/PaymentMethodManager.php
index b9091a4..9e79724 100644
--- a/payment/uc_payment/src/Plugin/PaymentMethodManager.php
+++ b/payment/uc_payment/src/Plugin/PaymentMethodManager.php
@@ -78,7 +78,7 @@ class PaymentMethodManager extends DefaultPluginManager {
     if (isset($this->methodConfig[$plugin_id]['weight'])) {
       $definition['weight'] = $this->methodConfig[$plugin_id]['weight'];
     }
- }
+  }
 
   /**
    * Returns an instance of the payment method plugin for a specific order.
diff --git a/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/FreeOrder.php b/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/FreeOrder.php
index 04d93bd..e83a146 100644
--- a/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/FreeOrder.php
+++ b/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/FreeOrder.php
@@ -20,7 +20,6 @@ use Drupal\uc_payment\PaymentMethodPluginBase;
  *   title = @Translation("No payment required"),
  *   checkout = TRUE,
  *   no_gateway = TRUE,
- *   configurable = FALSE,
  *   weight = 0,
  * )
  */
diff --git a/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/LegacyPaymentMethod.php b/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/LegacyPaymentMethod.php
index cd5d7c0..4777fba 100644
--- a/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/LegacyPaymentMethod.php
+++ b/payment/uc_payment/src/Plugin/Ubercart/PaymentMethod/LegacyPaymentMethod.php
@@ -19,21 +19,21 @@ class LegacyPaymentMethod extends PaymentMethodPluginBase {
   /**
    * {@inheritdoc}
    */
-  function cartDetails(OrderInterface $order, array $form, FormStateInterface $form_state) {
+  public function cartDetails(OrderInterface $order, array $form, FormStateInterface $form_state) {
     return $this->pluginDefinition['callback']('cart-details', $order, $form, $form_state);
   }
 
   /**
    * {@inheritdoc}
    */
-  function cartProcess(OrderInterface $order, array $form, FormStateInterface $form_state) {
+  public function cartProcess(OrderInterface $order, array $form, FormStateInterface $form_state) {
     return $this->pluginDefinition['callback']('cart-process', $order, $form, $form_state);
   }
 
   /**
    * {@inheritdoc}
    */
-  function cartReview(OrderInterface $order) {
+  public function cartReview(OrderInterface $order) {
     return $this->pluginDefinition['callback']('cart-review', $order);
   }
 
diff --git a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/CashOnDelivery.php b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/CashOnDelivery.php
index 86ba23f..8dbcf6a 100644
--- a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/CashOnDelivery.php
+++ b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/CashOnDelivery.php
@@ -20,7 +20,7 @@ use Drupal\uc_payment\PaymentMethodPluginBase;
  *   title = @Translation("Cash on delivery"),
  *   checkout = FALSE,
  *   no_gateway = TRUE,
- *   configurable = TRUE,
+ *   settings_form = "Drupal\uc_payment_pack\Form\CashOnDeliverySettingsForm",
  *   weight = 1,
  * )
  */
@@ -178,13 +178,6 @@ class CashOnDelivery extends PaymentMethodPluginBase {
   }
 
   /**
-   * {@inheritdoc}
-   */
-  public function getSettingsForm() {
-    return \Drupal\uc_payment_pack\Form\CashOnDeliverySettingsForm::create(\Drupal::getContainer());
-  }
-
-  /**
    * Collect additional information for the "Cash on Delivery" payment method.
    */
   protected function deliveryDateForm($order) {
diff --git a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Check.php b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Check.php
index 3e5dfb6..ea801d6 100644
--- a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Check.php
+++ b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Check.php
@@ -22,7 +22,7 @@ use Drupal\uc_store\Address;
  *   title = @Translation("Check or money order"),
  *   checkout = TRUE,
  *   no_gateway = TRUE,
- *   configurable = TRUE,
+ *   settings_form = "Drupal\uc_payment_pack\Form\CheckSettingsForm",
  *   weight = 1,
  * )
  */
@@ -133,11 +133,4 @@ class Check extends PaymentMethodPluginBase {
     return $build;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getSettingsForm() {
-    return \Drupal\uc_payment_pack\Form\CheckSettingsForm::create(\Drupal::getContainer());
-  }
-
 }
diff --git a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Other.php b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Other.php
index c232f28..60793da 100644
--- a/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Other.php
+++ b/payment/uc_payment_pack/src/Plugin/Ubercart/PaymentMethod/Other.php
@@ -19,7 +19,6 @@ use Drupal\uc_payment\PaymentMethodPluginBase;
  *   title = @Translation("Other"),
  *   checkout = FALSE,
  *   no_gateway = TRUE,
- *   configurable = FALSE,
  *   weight = 10,
  * )
  */
