diff --git a/config/schema/tamper.schema.yml b/config/schema/tamper.schema.yml
index 1118701..8a8e9ed 100644
--- a/config/schema/tamper.schema.yml
+++ b/config/schema/tamper.schema.yml
@@ -1,2 +1,72 @@
-tamper.settings.*:
+tamper.*:
   type: mapping
+  label: 'Tamper plugin'
+
+tamper.convert_case:
+  mapping:
+    operation:
+      type: string
+      label: 'How to convert case'
+
+tamper.default_value:
+  mapping:
+    default_value:
+      type: string
+      label: 'Value'
+    only_if_empty:
+      type: boolean
+      label: 'Only if empty'
+
+tamper.explode:
+  mapping:
+    separator:
+      type: string
+      label: 'String separator'
+    limit:
+      type: integer
+      label: 'Limit'
+
+tamper.find_replace:
+  mapping:
+    find:
+      type: string
+      label: 'Text to find'
+    replace:
+      type: string
+      label: 'Text to replace'
+    case_sensitive:
+      type: boolean
+      label: 'Case sensitive'
+    word_boundaries:
+      type: boolean
+      label: 'Respect word boundaries'
+    whole:
+      type: boolean
+      label: 'Match whole word/phrase'
+
+tamper.hash:
+  mapping:
+    override:
+      type: boolean
+      label: 'Override set value'
+
+tamper.implode:
+  mapping:
+    glue:
+      type: string
+      label: 'String glue'
+
+tamper.required:
+  mapping:
+    invert:
+      type: boolean
+      label: 'Invert filter'
+
+tamper.trim:
+  mapping:
+    character:
+      type: string
+      label: 'Characters to trim'
+    side:
+      type: string
+      label: 'Side'
diff --git a/src/Plugin/Tamper/Trim.php b/src/Plugin/Tamper/Trim.php
index 073b23f..042e363 100644
--- a/src/Plugin/Tamper/Trim.php
+++ b/src/Plugin/Tamper/Trim.php
@@ -40,7 +40,7 @@ class Trim extends TamperBase {
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form[self::SETTING_CHARACTER] = [
       '#type' => 'textfield',
-      '#title' => $this->t('Chracters to trim'),
+      '#title' => $this->t('Characters to trim'),
       '#default_value' => $this->getSetting(self::SETTING_CHARACTER),
       '#description' => $this->t('The characters to remove from the string. If blank, then whitespace will be removed.'),
     ];
diff --git a/tests/modules/tamper_test/config/schema/tamper_test.schema.yml b/tests/modules/tamper_test/config/schema/tamper_test.schema.yml
new file mode 100644
index 0000000..c8057f1
--- /dev/null
+++ b/tests/modules/tamper_test/config/schema/tamper_test.schema.yml
@@ -0,0 +1,17 @@
+# Third party settings for entity_test_bundle for Tamper test.
+entity_test.entity_test_bundle.*.third_party.tamper_test:
+  type: mapping
+  label: 'Tamper test settings'
+  mapping:
+    tampers:
+      type: sequence
+      sequence:
+        type: tamper_test.[id]
+
+tamper_test.*:
+  type: tamper.[id]
+  mapping:
+    # 'id' is the plugin key in DefaultLazyPluginCollection.
+    id:
+      type: string
+      label: 'Tamper plugin ID'
diff --git a/tests/modules/tamper_test/tamper_test.info.yml b/tests/modules/tamper_test/tamper_test.info.yml
new file mode 100644
index 0000000..6054f48
--- /dev/null
+++ b/tests/modules/tamper_test/tamper_test.info.yml
@@ -0,0 +1,8 @@
+name: 'Tamper test'
+description: Test module for Tamper.
+type: module
+package: Testing
+core: 8.x
+dependencies:
+  - entity_test
+  - tamper
diff --git a/tests/src/Kernel/TamperConfigSchemaTest.php b/tests/src/Kernel/TamperConfigSchemaTest.php
new file mode 100644
index 0000000..c021a0e
--- /dev/null
+++ b/tests/src/Kernel/TamperConfigSchemaTest.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Drupal\Tests\tamper\Kernel;
+
+use Drupal\entity_test\Entity\EntityTestBundle;
+use Drupal\Core\Plugin\DefaultLazyPluginCollection;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\tamper\TamperInterface;
+
+/**
+ * Tests config schema of each tamper plugin.
+ *
+ * @group tamper
+ */
+class TamperConfigSchemaTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['entity_test', 'tamper', 'tamper_test'];
+
+  /**
+   * The config entity to add third party settings to.
+   *
+   * @var \Drupal\entity_test\Entity\EntityTestWithBundle
+   */
+  protected $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('entity_test_bundle');
+
+    $this->entity = EntityTestBundle::create([
+      'id' => 'test',
+      'label' => 'Test label',
+      'description' => 'My test description',
+    ]);
+    $this->entity->save();
+  }
+
+  /**
+   * Tests instantiating each plugin.
+   */
+  public function testCreateInstance() {
+    $tamper_manager = \Drupal::service('plugin.manager.tamper');
+    $plugin_collection = new DefaultLazyPluginCollection($tamper_manager, []);
+    foreach ($tamper_manager->getDefinitions() as $plugin_id => $plugin_definition) {
+      // Create instance. DefaultLazyPluginCollection uses 'id' as plugin key.
+      $plugin_collection->addInstanceId($plugin_id, [
+        'id' => $plugin_id,
+      ]);
+
+      // Assert that the instance implements TamperInterface.
+      $tamper = $plugin_collection->get($plugin_id);
+      $this->assertInstanceOf(TamperInterface::class, $tamper);
+
+      // Add tamper instances to the entity so that the config schema checker
+      // runs.
+      $this->entity->setThirdPartySetting('tamper_test', 'tampers', $plugin_collection->getConfiguration());
+      $this->entity->save();
+    }
+  }
+
+}
