diff --git a/src/Form/AdminForm.php b/src/Form/AdminForm.php
index 20bb5cb..391e95b 100644
--- a/src/Form/AdminForm.php
+++ b/src/Form/AdminForm.php
@@ -159,17 +159,30 @@ class AdminForm extends ConfigFormBase {
       '#default_value' => 'none',
     );
 
+    // Show and change all custom configurations.
+    $form['custom']['modules'] = array(
+      '#type' => 'table',
+      '#header' => array(
+        'module' => $this->t('Module'),
+        'key' => $this->t('Key'),
+        'formatter' => $this->t('Formatter'),
+        'sender' => $this->t('Sender'),
+        'remove' => $this->t('Remove'),
+      ),
+      '#empty' => $this->t('No special configuration yet...'),
+    );
+
     // Get all configured modules and show them in a list.
     $modules = $config->get(MailsystemManager::MAILSYSTEM_MODULES_CONFIG) ?: [];
-    $options = array();
     foreach ($modules as $module => $conf) {
       if (is_array($conf)) {
         // Main table structure.
-        $mod = array(
-          'module' => ucfirst($module),
+        $row = array(
+          'module' => ['#markup' => ucfirst($module)],
+          'key' => ['#markup' => ''],
           'formatter' => '',
           'sender' => '',
-          'key' => '',
+          'remove' => '',
         );
 
         foreach ($conf as $key => $val) {
@@ -179,43 +192,51 @@ class AdminForm extends ConfigFormBase {
           // with the types as keys - in both cases, the values are the Plugins.
           switch ($key) {
             case MailsystemManager::MAILSYSTEM_TYPE_FORMATTING:
-              $mod['formatter'] = $this->getPluginLabel($val);
+              $row['formatter'] = array(
+                '#type' => 'select',
+                '#options' => $this->getFormatterPlugins(TRUE),
+                '#default_value' => $val[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING],
+              );
               break;
 
             case MailsystemManager::MAILSYSTEM_TYPE_SENDING:
-              $mod['sender'] = $this->getPluginLabel($val);
+              $row['sender'] = array(
+                '#type' => 'select',
+                '#options' => $this->getSenderPlugins(TRUE),
+                '#default_value' => $val[MailsystemManager::MAILSYSTEM_TYPE_SENDING],
+              );
               break;
 
             default:
               if (is_array($val)) {
-                $mod['key'] = ($key === 'none') ? '' : $key;
+                $row['key'] = ['#markup' => (($key === 'none') ? '' : $key)];
                 if (isset($val[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING])) {
-                  $mod['formatter'] = $this->getPluginLabel($val[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING]);
+                  $row['formatter'] = array(
+                    '#type' => 'select',
+                    '#options' => $this->getFormatterPlugins(TRUE),
+                    '#default_value' => $val[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING],
+                  );
                 }
                 if (isset($val[MailsystemManager::MAILSYSTEM_TYPE_SENDING])) {
-                  $mod['sender'] = $this->getPluginLabel($val[MailsystemManager::MAILSYSTEM_TYPE_SENDING]);
+                  $row['sender'] = array(
+                    '#type' => 'select',
+                    '#options' => $this->getSenderPlugins(TRUE),
+                    '#default_value' => $val[MailsystemManager::MAILSYSTEM_TYPE_SENDING],
+                  );
                 }
+                $row['remove'] = array(
+                  '#type' => 'checkbox',
+                  '#default_value' => $module_key,
+                );
               }
               break;
           }
-          $options[$module_key] = $mod;
+
+          $form['custom']['modules'][$module_key] = $row;
         }
       }
     }
 
-    // Show and change all custom configurations.
-    $form['custom']['modules'] = array(
-      '#type' => 'tableselect',
-      '#header' => array(
-        'module' => $this->t('Module'),
-        'key' => $this->t('Key'),
-        'formatter' => $this->t('Formatter'),
-        'sender' => $this->t('Sender'),
-      ),
-      '#options' => $options,
-      '#empty' => $this->t('No special configuration yet...'),
-    );
-
     return parent::buildForm($form, $form_state);
   }
 
@@ -280,11 +301,21 @@ class AdminForm extends ConfigFormBase {
       }
     }
 
