diff --git a/help_topics/derived.help_topic.yml b/help_topics/derived.help_topic.yml
new file mode 100644
index 0000000..24ee5b2
--- /dev/null
+++ b/help_topics/derived.help_topic.yml
@@ -0,0 +1,3 @@
+derived:
+  class: \Drupal\help_topics\Plugin\HelpTopic\DerivedHelpTopicPlugin
+  deriver: \Drupal\help_topics\Plugin\Deriver\HelpTopicDeriver
diff --git a/src/Entity/HelpTopic.php b/src/Entity/HelpTopic.php
index 3215885..c652e08 100644
--- a/src/Entity/HelpTopic.php
+++ b/src/Entity/HelpTopic.php
@@ -333,4 +333,31 @@ class HelpTopic extends ConfigEntityBase implements HelpTopicInterface {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getPluginId() {
+    return 'help_topic_entity:' . $this->id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPluginDefinition() {
+    $definition = [
+      'class' => 'Drupal\\help_topic\\Plugin\\HelpTopic\\DerivedHelpTopicPlugin',
+      'metadata' => ['entity_id' => $this->id],
+      'id' => $this->getPluginId(),
+      'label' => $this->label,
+      'body' => $this->body,
+      'body_format' => $this->body_format,
+      'top_level' => $this->top_level,
+      'locked' => $this->locked,
+      'related' => $this->related,
+      'list_on' => $this->list_on,
+    ];
+
+    return $definition;
+  }
+
 }
diff --git a/src/HelpTopicInterface.php b/src/HelpTopicInterface.php
index 1cec1d1..1ac431d 100644
--- a/src/HelpTopicInterface.php
+++ b/src/HelpTopicInterface.php
@@ -12,7 +12,7 @@ use Drupal\Core\Config\Entity\ConfigEntityInterface;
 interface HelpTopicInterface extends ConfigEntityInterface {
 
   /**
-   * Returns body of the topic.
+   * Returns the body of the topic.
    *
    * @return string
    *   The HTML-formatted body of the topic.
@@ -146,4 +146,19 @@ interface HelpTopicInterface extends ConfigEntityInterface {
    */
   public function setEnforcedDependencies(array $dependencies);
 
+  /**
+   * Returns the ID to use for this entity when wrapped in a plugin.
+   *
+   * @return string
+   *   Plugin ID for this entity.
+   */
+  public function getPluginId();
+
+  /**
+   * Returns the entity information in the form of a plugin definition.
+   *
+   * @return array
+   *   Array of entity information in the format of a plugin definition.
+   */
+  public function getPluginDefinition();
 }
diff --git a/src/HelpTopicPluginBase.php b/src/HelpTopicPluginBase.php
index 742d6ae..a99b6a4 100644
--- a/src/HelpTopicPluginBase.php
+++ b/src/HelpTopicPluginBase.php
@@ -289,4 +289,4 @@ abstract class HelpTopicPluginBase extends PluginBase implements HelpTopicPlugin
 
     return $chunks;
   }
-}
\ No newline at end of file
+}
diff --git a/src/Plugin/Deriver/HelpTopic.php b/src/Plugin/Deriver/HelpTopicDeriver.php
similarity index 67%
rename from src/Plugin/Deriver/HelpTopic.php
rename to src/Plugin/Deriver/HelpTopicDeriver.php
index c6af606..b35a3df 100644
--- a/src/Plugin/Deriver/HelpTopic.php
+++ b/src/Plugin/Deriver/HelpTopicDeriver.php
@@ -8,10 +8,9 @@ use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Provides help topic plugin definitions for custom help topics.
- *
+ * Provides derivative help topic plugins for help topic entities.
  */
