diff --git a/modules/label/src/Form/PrintLabelsForm.php b/modules/label/src/Form/PrintLabelsForm.php
index d49cbcf..20be538 100644
--- a/modules/label/src/Form/PrintLabelsForm.php
+++ b/modules/label/src/Form/PrintLabelsForm.php
@@ -6,9 +6,9 @@
 namespace Drupal\commerce_pos_label\Form;
 
 use Drupal\commerce_product\Entity\ProductVariation;
-use Drupal\Core\Entity\Entity;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DomCrawler\Form;
 
 class PrintLabelsForm extends FormBase {
 
@@ -30,7 +30,7 @@ class PrintLabelsForm extends FormBase {
         // If we don't have labels to create, add in our passed in product.
         if (!$form_state->get('labels_to_create')) {
           $labels_to_create = array();
-          $labels_to_create[$product_variation->id()] = $this->build_info_array($product_variation);
+          $labels_to_create[$product_variation_id] = $this->build_info_array($product_variation);
           $form_state->set('labels_to_create', $labels_to_create);
         }
       }
@@ -74,7 +74,7 @@ class PrintLabelsForm extends FormBase {
         '#title' => t('product search'),
         '#title_display' => 'invisible',
         '#size' => 60,
-        '#description' => t('Search by SKU or product title, start typing to begin your search.'),
+        '#description' => t('Search by product title, start typing to begin your search.'),
         '#attributes' => array(
           'class' => array(
             'commerce-pos-product-autocomplete',
@@ -88,14 +88,14 @@ class PrintLabelsForm extends FormBase {
       $form['product_search_add'] = array(
         '#type' => 'submit',
         '#value' => t('Add'),
-        '#validate' => array(''),
-        '#submit' => array(''),
+        '#validate' => array('::productAddValidate'),
+        '#submit' => array('::productAddSubmit'),
         '#attributes' => array(
           'class' => array('commerce-pos-label-btn-add commerce-pos-btn fixed-width btn-success'),
         ),
         '#ajax' => array(
           'wrapper' => $form_wrapper_id,
-          'callback' => '',
+          'callback' => '::labelsFormAjax',
         ),
       );
     }
@@ -113,10 +113,11 @@ class PrintLabelsForm extends FormBase {
 
     if ($labels_to_create = $form_state->get('labels_to_create')) {
       foreach ($labels_to_create as $product_variation_id => $label_info) {
+        
         $form['label_options']['label_list'][$product_variation_id]['quantity'] = array(
           '#type' => 'textfield',
           '#title' => t('Quantity'),
-          '#default_value' => $label_info['quantity'],
+          '#value' => $label_info['quantity'],
           '#required' => TRUE,
           '#size' => 5,
         );
@@ -125,19 +126,19 @@ class PrintLabelsForm extends FormBase {
           '#title' => t('Title'),
           '#type' => 'textfield',
           '#required' => TRUE,
-          '#default_value' => $label_info['title'],
+          '#value' => $label_info['title'],
         );
 
         $form['label_options']['label_list'][$product_variation_id]['description'] = array(
           '#title' => t('Description'),
           '#type' => 'textfield',
-          '#default_value' => $label_info['description'],
+          '#value' => $label_info['description'],
         );
 
         $form['label_options']['label_list'][$product_variation_id]['price'] = array(
           '#type' => 'textfield',
           '#title' => t('Price'),
-          '#default_value' => $label_info['price'],
+          '#value' => $label_info['price'],
           '#required' => TRUE,
           '#size' => 5,
         );
@@ -148,8 +149,13 @@ class PrintLabelsForm extends FormBase {
             '#type' => 'submit',
             '#value' => t('Remove'),
             '#name' => 'remove-' . $product_variation_id,
-            '#submit' => array(''),
+            '#validate' => array('::productRemoveValidate'),
+            '#submit' => array('::productRemoveSubmit'),
             '#product_id' => $product_variation_id,
+            '#ajax' => array(
+              'wrapper' => $form_wrapper_id,
+              'callback' => '::labelsFormAjax',
+            ),
             '#attributes' => array(
               'class' => array('commerce-pos-btn fixed-width btn-danger'),
             ),
@@ -176,6 +182,80 @@ class PrintLabelsForm extends FormBase {
   }
 
   /**
+   * Ajax callback for labels form.
+   *
+   * @param $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *
+   * @return array
+   */
+  public function labelsFormAjax($form, FormStateInterface $form_state) {
+    return $this->buildForm($form, $form_state);
+  }
+
+  /**
+   * Validation for adding a product.
+   *
+   * @param array $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   */
+  public function productAddValidate(array &$form, FormStateInterface $form_state) {
+
+    $product_id = $form_state->getValue('product_search');
+
+    // Load the product to make sure it's valid
+    if (ProductVariation::load($product_id)) {
+      $form_state->set('product_id_to_add', $product_id);
+    }
+    else {
+      $form_state->setError($form['product_search'], t('Invalid product.'));
+    }
+  }
+
+  /**
+   * Submit handler for adding a product.
+   *
+   * @param array $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   */
+  public function productAddSubmit(array &$form, FormStateInterface $form_state) {
+
+    if ($product_id = $form_state->get('product_id_to_add')) {
+
+      // Grab our product info and stick it in storage to be used when the form is rebuilt.
+      $product = ProductVariation::load($product_id);
+      $labels_to_create = (array) $form_state->get('labels_to_create');
+      $labels_to_create[$product_id] = $this->build_info_array($product);
+      $form_state->set('labels_to_create', $labels_to_create);
+
+      // Remove product_id_to_add from storage since it is no longer needed.
+      $storage = $form_state->getStorage();
+      unset($storage['product_id_to_add']);
+      $form_state->setStorage($storage);
+    }
+  }
+
+  /**
+   * Validation for removing a product.
+   *
+   * @param array $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   */
+  public function productRemoveValidate(array &$form, FormStateInterface $form_state) {
+
+  }
+
+  /**
+   * Submit handler for removing a product.
+   *
+   * @param array $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_State
+   */
+  public function productRemoveSubmit(array &$form, FormStateInterface $form_State) {
+
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
