diff --git a/config/optional/core.entity_form_display.commerce_order_item.default.pado_add_to_cart.yml b/config/optional/core.entity_form_display.commerce_order_item.default.pado_add_to_cart.yml
new file mode 100644
index 0000000..0fb2095
--- /dev/null
+++ b/config/optional/core.entity_form_display.commerce_order_item.default.pado_add_to_cart.yml
@@ -0,0 +1,27 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - commerce_order.commerce_order_item_type.default
+    - core.entity_form_mode.commerce_order_item.pado_add_to_cart
+  enforced:
+    module:
+      - commerce_pado
+  module:
+    - commerce_product
+id: commerce_order_item.default.pado_add_to_cart
+targetEntityType: commerce_order_item
+bundle: default
+mode: pado_add_to_cart
+content:
+  purchased_entity:
+    type: commerce_product_variation_attributes
+    weight: 0
+    settings: { }
+    third_party_settings: {  }
+hidden:
+  created: true
+  quantity: true
+  status: true
+  uid: true
+  unit_price: true
diff --git a/config/optional/core.entity_form_mode.commerce_order_item.pado_add_to_cart.yml b/config/optional/core.entity_form_mode.commerce_order_item.pado_add_to_cart.yml
new file mode 100644
index 0000000..4238a33
--- /dev/null
+++ b/config/optional/core.entity_form_mode.commerce_order_item.pado_add_to_cart.yml
@@ -0,0 +1,12 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - commerce_pado
+  enforced:
+    module:
+      - commerce_pado
+id: commerce_order_item.pado_add_to_cart
+label: 'PADO add to cart'
+targetEntityType: commerce_order_item
+cache: true
diff --git a/src/Form/PadoAddToCartForm.php b/src/Form/PadoAddToCartForm.php
index ad8558e..80fc85c 100644
--- a/src/Form/PadoAddToCartForm.php
+++ b/src/Form/PadoAddToCartForm.php
@@ -2,11 +2,11 @@
 
 namespace Drupal\commerce_pado\Form;
 
-use Drupal\commerce\Context;
-use Drupal\commerce\PurchasableEntityInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Link;
 use Drupal\commerce_cart\Form\AddToCartForm;
+use Drupal\commerce_order\Entity\OrderItem;
+use Drupal\commerce\Context;
+use Drupal\Core\Link;
 
 /**
  * Provides the order item add to cart form.
@@ -20,38 +20,85 @@ class PadoAddToCartForm extends AddToCartForm {
     $form = parent::buildForm($form, $form_state);
 
     // Add add-ons.
+    $field_name = $form_state->get(['settings', 'add_on_field']);
+    /** @var \Drupal\commerce_product\Entity\ProductInterface $product */
+    $product = $form_state->get('product');
+
+    $form['add_ons'] = [
+      '#type' => 'container',
+      '#tree' => TRUE,
+    ];
+    /** @var \Drupal\commerce_product\Entity\ProductInterface $add_on_product */
+    foreach ($product->{$field_name} as $add_on_product) {
+      $add_on_product_id = $add_on_product->entity->id();
+      $form['add_ons'][$add_on_product_id] = [
+        '#type' => 'fieldset',
+        '#title' => $this->t('Add-ons'),
+        '#product' => $add_on_product->entity,
+      ];
 
+      foreach ($add_on_product->entity->variations as $add_on_variation_field) {
+        /** @var \Drupal\commerce_product\Entity\ProductVariationInterface $add_on_variation */
+        $add_on_variation = $add_on_variation_field->entity;
+        $add_on_variation_id = $add_on_variation->id();
+        $view_builder = $this->entityTypeManager->getViewBuilder('commerce_product_variation');
+        $form['add_ons'][$add_on_product_id][$add_on_variation_id]['variation'] = $view_builder->view($add_on_variation, 'add_on');
+        $form['add_ons'][$add_on_product_id][$add_on_variation_id]['variation']['#weight'] = 1;
+        $form['add_ons'][$add_on_product_id][$add_on_variation_id]['checkbox'] = [
+          '#type' => 'checkbox',
+          '#weight' => 2,
+          '#variation' => $add_on_variation,
+        ];
+      }
 
+    }
     return $form;
   }
 
