diff --git a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
index 16281df..e733498 100644
--- a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
+++ b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
@@ -40,13 +40,17 @@ public function __construct(DiscoveryInterface $decorated) {
    *   not implement \Drupal\Component\Plugin\Derivative\DerivativeInterface.
    */
   public function getDefinition($plugin_id) {
-    list($base_plugin_id, $derivative_id) = $this->decodePluginId($plugin_id);
-
-    $plugin_definition = $this->decorated->getDefinition($base_plugin_id);
-    if (isset($plugin_definition)) {
-      $derivative_fetcher = $this->getDerivativeFetcher($base_plugin_id, $plugin_definition);
-      if ($derivative_fetcher) {
-        $plugin_definition = $derivative_fetcher->getDerivativeDefinition($derivative_id, $plugin_definition);
+    $plugin_definition = $this->decorated->getDefinition($plugin_id);
+    // If no plugin defined itself as this derivative then try to find a
+    // derivative.
+    if (!$plugin_definition) {
+      list($base_plugin_id, $derivative_id) = $this->decodePluginId($plugin_id);
+      $base_plugin_definition = $this->decorated->getDefinition($base_plugin_id);
+      if ($base_plugin_definition) {
+        $derivative_fetcher = $this->getDerivativeFetcher($base_plugin_id, $base_plugin_definition);
+        if ($derivative_fetcher) {
+          $plugin_definition = $derivative_fetcher->getDerivativeDefinition($derivative_id, $base_plugin_definition);
+        }
       }
     }
 
@@ -79,7 +83,9 @@ protected function getDerivatives(array $base_plugin_definitions) {
         $derivative_definitions = $derivative_fetcher->getDerivativeDefinitions($plugin_definition);
         foreach ($derivative_definitions as $derivative_id => $derivative_definition) {
           $plugin_id = $this->encodePluginId($base_plugin_id, $derivative_id);
-          $plugin_definitions[$plugin_id] = $derivative_definition;
+          if (!isset($base_plugin_definitions[$plugin_id])) {
+            $plugin_definitions[$plugin_id] = $derivative_definition;
+          }
         }
       }
       else {
