diff --git a/src/Annotation/TfaLogin.php b/src/Annotation/TfaLogin.php
index 0c75fec..b8c5d6e 100644
--- a/src/Annotation/TfaLogin.php
+++ b/src/Annotation/TfaLogin.php
@@ -36,4 +36,10 @@ class TfaLogin extends Plugin {
    */
   public $description;
 
+  /**
+   * Plugin ID for user-specific setup plugin for this validation plugin.
+   *
+   * @var string
+   */
+  public $setupPluginId;
 }
diff --git a/src/Annotation/TfaSend.php b/src/Annotation/TfaSend.php
index 253a721..dbe8beb 100644
--- a/src/Annotation/TfaSend.php
+++ b/src/Annotation/TfaSend.php
@@ -36,4 +36,11 @@ class TfaSend extends Plugin {
    */
   public $description;
 
+  /**
+   * Plugin ID for user-specific setup plugin for this validation plugin.
+   *
+   * @var string
+   */
+  public $setupPluginId;
+
 }
diff --git a/src/Annotation/TfaValidation.php b/src/Annotation/TfaValidation.php
index 71f56ec..d888fb2 100644
--- a/src/Annotation/TfaValidation.php
+++ b/src/Annotation/TfaValidation.php
@@ -50,4 +50,11 @@ class TfaValidation extends Plugin {
    */
   public $isFallback;
 
+  /**
+   * Plugin ID for user-specific setup plugin for this validation plugin.
+   *
+   * @var string
+   */
+  public $setupPluginId;
+
 }
diff --git a/src/Form/BasicOverview.php b/src/Form/BasicOverview.php
index 1c3c011..954c822 100644
--- a/src/Form/BasicOverview.php
+++ b/src/Form/BasicOverview.php
@@ -6,7 +6,10 @@ use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\tfa\TfaDataTrait;
+use Drupal\tfa\TfaLoginPluginManager;
+use Drupal\tfa\TfaSendPluginManager;
 use Drupal\tfa\TfaSetupPluginManager;