-
-
   /**
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     parent::submitForm($form, $form_state);
+    $add_ons = $form_state->getValue('add_ons');
+    $combine = $form_state->get(['settings', 'combine']);
+    foreach ($add_ons as $add_on_product) {
+      foreach ($add_on_product as $add_on_variation_id => $add_on_variation_value) {
+        if ($add_on_variation_value['checkbox']) {
+          /** @var \Drupal\commerce_product\Entity\ProductVariation $add_on_variation */
+          $add_on_variation = $this->entityTypeManager->getStorage('commerce_product_variation')->load($add_on_variation_id);
+
+          // @todo Allow providing quantity in the add to cart form.
+          $quantity = 1;
+          $order_item_properties = [
+            'type' => $add_on_variation->getOrderItemTypeId(),
+            // The strict comparison in OrderItemMatcher::matchAll() requires
+            // us to cast the id to string.
+            'purchased_entity' => (string) $add_on_variation_id,
+            'quantity' => $quantity,
+          ];
+          /** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item */
+          $order_item = OrderItem::create($order_item_properties);
+          $store = $this->selectStore($add_on_variation);
+          $context = new Context($this->currentUser, $store);
+          $resolved_price = $this->chainPriceResolver->resolve($add_on_variation, $quantity, $context);
+          $order_item->setTitle($add_on_variation->getOrderItemTitle());
+          $order_item->setUnitPrice($resolved_price);
+          //$order_item->save();
+
+          $order_type_id = $this->orderTypeResolver->resolve($order_item);
+
+          $cart = $this->cartProvider->getCart($order_type_id, $store);
+          $this->cartManager->addOrderItem($cart, $order_item, $combine);
 
-    /** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item
-    $order_item = $this->entity;
-    /** @var \Drupal\commerce\PurchasableEntityInterface $purchased_entity
-    $purchased_entity = $order_item->getPurchasedEntity();
+          drupal_set_message($this->t('@entity added to @cart-link.', [
+            '@entity' => $add_on_variation->label(),
+            '@cart-link' => Link::createFromRoute($this->t('your cart', [], ['context' => 'cart link']), 'commerce_cart.page')->toString(),
+          ]));
 
-    $order_type_id = $this->orderTypeResolver->resolve($order_item);
-    $store = $this->selectStore($purchased_entity);
-    $cart = $this->cartProvider->getCart($order_type_id, $store);
-    if (!$cart) {
-      $cart = $this->cartProvider->createCart($order_type_id, $store);
+        }
+      }
     }
-    $this->cartManager->addOrderItem($cart, $order_item, $form_state->get(['settings', 'combine']));
-    // Other submit handlers might need the cart ID.
-    $form_state->set('cart_id', $cart->id());
-
-    drupal_set_message($this->t('@entity added to @cart-link.', [
-      '@entity' => $purchased_entity->label(),
-      '@cart-link' => Link::createFromRoute($this->t('your cart', [], ['context' => 'cart link']), 'commerce_cart.page')->toString(),
-    ]));*/
   }
 
 }
diff --git a/src/PadoLazyBuilders.php b/src/PadoLazyBuilders.php
index 5b9bd84..603a3e4 100644
--- a/src/PadoLazyBuilders.php
+++ b/src/PadoLazyBuilders.php
@@ -23,7 +23,7 @@ class PadoLazyBuilders extends ProductLazyBuilders {
    * @return array
    *   A renderable array containing the cart form.
    */
-  public function addToCartForm($product_id, $view_mode, $combine) {
+  public function addToCartWithAddOnsForm($product_id, $view_mode, $combine, $add_on_field) {
     /** @var \Drupal\commerce_order\OrderItemStorageInterface $order_item_storage */
     $order_item_storage = $this->entityTypeManager->getStorage('commerce_order_item');
     /** @var \Drupal\commerce_product\Entity\ProductInterface $product */
@@ -46,6 +46,7 @@ class PadoLazyBuilders extends ProductLazyBuilders {
       'view_mode' => $view_mode,
       'settings' => [
         'combine' => $combine,
+        'add_on_field' => $add_on_field,
       ],
     ]);
 
diff --git a/src/Plugin/Field/FieldFormatter/PadoAddToCartFormatter.php b/src/Plugin/Field/FieldFormatter/PadoAddToCartFormatter.php
index 6f62dce..15a13d2 100644
--- a/src/Plugin/Field/FieldFormatter/PadoAddToCartFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/PadoAddToCartFormatter.php
@@ -70,7 +70,7 @@ class PadoAddToCartFormatter extends AddToCartFormatter {
     $elements = [];
     $elements[0]['add_to_cart_form'] = [
       '#lazy_builder' => [
-        'commerce_pado.lazy_builders:addToCartForm', [
+        'commerce_pado.lazy_builders:addToCartWithAddOnsForm', [
           $items->getEntity()->id(),
           $this->viewMode,
           $this->getSetting('combine'),
