diff --git a/modules/cart/src/Form/AddToCartForm.php b/modules/cart/src/Form/AddToCartForm.php
index f0f90be..d797ba2 100644
--- a/modules/cart/src/Form/AddToCartForm.php
+++ b/modules/cart/src/Form/AddToCartForm.php
@@ -57,13 +57,11 @@ class AddToCartForm extends ContentEntityForm {
   protected $chainPriceResolver;
 
   /**
-   * The form instance ID.
+   * The form instance IDs of purchased entities.
    *
-   * Numeric counter used to ensure form ID uniqueness.
-   *
-   * @var int
+   * @var array
    */
-  protected static $formInstanceId = 0;
+  protected static $FormInstanceIds = [];
 
   /**
    * The current user.
@@ -99,8 +97,6 @@ class AddToCartForm extends ContentEntityForm {
     $this->storeContext = $store_context;
     $this->chainPriceResolver = $chain_price_resolver;
     $this->currentUser = $current_user;
-
-    self::$formInstanceId++;
   }
 
   /**
@@ -136,9 +132,23 @@ class AddToCartForm extends ContentEntityForm {
     if ($this->operation != 'default') {
       $form_id = $form_id . '_' . $this->operation;
     }
-    $form_id .= '_' . self::$formInstanceId;
+    $product_id = $this->entity->getPurchasedEntity()->getProductId();
+    $str = $product_id . serialize($this->entity->getPurchasedEntity()->toArray());
+    $id = sha1($str);
+    // For the case when on a page 2+ exactly the same add_to_cart forms.
+    while (in_array($id, static::$FormInstanceIds)) {
+      $id = sha1($id . $id);
+    }
+    static::$FormInstanceIds[] = $id;
+
+    return $form_id . '_' . $id . '_form';
+  }
 
-    return $form_id . '_form';
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormInstanceIds() {
+    return static::$FormInstanceIds;
   }
 
   /**
diff --git a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php
index 7407ad2..0597113 100644
--- a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php
+++ b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php
@@ -112,15 +112,17 @@ class ProductVariationAttributesWidget extends ProductVariationWidgetBase implem
     }
 
     // Build the full attribute form.
-    $wrapper_id = Html::getUniqueId('commerce-product-add-to-cart-form');
+    $ids = $form_state->getFormObject()->getFormInstanceIds();
+    $id = end($ids);
+    $wrapper_id = Html::getUniqueId('commerce-product-add-to-cart-form-' . $id);
     $form += [
       '#wrapper_id' => $wrapper_id,
       '#prefix' => '<div id="' . $wrapper_id . '">',
       '#suffix' => '</div>',
     ];
-    $parents = array_merge($element['#field_parents'], [$items->getName(), $delta]);
-    $user_input = (array) NestedArray::getValue($form_state->getUserInput(), $parents);
-    if (!empty($user_input)) {
+    if ($form_state->getTriggeringElement()) {
+      $parents = array_merge($element['#field_parents'], [$items->getName(), $delta]);
+      $user_input = (array) NestedArray::getValue($form_state->getUserInput(), $parents);
       $selected_variation = $this->selectVariationFromUserInput($variations, $user_input);
     }
     else {
@@ -145,7 +147,9 @@ class ProductVariationAttributesWidget extends ProductVariationWidgetBase implem
       ],
     ];
     foreach ($this->getAttributeInfo($selected_variation, $variations) as $field_name => $attribute) {
+      $id = 'edit-purchased-entity-0-attributes-attribute-' . str_replace('_', '-', $field_name) . '-' . $id;
       $element['attributes'][$field_name] = [
+        '#id' => Html::getUniqueId($id),
         '#type' => $attribute['element_type'],
         '#title' => $attribute['title'],
         '#options' => $attribute['values'],
@@ -176,6 +180,7 @@ class ProductVariationAttributesWidget extends ProductVariationWidgetBase implem
       if (!isset($element['attributes'][$field_name]['#empty_value'])) {
         $element['attributes'][$field_name]['#required'] = TRUE;
       }
+
     }
 
     return $element;