-    // If there are some selections in the tableselect, remove them.
     if ($form_state->hasValue(['custom', 'modules']) && is_array($form_state->getValue(['custom', 'modules']))) {
-      foreach ($form_state->getValue(['custom', 'modules']) as $key => $val) {
-        if ($key === $val) {
-          $config->clear(MailsystemManager::MAILSYSTEM_MODULES_CONFIG . '.' . $key);
+      foreach ($form_state->getValue(['custom', 'modules'], []) as $module_key => $settings) {
+        $mailsystem_settings = MailsystemManager::MAILSYSTEM_MODULES_CONFIG . '.' . $module_key;
+        if (!empty($settings['remove'])) {
+          // If some checkboxs are checked, remove these rows.
+          $config->clear($mailsystem_settings);
+        }
+        else {
+          // Update formatter and/or sender.
+          if (!empty($settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING])) {
+            $config->set($mailsystem_settings . '.' . MailsystemManager::MAILSYSTEM_TYPE_FORMATTING, $settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING]);
+          }
+          if (!empty($settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING])) {
+            $config->set($mailsystem_settings . '.' . MailsystemManager::MAILSYSTEM_TYPE_SENDING, $settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING]);
+          }
         }
       }
     }
diff --git a/src/Tests/AdminFormSettingsTest.php b/src/Tests/AdminFormSettingsTest.php
index 0ddd026..5964499 100644
--- a/src/Tests/AdminFormSettingsTest.php
+++ b/src/Tests/AdminFormSettingsTest.php
@@ -51,6 +51,26 @@ class AdminFormSettingsTest extends WebTestBase {
     $this->drupalGet(t('admin/config/system/mailsystem'));
     $this->assertText('aaa');
 
+    // Add additional custom module settings, one with test_mail_collector and
+    // one with php_mail.
+    $this->drupalPostForm(NULL, [
+      'custom[custom_module]' => 'system',
+      'custom[custom_module_key]' => 'bbb',
+      'custom[custom_formatter]' => 'test_mail_collector',
+      'custom[custom_sender]' => 'test_mail_collector',
+    ], t('Save configuration'));
+    $this->drupalGet(t('admin/config/system/mailsystem'));
+    $this->assertText('bbb');
+
+    $this->drupalPostForm(NULL, [
+      'custom[custom_module]' => 'system',
+      'custom[custom_module_key]' => 'ccc',
+      'custom[custom_formatter]' => 'php_mail',
+      'custom[custom_sender]' => 'php_mail',
+    ], t('Save configuration'));
+    $this->drupalGet(t('admin/config/system/mailsystem'));
+    $this->assertText('ccc');
+
     // Checking the configuration.
     $config = $this->config('mailsystem.settings');
     $this->assertEqual($config->get('theme'), 'current');
@@ -58,6 +78,30 @@ class AdminFormSettingsTest extends WebTestBase {
     $this->assertEqual($config->get('defaults.sender'), 'test_mail_collector');
     $this->assertEqual($config->get('modules.system.aaa.formatter'), 'test_mail_collector');
     $this->assertEqual($config->get('modules.system.aaa.sender'), 'test_mail_collector');
+    $this->assertEqual($config->get('modules.system.bbb.formatter'), 'test_mail_collector');
+    $this->assertEqual($config->get('modules.system.ccc.sender'), 'php_mail');
+
+    // Edit the second and third custom module formatter.
+    $this->drupalPostForm(NULL, [
+      'custom[modules][system.bbb][formatter]' => 'php_mail',
+      'custom[modules][system.ccc][formatter]' => 'test_mail_collector',
+    ], t('Save configuration'));
+    $config->set('modules.system.bbb.formatter', 'php_mail')->save();
+    $config->set('modules.system.ccc.formatter', 'test_mail_collector')->save();
+    $this->drupalGet(t('admin/config/system/mailsystem'));
+    $this->assertEqual($config->get('modules.system.aaa.formatter'), 'test_mail_collector');
+    $this->assertEqual($config->get('modules.system.bbb.formatter'), 'php_mail');
+    $this->assertEqual($config->get('modules.system.ccc.formatter'), 'test_mail_collector');
+
+    // Remove the first custom module.
+    $this->drupalPostForm(NULL, [
+        'custom[modules][system.aaa][remove]' => TRUE,
+    ], t('Save configuration'));
+    $config->clear('modules.system.aaa')->save();
+    $this->drupalGet(t('admin/config/system/mailsystem'));
+    $this->assertTrue(empty($config->get('modules.system.aaa')));
+    $this->assertTrue(!empty($config->get('modules.system.bbb')));
+    $this->assertTrue(!empty($config->get('modules.system.ccc')));
 
   }
 }
diff --git a/tests/src/Unit/AdminFormTest.php b/tests/src/Unit/AdminFormTest.php
index b0e5b53..d62cada 100644
--- a/tests/src/Unit/AdminFormTest.php
+++ b/tests/src/Unit/AdminFormTest.php
@@ -293,7 +293,7 @@ class AdminFormTest extends UnitTestCase {
     $form_state->setValues(array(
         'custom' => array(
           'modules' => array(
-            'module_two' => 'module_two',
+            'module_two' => ['remove' => TRUE],
             'module_one' => 'not_clean',
           ),
         ),