-class HelpTopic extends DeriverBase implements ContainerDeriverInterface {
+class HelpTopicDeriver extends DeriverBase implements ContainerDeriverInterface {
 
   /**
    * The help topic storage.
@@ -21,7 +20,7 @@ class HelpTopic extends DeriverBase implements ContainerDeriverInterface {
   protected $helpTopicStorage;
 
   /**
-   * Constructs new HelpTopic.
+   * Constructs new HelpTopicDeriver.
    *
    * @param \Drupal\Core\Entity\EntityStorageInterface $help_topic_storage
    *   The help topic storage.
@@ -43,10 +42,9 @@ class HelpTopic extends DeriverBase implements ContainerDeriverInterface {
    * {@inheritdoc}
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
-    foreach ($this->helpTopicStorage->loadMultiple() as $help_topic => $entity) {
-      $this->derivatives[$help_topic] = $base_plugin_definition;
-      $this->derivatives[$help_topic]['admin_label'] = $entity->label();
-      $this->derivatives[$help_topic]['config_dependencies']['config'] = [$entity->getConfigDependencyName()];
+    $this->derivatives = [];
+    foreach ($this->helpTopicStorage->loadMultiple() as $id => $entity) {
+      $this->derivatives[$id] = $entity->getPluginDefinition();
     }
     return $this->derivatives;
   }
diff --git a/src/Plugin/HelpTopic/DerivedHelpTopicPlugin.php b/src/Plugin/HelpTopic/DerivedHelpTopicPlugin.php
new file mode 100644
index 0000000..3e300d5
--- /dev/null
+++ b/src/Plugin/HelpTopic/DerivedHelpTopicPlugin.php
@@ -0,0 +1,165 @@
+<?php
+
+
+namespace Drupal\help_topics\Plugin\HelpTopic;
+
+use Drupal\Component\Plugin\Exception\PluginException;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\help_topics\HelpTopicInterface;
+
+/**
+ * Wraps the help topic entity into a help topic plugin.
+ */
+class DerivedHelpTopicPlugin extends HelpTopicPluginBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The entity this plugin is wrapping.
+   *
+   * @var \Drupal\help_topics\HelpTopicInterface
+   */
+  protected $entity;
+
+  /**
+   * The help topic storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $helpTopicStorage;
+
+  /**
+   * Constructs a DerivedHelpTopicPlugin.
+   *
+   * @param string $plugin_id
+   *   The ID for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin definition.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $help_topic_storage
+   *   The help topic storage.
+   */
+  public function __construct($plugin_id, array $plugin_definition, EntityStorageInterface $help_topic_storage) {
+    $this->helpTopicStorage = $help_topic_storage;
+
+    if (!isset($plugin_definition['metadata']['entity_id'])) {
+      throw new PluginException($this->t('Missing entity ID in plugin definition'));
+    }
+    $entities = $help_topic_storage->loadMultiple($plugin_definition['metadata']['entity_id']);
+    if (!$entities || !count($entities)) {
+      throw new PluginException($this->t('Invalid entity ID in plugin definition'));
+    }
+    $entity = reset($entities);
+    $this->entity = clone($entity);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBody() {
+    return $this->entity->getBody();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBody($body) {
+    $this->entity->setBody($body);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBodyFormat() {
+    return $this->entity->getBodyFormat();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBodyFormat($format) {
+    $this->entity->setBodyFormat($format);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isTopLevel() {
+    return $this->entity->isTopLevel();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setTopLevel($top_level) {
+    $this->entity->setTopLevel($format);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isLocked() {
+    return $this->entity->isLocked();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setLocked($locked = TRUE) {
+    $this->entity->setLocked($locked);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRelated() {
+    return $this->entity->getRelated();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRelated(array $topics) {
+    $this->entity->setRelated($topics);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getListOn() {
+    return $this->entity->getListOn();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setListOn(array $topics) {
+    $this->entity->setListOn($topics);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheMaxAge() {
+    return $this->entity->getCacheMaxAge();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    return $this->entity->getCacheContexts();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheTags() {
+    return $this->entity->getCacheTags();
+  }
+
+}
