diff --git a/modules/receipt/commerce_pos_receipt.module b/modules/receipt/commerce_pos_receipt.module
index babbc62..1e8246a 100644
--- a/modules/receipt/commerce_pos_receipt.module
+++ b/modules/receipt/commerce_pos_receipt.module
@@ -30,6 +30,7 @@ function commerce_pos_receipt_help($route_name, RouteMatchInterface $route_match
 function commerce_pos_receipt_theme() {
   $theme['commerce_pos_receipt'] = [
     'variables' => [
+      'order' => NULL,
       'receipt' => NULL,
     ],
     'template' => 'commerce-pos-receipt',
@@ -91,7 +92,7 @@ function commerce_pos_receipt_form_commerce_pos_alter(&$form, FormStateInterface
     $form['#attached']['library'][] = 'commerce_pos_receipt/jQuery.print';
 
     $form['#attached']['drupalSettings']['commercePosReceipt'] = [
-      'orderId' => $form_state->getValue('order_id'),
+      'orderId' => $form['order_id']['#value'],
     ];
 
     $form['receipt']['contents'] = [
diff --git a/modules/receipt/src/Controller/PrintController.php b/modules/receipt/src/Controller/PrintController.php
index c1000ad..c034041 100644
--- a/modules/receipt/src/Controller/PrintController.php
+++ b/modules/receipt/src/Controller/PrintController.php
@@ -62,44 +62,51 @@ class PrintController extends ControllerBase {
    * A controller callback.
    */
   public function showReceipt(OrderInterface $commerce_order) {
-
     $number_formatter_factory = \Drupal::service('commerce_price.number_formatter_factory');
     $number_formatter = $number_formatter_factory->createInstance();
+    $is_gift = $commerce_order->getData('gift_order');
+    $totals = [];
 
     $sub_total_price = $commerce_order->getSubtotalPrice();
     $currency = Currency::load($sub_total_price->getCurrencyCode());
-    $formatted_amount = $number_formatter->formatCurrency($sub_total_price->getNumber(), $currency);
 
     // In the future add a setting to display group or individual for same skus.
     $items = $commerce_order->getItems();
     foreach ($items as $item) {
       $totals[] = [
         $item->getTitle() . ' (' . $item->getQuantity() . ')',
-        $number_formatter->formatCurrency($item->getAdjustedTotalPrice()->getNumber(), $currency),
+        !$is_gift ? $number_formatter->formatCurrency($item->getAdjustedTotalPrice()->getNumber(), $currency) : '',
       ];
     }
 
-    $totals[] = ['Subtotal', $formatted_amount];
+    if (!$is_gift) {
+      $formatted_amount = $number_formatter->formatCurrency($sub_total_price->getNumber(), $currency);
+      $totals[] = ['Subtotal', $formatted_amount];
+    }
 
     // Commerce appears to have a bug where if no adjustments exist, it will
     // return a 0 => null array, which will still trigger a foreach loop.
-    foreach ($commerce_order->collectAdjustments() as $key => $adjustment) {
-      if (!empty($adjustment)) {
-        $amount = $adjustment->getAmount();
-        $currency = Currency::load($amount->getCurrencyCode());
-        $formatted_amount = $number_formatter->formatCurrency($amount->getNumber(), $currency);
-
-        $totals[] = [
-          $adjustment->getLabel(),
-          $formatted_amount,
-        ];
+    if (!$is_gift) {
+      foreach ($commerce_order->collectAdjustments() as $key => $adjustment) {
+        if ($adjustment) {
+          $amount = $adjustment->getAmount();
+          $currency = Currency::load($amount->getCurrencyCode());
+          $formatted_amount = $number_formatter->formatCurrency($amount->getNumber(), $currency);
+
+          $totals[] = [
+            $adjustment->getLabel(),
+            $formatted_amount,
+          ];
+        }
       }
     }
 
     // Collecting the total price on the cart.
-    $total_price = $commerce_order->getTotalPrice();
-    $formatted_amount = $number_formatter->formatCurrency($total_price->getNumber(), $currency);
-    $totals[] = ['Total', $formatted_amount];
+    if (!$is_gift) {
+      $total_price = $commerce_order->getTotalPrice();
+      $formatted_amount = $number_formatter->formatCurrency($total_price->getNumber(), $currency);
+      $totals[] = ['Total', $formatted_amount];
+    }
 
     $payment_storage = \Drupal::entityTypeManager()->getStorage('commerce_payment');
     $payments = $payment_storage->loadMultipleByOrder($commerce_order);
@@ -111,7 +118,6 @@ class PrintController extends ControllerBase {
         'class' => ['use-ajax', 'button'],
       ],
     ]);
-
     $config = \Drupal::config('commerce_pos_receipt.settings');
     $build = ['#theme' => 'commerce_pos_receipt'];
     $build['#receipt'] = [
@@ -131,7 +137,9 @@ class PrintController extends ControllerBase {
         '#type' => 'link',
         '#url' => $ajax_url,
       ],
+      'is_gift' => $is_gift,
     ];
+    $build['#order'] = $commerce_order;
     return $build;
   }
 
diff --git a/modules/receipt/templates/commerce-pos-receipt.html.twig b/modules/receipt/templates/commerce-pos-receipt.html.twig
index dd3eae8..d94f96a 100644
--- a/modules/receipt/templates/commerce-pos-receipt.html.twig
+++ b/modules/receipt/templates/commerce-pos-receipt.html.twig
@@ -5,6 +5,7 @@
 *
 * Available variables:
 * - receipt: The receipt.
+* - order: The commerce order.
 *
 * @ingroup themeable
 */
@@ -13,8 +14,16 @@
 {{ attach_library('commerce_pos_receipt/receipt') }}
 {{ attach_library('commerce_pos_receipt/jQuery.print') }}
 <div class="commerce-pos-receipt">
-    <div class="receipt-print">{{ receipt.print }}</div>
+    <div class="receipt-print">
+        {{ receipt.print }}
+        {% if receipt.is_gift == true %}
+            <br>{{ order.getCreatedTime|format_date('medium') }}<br>
+            <strong>{% trans %}Order #{{ order.id|placeholder }}{% endtrans %}</strong>
+            <br><strong>{{ 'GIFT ORDER'|t }}</strong><br>
+        {% endif %}
+    </div>
     <div class="receipt-header">{{ receipt.header }}</div>
     <div class="receipt-body">{{ receipt.body }}</div>
+    <hr>
     <div class="receipt-footer">{{ receipt.footer }}</div>
 </div>
diff --git a/src/Form/POSForm.php b/src/Form/POSForm.php
index 927aba4..25c3ed1 100644
--- a/src/Form/POSForm.php
+++ b/src/Form/POSForm.php
@@ -69,16 +69,19 @@ class POSForm extends ContentEntityForm {
   public function buildForm(array $form, FormStateInterface $form_state) {
     $form['#tree'] = TRUE;
     $form['#attached']['library'][] = 'commerce_pos/form';
+    $form['totals'] = [
+      '#type' => 'container',
+    ];
 
     $step = $form_state->get('step');
     $step = $step ?: 'order';
     $form_state->set('step', $step);
 
     if ($step == 'order') {
-      $form = $this->buildOrderForm($form, $form_state);
+      $this->buildOrderForm($form, $form_state);
     }
     elseif ($step == 'payment') {
-      $form = $this->buildPaymentForm($form, $form_state);
+      $this->buildPaymentForm($form, $form_state);
     }
 
     $this->addTotalsDisplay($form, $form_state);
@@ -89,10 +92,12 @@ class POSForm extends ContentEntityForm {
   /**
    * Build the POS Order Form.
    */
-  protected function buildOrderForm(array $form, FormStateInterface $form_state) {
+  protected function buildOrderForm(array &$form, FormStateInterface $form_state) {
     /* @var \Drupal\commerce_order\Entity\Order $order */
     $order = $this->entity;
     $form_state->set('commerce_pos_order_id', $order->id());
+    // Gift order default value.
+    $gift_value = $order->getData('gift_order');
 
     $form = parent::buildForm($form, $form_state);
     $form['#theme'] = 'commerce_pos_form_order';
@@ -107,7 +112,12 @@ class POSForm extends ContentEntityForm {
     $form['list'] = [
       '#type' => 'container',
     ];
-
+    // Checkbox if this is gift order.
+    $form['totals']['gift_order'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t("Gift order"),
+      '#default_value' => $gift_value,
+    ];
     $form['actions']['submit']['#value'] = t('Payments and Completion');
     // Ensure the user is redirected back to this page after deleting an order.
     if (isset($form['actions']['delete']['#url']) && $form['actions']['delete']['#url'] instanceof Url) {
@@ -117,14 +127,12 @@ class POSForm extends ContentEntityForm {
         ],
       ]);
     }
-
-    return $form;
   }
 
   /**
    * Build the payment form, this is the second and final step of a POS order.
    */
-  public function buildPaymentForm(array $form, FormStateinterface $form_state) {
+  public function buildPaymentForm(array &$form, FormStateinterface $form_state) {
     /* @var \Drupal\commerce_order\Entity\Order $order */
     $order = $this->entity;
     $wrapper_id = 'commerce-pos-pay-form-wrapper';
@@ -266,8 +274,6 @@ class POSForm extends ContentEntityForm {
       '#submit' => ['::submitForm'],
       '#element_key' => 'back-to-order',
     ];
-
-    return $form;
   }
 
   /**
@@ -318,6 +324,7 @@ class POSForm extends ContentEntityForm {
     $step = $form_state->get('step');
     if ($step == 'order') {
       parent::submitForm($form, $form_state);
+      $this->entity->setData('gift_order', $form_state->getValue('totals')['gift_order']);
       $this->entity->save();
       $form_state->set('step', 'payment');
       $form_state->setRebuild(TRUE);
@@ -401,10 +408,6 @@ class POSForm extends ContentEntityForm {
     $store = $order->getStore();
     $default_currency = $store->getDefaultCurrency();
     $totals = [];
-    // Collecting the Subtotal.
-    $form['totals'] = [
-      '#type' => 'container',
-    ];
 
     if (isset($form_state->getUserInput()['keypad'])) {
       $keypad_amount = $form_state->getUserInput()['keypad']['amount'];
