diff --git a/uc_product/lib/Drupal/uc_product/Plugin/views/field/AddToCart.php b/uc_product/lib/Drupal/uc_product/Plugin/views/field/AddToCart.php
index bf17c2b..076b489 100644
--- a/uc_product/lib/Drupal/uc_product/Plugin/views/field/AddToCart.php
+++ b/uc_product/lib/Drupal/uc_product/Plugin/views/field/AddToCart.php
@@ -26,7 +26,7 @@ class AddToCart extends FieldPluginBase {
     $nid = $this->getValue($values);
     $node = node_load($nid);
     if (uc_product_is_product($node)) {
-      $form = drupal_get_form('uc_product_add_to_cart_form_' . $nid, $node);
+      $form = drupal_get_form('uc_product_add_to_cart_form', $node);
       return drupal_render($form);
     }
   }
diff --git a/uc_product/lib/Drupal/uc_product/Plugin/views/field/BuyItNow.php b/uc_product/lib/Drupal/uc_product/Plugin/views/field/BuyItNow.php
index eccfb97..538d54a 100644
--- a/uc_product/lib/Drupal/uc_product/Plugin/views/field/BuyItNow.php
+++ b/uc_product/lib/Drupal/uc_product/Plugin/views/field/BuyItNow.php
@@ -26,7 +26,7 @@ class BuyItNow extends FieldPluginBase {
     $nid = $this->getValue($values);
     $node = node_load($nid);
     if (uc_product_is_product($node)) {
-      $form = drupal_get_form('uc_catalog_buy_it_now_form_' . $nid, $node);
+      $form = drupal_get_form('uc_catalog_buy_it_now_form', $node);
       return drupal_render($form);
     }
   }
