diff --git a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
index 16281df..b9bb851 100644
--- a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
+++ b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
@@ -40,6 +40,9 @@ public function __construct(DiscoveryInterface $decorated) {
    *   not implement \Drupal\Component\Plugin\Derivative\DerivativeInterface.
    */
   public function getDefinition($plugin_id) {
+    if ($plugin_definition = $this->decorated->getDefinition($plugin_id)) {
+      return $plugin_definition;
+    }
     list($base_plugin_id, $derivative_id) = $this->decodePluginId($plugin_id);
 
     $plugin_definition = $this->decorated->getDefinition($base_plugin_id);
@@ -79,7 +82,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 {