+use Drupal\tfa\TfaValidationPluginManager;
 use Drupal\user\UserDataInterface;
 use Drupal\user\UserInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -25,6 +28,27 @@ class BasicOverview extends FormBase {
   protected $tfaSetup;
 
   /**
+   * Validation plugin manager.
+   *
+   * @var \Drupal\tfa\TfaValidationPluginManager
+   */
+  protected $tfaValidation;
+
+  /**
+   * Login plugin manager.
+   *
+   * @var \Drupal\tfa\TfaLoginPluginManager
+   */
+  protected $tfaLogin;
+
+  /**
+   * Send plugin manager.
+   *
+   * @var \Drupal\tfa\TfaSendPluginManager
+   */
+  protected $tfaSend;
+
+  /**
    * Provides the user data service object.
    *
    * @var \Drupal\user\UserDataInterface
@@ -39,9 +63,12 @@ class BasicOverview extends FormBase {
    * @param \Drupal\tfa\TfaSetupPluginManager $tfa_setup_manager
    *   The setup plugin manager.
    */
-  public function __construct(UserDataInterface $user_data, TfaSetupPluginManager $tfa_setup_manager) {
+  public function __construct(UserDataInterface $user_data, TfaSetupPluginManager $tfa_setup_manager, TfaValidationPluginManager $tfa_validation_manager, TfaLoginPluginManager $tfa_login_manager, TfaSendPluginManager $tfa_send_manager) {
     $this->userData = $user_data;
     $this->tfaSetup = $tfa_setup_manager;
+    $this->tfaValidation = $tfa_validation_manager;
+    $this->tfaLogin = $tfa_login_manager;
+    $this->tfaSend = $tfa_send_manager;
   }
 
   /**
@@ -50,7 +77,10 @@ class BasicOverview extends FormBase {
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('user.data'),
-      $container->get('plugin.manager.tfa.setup')
+      $container->get('plugin.manager.tfa.setup'),
+      $container->get('plugin.manager.tfa.validation'),
+      $container->get('plugin.manager.tfa.login'),
+      $container->get('plugin.manager.tfa.send')
     );
   }
 
@@ -113,23 +143,38 @@ class BasicOverview extends FormBase {
         $enabled_fallback_plugin = key($configuration['fallback_plugins'][$enabled_plugin]);
       }
 
-      $output['app'] = $this->tfaPluginSetupFormOverview($enabled_plugin, $user, $enabled);
+      $plugin = $this->tfaValidation->getDefinition($enabled_plugin);
+      if (!empty($plugin['setupPluginId'])) {
+        $output[$plugin['id']] = $this->tfaPluginSetupFormOverview($plugin, $user, $enabled);
+      }
 
       if ($enabled) {
         $login_plugins = $configuration['login_plugins'];
-        foreach ($login_plugins as $lplugin_id) {
-          $output[$lplugin_id] = $this->tfaPluginSetupFormOverview($lplugin_id, $user, $enabled);
-
+        if (!empty($login_plugins)) {
+          foreach ($login_plugins as $plugin_id) {
+            $plugin = $this->tfaLogin->getDefinition($plugin_id);
+            if (!empty($plugin['setupPluginId'])) {
+              $output[$plugin_id] = $this->tfaPluginSetupFormOverview($plugin, $user, $enabled);
+            }
+          }
         }
 
-        $send_plugin = $configuration['send_plugins'];
-        if ($send_plugin) {
-          $output[$send_plugin] = $this->tfaPluginSetupFormOverview($send_plugin, $user, $enabled);
+        $send_plugins = $configuration['send_plugins'];
+        if (!empty($send_plugins)) {
+          foreach ($send_plugins as $plugin_id) {
+            $plugin = $this->tfaSend->getDefinition($plugin_id);
+            if (!empty($plugin['setupPluginId'])) {
+              $output[$plugin_id] = $this->tfaPluginSetupFormOverview($plugin, $user, $enabled);
+            }
+          }
         }
 
         if ($enabled_fallback_plugin) {
           // Fallback Setup.
-          $output['recovery'] = $this->tfaPluginSetupFormOverview($enabled_fallback_plugin, $user, $enabled);
+          $plugin = $this->tfaValidation->getDefinition($enabled_fallback_plugin);
+          if (!empty($plugin['setupPluginId'])) {
+            $output[$plugin['id']] = $this->tfaPluginSetupFormOverview($plugin, $user, $enabled);
+          }
         }
       }
     }
@@ -146,8 +191,8 @@ class BasicOverview extends FormBase {
   /**
    * Get TFA basic setup action links for use on overview page.
    *
-   * @param string $plugin
-   *   The setup plugin.
+   * @param array $plugin
+   *   Plugin definition.
    * @param object $account
    *   Current user account.
    * @param bool $enabled
@@ -156,15 +201,15 @@ class BasicOverview extends FormBase {
    * @return array
    *   Render array
    */
-  protected function tfaPluginSetupFormOverview($plugin, $account, $enabled) {
+  protected function tfaPluginSetupFormOverview(array $plugin, $account, $enabled) {
     $params = [
       'enabled' => $enabled,
       'account' => $account,
-      'plugin_id' => $plugin,
+      'plugin_id' => $plugin['id'],
     ];
     $output = $this->tfaSetup
-                ->createInstance($plugin . '_setup', ['uid' => $account->id()])
-                ->getOverview($params);
+      ->createInstance($plugin['setupPluginId'], ['uid' => $account->id()])
+      ->getOverview($params);
     return $output;
   }
 
diff --git a/src/Form/BasicSetup.php b/src/Form/BasicSetup.php
index 8ec4839..9bb1ecf 100644
--- a/src/Form/BasicSetup.php
+++ b/src/Form/BasicSetup.php
@@ -7,6 +7,7 @@ use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\tfa\TfaDataTrait;
 use Drupal\tfa\TfaSetup;
+use Drupal\tfa\TfaValidationPluginManager;
 use Drupal\user\Entity\User;
 use Drupal\user\UserDataInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -25,6 +26,13 @@ class BasicSetup extends FormBase {
   protected $manager;
 
   /**
+   * Validation plugin manager.
+   *
+   * @var \Drupal\tfa\TfaValidationPluginManager
+   */
+  protected $tfaValidation;
+
+  /**
    * Provides the user data service object.
    *
    * @var \Drupal\user\UserDataInterface
@@ -37,16 +45,18 @@ class BasicSetup extends FormBase {
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('plugin.manager.tfa.setup'),
-      $container->get('user.data')
+      $container->get('user.data'),
+      $container->get('plugin.manager.tfa.validation')
     );
   }
 
   /**
    * {@inheritdoc}
    */
-  public function __construct(PluginManagerInterface $manager, UserDataInterface $user_data) {
+  public function __construct(PluginManagerInterface $manager, UserDataInterface $user_data, TfaValidationPluginManager $tfa_validation_manager) {
     $this->manager = $manager;
     $this->userData = $user_data;
+    $this->tfaValidation = $tfa_validation_manager;
   }
 
   /**
@@ -116,13 +126,14 @@ class BasicSetup extends FormBase {
 
       // Record methods progressed.
       $storage['steps'][] = $method;
+      $validation_method = $this->tfaValidation->getDefinition($method);
 
-      $plugin_id = $method . '_setup';
-      $validation_inst = \Drupal::service('plugin.manager.tfa.setup');
-      $setup_plugin = $validation_inst->createInstance($plugin_id, ['uid' => $account->id()]);
-      $tfa_setup = new TfaSetup($setup_plugin);
-      $form = $tfa_setup->getForm($form, $form_state, $reset);
-      $storage[$method] = $tfa_setup;
+      if (!empty($validation_method['setupPluginId'])) {
+        $setup_plugin = $this->manager->createInstance($validation_method['setupPluginId'], ['uid' => $account->id()]);
+        $tfa_setup = new TfaSetup($setup_plugin);
+        $form = $tfa_setup->getForm($form, $form_state, $reset);
+        $storage[$method] = $tfa_setup;
+      }
 
       if (isset($storage['full_setup']) && count($storage['steps']) > 1) {
         $count = count($storage['steps_left']);
diff --git a/src/Form/SettingsForm.php b/src/Form/SettingsForm.php
index b01bef6..8327174 100644
--- a/src/Form/SettingsForm.php
+++ b/src/Form/SettingsForm.php
@@ -143,7 +143,7 @@ class SettingsForm extends ConfigFormBase {
     $fallback_plugins_labels = [];
     foreach ($validation_plugins as $key => $plugin) {
       // Skip this plugin if no setup class is available.
-      if (!isset($setup_plugins[$key . '_setup'])){
+      if (empty($plugin['setupPluginId'])){
         unset($validation_plugins[$key]);
         continue;
       }
diff --git a/src/Plugin/TfaLogin/TfaTrustedBrowser.php b/src/Plugin/TfaLogin/TfaTrustedBrowser.php
index efb6d9e..ea13a22 100644
--- a/src/Plugin/TfaLogin/TfaTrustedBrowser.php
+++ b/src/Plugin/TfaLogin/TfaTrustedBrowser.php
@@ -19,6 +19,7 @@ use Drupal\user\UserDataInterface;
  *   id = "tfa_trusted_browser",
  *   label = @Translation("TFA Trusted Browser"),
  *   description = @Translation("TFA Trusted Browser Plugin"),
+ *   setupPluginId = "tfa_trusted_browser_setup",
  *   isFallback = TRUE
  * )
  */
diff --git a/src/Plugin/TfaValidation/TfaHotp.php b/src/Plugin/TfaValidation/TfaHotp.php
index b9f1b04..2863ffa 100644
--- a/src/Plugin/TfaValidation/TfaHotp.php
+++ b/src/Plugin/TfaValidation/TfaHotp.php
@@ -20,6 +20,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *   id = "tfa_hotp",
  *   label = @Translation("TFA Hmac-based OTP(HOTP)"),
  *   description = @Translation("TFA Hotp Validation Plugin"),
+ *   setupPluginId = "tfa_hotp_setup",
  *   fallbacks = {
  *    "tfa_recovery_code"
  *   },
diff --git a/src/Plugin/TfaValidation/TfaTotp.php b/src/Plugin/TfaValidation/TfaTotp.php
index 62e93da..ca496f5 100644
--- a/src/Plugin/TfaValidation/TfaTotp.php
+++ b/src/Plugin/TfaValidation/TfaTotp.php
@@ -20,6 +20,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *   id = "tfa_totp",
  *   label = @Translation("TFA Time-based OTP(TOTP)"),
  *   description = @Translation("TFA Totp Validation Plugin"),
+ *   setupPluginId = "tfa_totp_setup",
  *   fallbacks = {
  *    "tfa_recovery_code"
  *   },
