diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductEqual.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductEqual.php
new file mode 100644
index 0000000..19f2353
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductEqual.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionCondition;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\commerce_price\Price;
+
+/**
+ * Provides an 'Order: Total amount comparison' condition.
+ *
+ * @CommercePromotionCondition(
+ *   id = "commerce_promotion_product_equal",
+ *   label = @Translation("Product is"),
+ *   target_entity_type = "commerce_order_item",
+ * )
+ */
+class ProductEqual extends PromotionConditionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'entity' => NULL,
+    ] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form += parent::buildConfigurationForm($form, $form_state);
+
+    $entity_id = isset($this->configuration['entity']) ? $this->configuration['entity'] : NULL;
+
+    $form['entity'] = [
+      '#type' => 'entity_autocomplete',
+      '#title' => t('Product'),
+      '#default_value' =>  \Drupal::entityTypeManager()->getStorage('commerce_product')->load($entity_id),
+      '#target_type' => 'commerce_product',
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function evaluate() {
+    $entity_id = $this->configuration['entity'];
+    if (empty($entity_id)) {
+      return FALSE;
+    }
+    $entity = \Drupal::entityTypeManager()->getStorage('commerce_product')->load($entity_id);
+
+    /** @var \Drupal\commerce_product\Entity\ProductInterface $current_product */
+    $current_product = $this->getTargetEntity()->getPurchasedEntity()->getProduct();
+
+    return $current_product->id() == $entity->id() ? TRUE : FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summary() {
+    return $this->t('Compares the product entity.');
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductFieldEqual.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductFieldEqual.php
new file mode 100644
index 0000000..983021f
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductFieldEqual.php
@@ -0,0 +1,185 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionCondition;
+
+use Drupal\commerce_order\Entity\OrderItemInterface;
+use Drupal\Component\Utility\Html;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\taxonomy\TermInterface;
+use Drupal\taxonomy\TermStorage;
+
+/**
+ * Provides an 'Order: Total amount comparison' condition.
+ *
+ * @CommercePromotionCondition(
+ *   id = "commerce_promotion_product_field_equal",
+ *   label = @Translation("Product field is"),
+ *   target_entity_type = "commerce_order_item",
+ * )
+ */
+class ProductFieldEqual extends PromotionConditionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+        'bundle' => NULL,
+        'field' => NULL,
+      ] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form += parent::buildConfigurationForm($form, $form_state);
+    $ajax_wrapper_id = Html::getUniqueId('ajax-wrapper');
+    // Prefix and suffix used for Ajax replacement.
+    $form['#prefix'] = '<div id="' . $ajax_wrapper_id . '">';
+    $form['#suffix'] = '</div>';
+
+    $selected_bundle = isset($this->configuration['bundle']) ? $this->configuration['bundle'] : NULL;
+    $bundles = \Drupal::service("entity_type.bundle.info")->getBundleInfo('commerce_product');
+    $bundle_options = [];
+    foreach ($bundles as $bundle => $label) {
+      $bundle_options[$bundle] = $label['label'];
+    }
+
+    $form['bundle'] = [
+      '#type' => 'select',
+      '#options' => $bundle_options,
+      '#title' => t('Product bundle'),
+      '#default_value' =>  $selected_bundle,
+      '#required' => TRUE,
+      '#ajax' => [
+        'callback' => [$this, 'bundleAjaxCallback'],
+        'wrapper' => $ajax_wrapper_id,
+      ],
+    ];
+    if (!$selected_bundle) {
+      return $form;
+    }
+
+    $fields = \Drupal::service("entity_field.manager")->getFieldDefinitions('commerce_product', $selected_bundle);
+    $selected_field = isset($this->configuration['field']) ? $this->configuration['field'] : NULL;
+
+    $filed_options = [];
+    foreach ($fields as $field_id => $field_definition) {
+      $filed_options[$field_id] = $field_definition->getLabel();
+    }
+
+    $form['field'] = [
+      '#type' => 'select',
+      '#title' => t('Field'),
+      '#options' => $filed_options,
+      '#default_value' =>  $selected_field,
+      '#required' => TRUE,
+      '#ajax' => [
+        'callback' => [$this, 'bundleAjaxCallback'],
+        'wrapper' => $ajax_wrapper_id,
+      ],
+    ];
+
+    if (!$selected_field) {
+      return $form;
+    }
+
+    //Create an empty representative entity
+    $commerce_product = \Drupal::service('entity_type.manager')->getStorage('commerce_product')->create(array(
+        'type' => $selected_bundle,
+        $selected_field => $this->configuration[$selected_field],
+      )
+    );
+
+    //Get the EntityFormDisplay (i.e. the default Form Display) of this content type
+    $entity_form_display = \Drupal::service('entity_type.manager')->getStorage('entity_form_display')
+      ->load('commerce_product.' . $selected_bundle . '.default');
+
+    //Get the body field widget and add it to the form
+    if ($widget = $entity_form_display->getRenderer($selected_field)) { //Returns the widget class
+      $items = $commerce_product->get($selected_field); //Returns the FieldItemsList interface
+      $items->filterEmptyItems();
+      $form[$selected_field] = $widget->form($items, $form, $form_state); //Builds the widget form and attach it to your form
+      $form[$selected_field]['widget']['#required'] = TRUE;
+    }
+
+    return $form;
+  }
+
+
+  public function bundleAjaxCallback(array $form, FormStateInterface $form_state) {
+    $triggering_element = $form_state->getTriggeringElement();
+    $parents = array_slice($triggering_element['#array_parents'], 0, -1);
+    $form_element = NestedArray::getValue($form, $parents);
+    return $form_element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function evaluate() {
+    $bundle_id = $this->configuration['bundle'];
+    if (empty($bundle_id)) {
+      return FALSE;
+    }
+    $field_id = $this->configuration['field'];
+    if (empty($field_id)) {
+      return FALSE;
+    }
+    /** @var OrderItemInterface $order_item */
+    $order_item = $this->getContextValue('commerce_order_item');
+
+    /** @var \Drupal\commerce_product\Entity\ProductInterface $current_product */
+    $current_product = $order_item->getPurchasedEntity()->getProduct();
+    if ($current_product->bundle() != $bundle_id) {
+      return FALSE;
+    }
+
+    if (!$current_product->hasField($field_id)) {
+      return FALSE;
+    }
+
+    $field_type = $current_product->get($field_id)->getFieldDefinition()->getType();
+    $target_type = NULL;
+    if ($field_type == 'entity_reference') {
+      $target_type = $current_product->get($field_id)->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type');
+    }
+
+    if ($target_type == 'taxonomy_term') {
+      if ($current_product->get($field_id)->getValue() == $this->configuration[$field_id]) {
+        return TRUE;
+      }
+      else {
+        /** @var TermInterface $term */
+        $term = \Drupal::service('entity_type.manager')
+          ->getStorage("taxonomy_term")->load($this->configuration[$field_id][0]['target_id']);
+        $tree = \Drupal::service('entity_type.manager')
+          ->getStorage("taxonomy_term")
+          ->loadTree($term->getVocabularyId(), $term->id());
+        $found = FALSE;
+        foreach ($tree as $item) {
+          if ($item->tid == $current_product->get($field_id)->getValue()[0]['target_id']) {
+            $found = TRUE;
+            break;
+          }
+        }
+        return $found;
+      }
+    }
+    elseif ($current_product->get($field_id)->getValue() != $this->configuration[$field_id]) {
+      return FALSE;
+    }
+
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summary() {
+    return $this->t('Compares the product entity.');
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationEqual.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationEqual.php
new file mode 100644
index 0000000..ff0a072
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationEqual.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionCondition;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\commerce_price\Price;
+
+/**
+ * Provides an 'Order: Total amount comparison' condition.
+ *
+ * @CommercePromotionCondition(
+ *   id = "commerce_promotion_product_variation_equal",
+ *   label = @Translation("Product Variation is"),
+ *   target_entity_type = "commerce_order_item",
+ * )
+ */
+class ProductVariationEqual extends PromotionConditionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'entity' => NULL,
+    ] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form += parent::buildConfigurationForm($form, $form_state);
+
+    $entity_id = isset($this->configuration['entity']) ? $this->configuration['entity'] : NULL;
+
+    $form['entity'] = [
+      '#type' => 'entity_autocomplete',
+      '#title' => t('Product variation'),
+      '#default_value' =>  \Drupal::entityTypeManager()->getStorage('commerce_product_variation')->load($entity_id),
+      '#target_type' => 'commerce_product_variation',
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function evaluate() {
+    $entity_id = $this->configuration['entity'];
+    if (empty($entity_id)) {
+      return FALSE;
+    }
+    $entity = \Drupal::entityTypeManager()->getStorage('commerce_product_variation')->load($entity_id);
+
+    /** @var \Drupal\commerce_product\Entity\ProductVariationInterface $current_product_variation */
+    $current_product_variation = $this->getTargetEntity()->getPurchasedEntity();
+
+    $current_product_variation->id() == $entity->id() ? TRUE : FALSE;
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summary() {
+    return $this->t('Compares the product variation entity.');
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationFieldEqual.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationFieldEqual.php
new file mode 100644
index 0000000..f756f6d
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/ProductVariationFieldEqual.php
@@ -0,0 +1,188 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionCondition;
+
+use Drupal\commerce_order\Entity\OrderItemInterface;
+use Drupal\commerce_product\Entity\ProductVariationInterface;
+use Drupal\Component\Utility\Html;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\taxonomy\TermInterface;
+
+/**
+ * Provides an 'Order: Total amount comparison' condition.
+ *
+ * @CommercePromotionCondition(
+ *   id = "commerce_promotion_product_variation_field_equal",
+ *   label = @Translation("Product Variation field is"),
+ *   target_entity_type = "commerce_order_item",
+ * )
+ */
+class ProductVariationFieldEqual extends PromotionConditionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'bundle' => NULL,
+      'field' => NULL,
+      'value' => NULL,
+    ] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form += parent::buildConfigurationForm($form, $form_state);
+    $ajax_wrapper_id = Html::getUniqueId('ajax-wrapper');
+    // Prefix and suffix used for Ajax replacement.
+    $form['#prefix'] = '<div id="' . $ajax_wrapper_id . '">';
+    $form['#suffix'] = '</div>';
+
+//    $entity_id = isset($this->configuration['entity']) ? $this->configuration['entity'] : NULL;
+    $selected_bundle = isset($this->configuration['bundle']) ? $this->configuration['bundle'] : NULL;
+    $bundles = \Drupal::service("entity_type.bundle.info")->getBundleInfo('commerce_product_variation');
+    $bundle_options = [];
+    foreach ($bundles as $bundle => $label) {
+      $bundle_options[$bundle] = $label['label'];
+    }
+
+    $form['bundle'] = [
+      '#type' => 'select',
+      '#options' => $bundle_options,
+      '#title' => t('Product variation bundle'),
+      '#default_value' =>  $selected_bundle,
+      '#required' => TRUE,
+      '#ajax' => [
+        'callback' => [$this, 'bundleAjaxCallback'],
+        'wrapper' => $ajax_wrapper_id,
+      ],
+    ];
+    if (!$selected_bundle) {
+      return $form;
+    }
+
+    $fields = \Drupal::service("entity_field.manager")->getFieldDefinitions('commerce_product_variation', $selected_bundle);
+    $selected_field = isset($this->configuration['field']) ? $this->configuration['field'] : NULL;
+
+    $filed_options = [];
+    foreach ($fields as $field_id => $field_definition) {
+      $filed_options[$field_id] = $field_definition->getLabel();
+    }
+
+    $form['field'] = [
+      '#type' => 'select',
+      '#title' => t('Field'),
+      '#options' => $filed_options,
+      '#default_value' =>  $selected_field,
+      '#required' => TRUE,
+      '#ajax' => [
+        'callback' => [$this, 'bundleAjaxCallback'],
+        'wrapper' => $ajax_wrapper_id,
+      ],
+    ];
+
+    if (!$selected_field) {
+      return $form;
+    }
+
+    //Create an empty representative entity
+    $commerce_product_variation = \Drupal::service('entity_type.manager')->getStorage('commerce_product_variation')->create(array(
+        'type' => $selected_bundle,
+        $selected_field => $this->configuration[$selected_field],
+      )
+    );
+
+    //Get the EntityFormDisplay (i.e. the default Form Display) of this content type
+    $entity_form_display = \Drupal::service('entity_type.manager')->getStorage('entity_form_display')
+      ->load('commerce_product_variation.' . $selected_bundle . '.default');
+
+    //Get the body field widget and add it to the form
+    if ($widget = $entity_form_display->getRenderer($selected_field)) { //Returns the widget class
+      $items = $commerce_product_variation->get($selected_field); //Returns the FieldItemsList interface
+      $items->filterEmptyItems();
+      $form[$selected_field] = $widget->form($items, $form, $form_state); //Builds the widget form and attach it to your form
+      $form[$selected_field]['widget']['#required'] = TRUE;
+    }
+
+    return $form;
+  }
+
+  public function bundleAjaxCallback(array $form, FormStateInterface $form_state) {
+    $triggering_element = $form_state->getTriggeringElement();
+    $parents = array_slice($triggering_element['#array_parents'], 0, -1);
+    $form_element = NestedArray::getValue($form, $parents);
+    return $form_element;
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function evaluate() {
+    $bundle_id = $this->configuration['bundle'];
+    if (empty($bundle_id)) {
+      return FALSE;
+    }
+    $field_id = $this->configuration['field'];
+    if (empty($field_id)) {
+      return FALSE;
+    }
+    /** @var OrderItemInterface $order_item */
+    $order_item = $this->getContextValue('commerce_order_item');
+
+    /** @var ProductVariationInterface $current_product */
+    $current_product_variation = $order_item->getPurchasedEntity();
+    if ($current_product_variation->bundle() != $bundle_id) {
+      return FALSE;
+    }
+
+    if (!$current_product_variation->hasField($field_id)) {
+      return FALSE;
+    }
+
+    $field_type = $current_product_variation->get($field_id)->getFieldDefinition()->getType();
+    $target_type = NULL;
+    if ($field_type == 'entity_reference') {
+      $target_type = $current_product->get($field_id)->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type');
+    }
+
+    if ($target_type == 'taxonomy_term') {
+      if ($current_product_variation->get($field_id)->getValue() == $this->configuration[$field_id]) {
+        return TRUE;
+      }
+      else {
+        /** @var TermInterface $term */
+        $term = \Drupal::service('entity_type.manager')
+          ->getStorage("taxonomy_term")->load($this->configuration[$field_id][0]['target_id']);
+        $tree = \Drupal::service('entity_type.manager')
+          ->getStorage("taxonomy_term")
+          ->loadTree($term->getVocabularyId(), $term->id());
+        $found = FALSE;
+        foreach ($tree as $item) {
+          if ($item->tid == $current_product_variation->get($field_id)->getValue()[0]['target_id']) {
+            $found = TRUE;
+            break;
+          }
+        }
+        return $found;
+      }
+    }
+    elseif ($current_product_variation->get($field_id)->getValue() != $this->configuration[$field_id]) {
+      return FALSE;
+    }
+
+    return TRUE;
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summary() {
+    return $this->t('Compares the product variation entity.');
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionOffer/FixedOffBase.php b/modules/promotion/src/Plugin/Commerce/PromotionOffer/FixedOffBase.php
new file mode 100644
index 0000000..8ea6bc1
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionOffer/FixedOffBase.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionOffer;
+
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Provides the base class for percentage off offers.
+ */
+abstract class FixedOffBase extends PromotionOfferBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'amount' => 0,
+    ] + parent::defaultConfiguration();
+  }
+
+  /**
+   * Gets the percentage amount, as a decimal, negated.
+   *
+   * @return string
+   *   The amount.
+   */
+  public function getAmount() {
+    return (string) $this->configuration['amount'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form += parent::buildConfigurationForm($form, $form_state);
+
+    $form['amount'] = [
+      '#type' => 'commerce_number',
+      '#title' => $this->t('Amount'),
+      '#default_value' => $this->configuration['amount'],
+      '#maxlength' => 255,
+      '#required' => TRUE,
+      '#min' => 0,
+      '#size' => 8,
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $values = $form_state->getValue($form['#parents']);
+    if (empty($values['target_plugin_configuration']['amount'])) {
+      $form_state->setError($form, $this->t('Fixed amount cannot be empty.'));
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $values = $form_state->getValue($form['#parents']);
+    $this->configuration['amount'] = $values['amount'];
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionOffer/OrderFixedOff.php b/modules/promotion/src/Plugin/Commerce/PromotionOffer/OrderFixedOff.php
new file mode 100644
index 0000000..4f9f3bf
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionOffer/OrderFixedOff.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionOffer;
+
+use Drupal\commerce_price\Price;
+
+/**
+ * Provides a 'Order: Fixed off' condition.
+ *
+ * @CommercePromotionOffer(
+ *   id = "commerce_promotion_order_fixed_off",
+ *   label = @Translation("Fixed off"),
+ *   target_entity_type = "commerce_order"
+ * )
+ */
+class OrderFixedOff extends FixedOffBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute() {
+    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
+    $order = $this->getTargetEntity();
+    $adjustment_amount = new Price($this->getAmount(), $order->getTotalPrice()->getCurrencyCode());
+    $this->applyAdjustment($order, $adjustment_amount);
+  }
+
+}
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionOffer/ProductFixedOff.php b/modules/promotion/src/Plugin/Commerce/PromotionOffer/ProductFixedOff.php
new file mode 100644
index 0000000..4b296a2
--- /dev/null
+++ b/modules/promotion/src/Plugin/Commerce/PromotionOffer/ProductFixedOff.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionOffer;
+
+use Drupal\commerce_price\Price;
+
+/**
+ * Provides a 'Product: Fixed off' condition.
+ *
+ * @CommercePromotionOffer(
+ *   id = "commerce_promotion_product_fixed_off",
+ *   label = @Translation("Fixed off"),
+ *   target_entity_type = "commerce_order_item"
+ * )
+ */
+class ProductFixedOff extends FixedOffBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute() {
+    /** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item */
+    $order_item = $this->getTargetEntity();
+    $adjustment_amount = new Price($this->getAmount(), $order_item->getUnitPrice()->getCurrencyCode());
+    $this->applyAdjustment($order_item, $adjustment_amount);
+  }
+
+}
diff --git a/src/Element/PluginSelect.php b/src/Element/PluginSelect.php
index 5146fc4..95ce1a3 100644
--- a/src/Element/PluginSelect.php
+++ b/src/Element/PluginSelect.php
@@ -127,6 +127,10 @@ class PluginSelect extends CommerceElementBase {
       $plugin = $plugin_manager->createInstance($target_plugin_id, $values['target_plugin_configuration']);
       if ($plugin instanceof PluginFormInterface) {
         $element['target_plugin_configuration'] = $plugin->buildConfigurationForm($element['target_plugin_configuration'], $form_state);
+        // Need parents modification for proper ajax handle.
+        $element['target_plugin_configuration']['#tree'] = TRUE;
+        $element['target_plugin_configuration']['#parents'] = array_merge($element['#parents'], ['target_plugin_configuration']);
+        $element['target_plugin_configuration']['#array_parents'] = array_merge($element['#array_parents'], ['target_plugin_configuration']);
       }
     }
 