diff --git a/uc_product/uc_product.module b/uc_product/uc_product.module
index 4e88a66..2a33e51 100644
--- a/uc_product/uc_product.module
+++ b/uc_product/uc_product.module
@@ -147,23 +147,6 @@ function uc_product_preprocess_field(&$variables) {
 }
 
 /**
- * Implements hook_forms().
- *
- * Register an "add to cart" form for each product to prevent id collisions.
- */
-function uc_product_forms($form_id, $args) {
-  $forms = array();
-  if ($args[0] instanceof NodeInterface) {
-    $product = $args[0];
-    if (uc_product_is_product($product)) {
-      $forms['uc_product_add_to_cart_form_' . $product->id()] = array('callback' => 'uc_product_add_to_cart_form');
-      $forms['uc_catalog_buy_it_now_form_' . $product->id()] = array('callback' => 'uc_catalog_buy_it_now_form');
-    }
-  }
-  return $forms;
-}
-
-/**
  * Implements hook_form_BASE_FORM_ID_alter() for node_form().
  */
 function uc_product_form_node_form_alter(&$form, &$form_state) {
@@ -598,7 +581,7 @@ function uc_product_view_product(EntityInterface $node, EntityViewDisplay $displ
     // Build the 'add to cart' form, and use the updated variant based on data
     // provided by the form (e.g. attribute default options).
     if (module_exists('uc_cart') && $variant->id() && empty($variant->data['display_only'])) {
-      $add_to_cart_form = drupal_get_form('uc_product_add_to_cart_form_' . $variant->id(), $variant);
+      $add_to_cart_form = drupal_get_form('uc_product_add_to_cart_form', $variant);
       if (\Drupal::config('uc_product.settings')->get('update_node_view')) {
         $variant = $add_to_cart_form['node']['#value'];
       }
diff --git a/uc_product_kit/uc_product_kit.module b/uc_product_kit/uc_product_kit.module
index d30a566..9572bdf 100644
--- a/uc_product_kit/uc_product_kit.module
+++ b/uc_product_kit/uc_product_kit.module
@@ -92,6 +92,38 @@ function uc_product_kit_uc_form_alter(&$form, &$form_state, $form_id) {
       $form = array_merge(array('sub_products' => $products), $form);
     }
   }
+  elseif ($form_id == 'uc_product_add_to_cart_form') {
+    $kit = $form['node']['#value'];
+    if ($kit->getType() !== 'product_kit') {
+      return;
+    }
+
+    $form['products'] = array('#tree' => TRUE);
+    foreach ($kit->products as $i => $product) {
+      $form['products'][$i] = array('#title' => check_plain($product->label()));
+      $form['products'][$i]['nid'] = array('#type' => 'hidden', '#value' => $product->id());
+      $form['products'][$i]['qty'] = array('#type' => 'hidden', '#value' => $product->qty);
+    }
+
+    $form['#validate'][] = 'uc_product_kit_add_to_cart_form_validate';
+    $form['#submit'][] = 'uc_product_kit_add_to_cart_form_submit';
+  }
+  elseif ($form_id == 'uc_catalog_buy_it_now_form') {
+    $kit = $form['node']['#value'];
+    if ($kit->getType() !== 'product_kit') {
+      return;
+    }
+
+    $form['products'] = array('#tree' => TRUE);
+    foreach ($node->products as $i => $product) {
+      $form['products'][$i] = array('#title' => check_plain($product->title));
+      $form['products'][$i]['nid'] = array('#type' => 'hidden', '#value' => $product->nid);
+      $form['products'][$i]['qty'] = array('#type' => 'hidden', '#value' => $product->qty);
+    }
+
+    $form['#validate'][] = 'uc_product_kit_buy_it_now_form_validate';
+    $form['#submit'][] = 'uc_product_kit_buy_it_now_form_submit';
+  }
 }
 
 /**
@@ -469,7 +501,7 @@ function uc_product_kit_node_load($nodes) {
  * other product alterations are made.
  */
 function uc_product_kit_module_implements_alter(&$implementations, $hook) {
-  if ($hook == 'uc_product_alter') {
+  if (in_array($hook, array('uc_product_alter', 'XXuc_form_alter'))) {
     $group = $implementations['uc_product_kit'];
     unset($implementations['uc_product_kit']);
     $implementations =  array('uc_product_kit' => $group) + $implementations;
@@ -489,26 +521,6 @@ function uc_product_kit_theme() {
 }
 
 /**
- * Implements hook_forms().
- *
- * Registers an "Add to Cart" form for each product kit.
- *
- * @see uc_product_kit_add_to_cart_form()
- * @see uc_catalog_buy_it_now_form()
- */
-function uc_product_kit_forms($form_id, $args) {
-  $forms = array();
-  if ($args[0] instanceof NodeInterface) {
-    $product = $args[0];
-    if ($product->getType() == 'product_kit') {
-      $forms['uc_product_add_to_cart_form_' . $product->id()] = array('callback' => 'uc_product_kit_add_to_cart_form');
-      $forms['uc_catalog_buy_it_now_form_' . $product->id()] = array('callback' => 'uc_product_kit_buy_it_now_form');
-    }
-  }
-  return $forms;
-}
-
-/**
  * Implements hook_form_BASE_FORM_ID_alter() for node_form().
  */
 function uc_product_kit_form_node_form_alter(&$form, &$form_state) {
@@ -720,55 +732,6 @@ function uc_product_kit_node_view(EntityInterface $node, EntityViewDisplay $disp
 }
 
 /**
- * Lets the cart know how many of which products are included in a kit.
- *
- * uc_attribute_form_alter() hooks into this form to add attributes to each
- * element in $form['products'].
- *
- * @see uc_product_kit_add_to_cart_form_validate()
- * @see uc_product_kit_add_to_cart_form_submit()
- * @ingroup forms
- */
-function uc_product_kit_add_to_cart_form($form, &$form_state, $node) {
-  $form['nid'] = array('#type' => 'value', '#value' => $node->id());
-  $form['products'] = array('#tree' => TRUE);
-  foreach ($node->products as $i => $product) {
-    $form['products'][$i] = array('#title' => check_plain($product->label()));
-    $form['products'][$i]['nid'] = array('#type' => 'hidden', '#value' => $product->id());
-    $form['products'][$i]['qty'] = array('#type' => 'hidden', '#value' => $product->qty);
-  }
-  if ($node->default_qty > 0 && \Drupal::config('uc_product.settings')->get('add_to_cart_qty')) {
-    $form['qty'] = array(
-      '#type' => 'uc_quantity',
-      '#title' => t('Quantity'),
-      '#default_value' => $node->default_qty,
-    );
-  }
-  else {
-    $form['qty'] = array('#type' => 'hidden', '#value' => $node->default_qty ? $node->default_qty : 1);
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add to cart'),
-    '#id' => 'edit-submit-' . $node->id(),
-    '#attributes' => array(
-      'class' => array('node-add-to-cart'),
-    ),
-  );
-
-  $form['node'] = array(
-    '#type' => 'value',
-    '#value' => isset($form_state['storage']['variant']) ? $form_state['storage']['variant'] : $node,
-  );
-
-  uc_form_alter($form, $form_state, __FUNCTION__);
-
-  return $form;
-}
-
-/**
  * Form validation handler for uc_product_add_to_cart_form().
  *
  * @see uc_product_kit_add_to_cart_form()
@@ -799,42 +762,6 @@ function uc_product_kit_add_to_cart_form_submit($form, &$form_state) {
 }
 
 /**
- * Add-to-cart button with any extra fields.
- *
- * @see uc_product_kit_buy_it_now_form_validate()
- * @see uc_product_kit_buy_it_now_form_submit()
- * @ingroup forms
- */
-function uc_product_kit_buy_it_now_form($form, &$form_state, $node) {
-  $form['nid'] = array(
-    '#type' => 'hidden',
-    '#value' => $node->id(),
-  );
-  if ($node->getType() == 'product_kit') {
-    $form['products'] = array('#tree' => TRUE);
-    foreach ($node->products as $i => $product) {
-      $form['products'][$i] = array('#title' => check_plain($product->title));
-      $form['products'][$i]['nid'] = array('#type' => 'hidden', '#value' => $product->nid);
-      $form['products'][$i]['qty'] = array('#type' => 'hidden', '#value' => $product->qty);
-    }
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add to cart'),
-    '#id' => 'edit-submit-' . $node->nid,
-    '#attributes' => array(
-      'class' => array('list-add-to-cart'),
-    ),
-  );
-
-  uc_form_alter($form, $form_state, __FUNCTION__);
-
-  return $form;
-}
-
-/**
  * Redirects to the product kit page so attributes may be selected.
  *
  * @see uc_product_kit_buy_it_now_form()
diff --git a/uc_store/lib/Drupal/uc_store/Tests/UbercartTestBase.php b/uc_store/lib/Drupal/uc_store/Tests/UbercartTestBase.php
index 0f2ce1c..0ec74cc 100644
--- a/uc_store/lib/Drupal/uc_store/Tests/UbercartTestBase.php
+++ b/uc_store/lib/Drupal/uc_store/Tests/UbercartTestBase.php
@@ -16,7 +16,7 @@ abstract class UbercartTestBase extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('uc_cart');
+  public static $modules = array('uc_cart', 'uc_order', 'uc_product', 'uc_store');
 
   /** User with privileges to do everything. */
   protected $adminUser;
