diff --git a/web/org.openbravo.retail.posterminal/js/components/order.js b/web/org.openbravo.retail.posterminal/js/components/order.js
--- a/web/org.openbravo.retail.posterminal/js/components/order.js
+++ b/web/org.openbravo.retail.posterminal/js/components/order.js
@@ -66,7 +66,7 @@
   handlers: {
     onCheckBoxBehaviorForTicketLine: 'checkBoxForTicketLines'
   },
-  style: 'position: relative; padding: 10px;',
+  style: 'position: relative; padding: 10px; height: 35px',
   components: [{
     name: 'lblTotal',
     style: 'float: left; width: 40%;'
@@ -81,6 +81,11 @@
   }],
   renderTotal: function (newTotal) {
     this.$.totalgross.setContent(OB.I18N.formatCurrency(newTotal));
+    OB.MobileApp.model.hookManager.executeHooks('OBPOS_UpdateTotalReceiptLine', {
+        totalline: this
+      }, function (args) {
+        //All should be done in module side
+      });
   },
   renderQty: function (newQty) {
     this.$.totalqty.setContent(newQty);
@@ -99,6 +104,11 @@
   initComponents: function () {
     this.inherited(arguments);
     this.$.lblTotal.setContent(OB.I18N.getLabel('OBPOS_LblTotal'));
+    OB.MobileApp.model.hookManager.executeHooks('OBPOS_RenderTotalReceiptLine', {
+        totalline: this
+      }, function (args) {
+        //All should be done in module side
+      });
   }
 });
 
diff --git a/web/org.openbravo.retail.posterminal/js/components/renderproduct.js b/web/org.openbravo.retail.posterminal/js/components/renderproduct.js
--- a/web/org.openbravo.retail.posterminal/js/components/renderproduct.js
+++ b/web/org.openbravo.retail.posterminal/js/components/renderproduct.js
@@ -7,7 +7,7 @@
  ************************************************************************************
  */
 
-/*global enyo */
+/*global enyo, _ */
 
 enyo.kind({
   name: 'OB.UI.RenderProduct',
@@ -34,6 +34,10 @@
       name: 'identifier'
     }, {
       style: 'color: #888888',
+      name: 'filterAttr',
+      allowHtml: true
+    }, {
+      style: 'color: #888888',
       name: 'bottonLine'
     }]
   }, {
@@ -47,7 +51,19 @@
   }],
   initComponents: function () {
     this.inherited(arguments);
+    // Build filter info from filter attributes
+    var filterTxt = '',
+        filterAttr = this.model.get("filterAttr");
+    if (filterAttr && _.isArray(filterAttr) && filterAttr.length > 0) {
+      filterAttr.forEach(function (attr) {
+        if (filterTxt !== '') {
+          filterTxt = filterTxt + attr.separator;
+        }
+        filterTxt = filterTxt + attr.value;
+      });
+    }
     this.$.identifier.setContent(this.setIdentifierContent());
+    this.$.filterAttr.setContent(filterTxt);
     if (this.model.get('showchdesc')) {
       this.$.bottonLine.setContent(this.model.get('characteristicDescription'));
     }
diff --git a/web/org.openbravo.retail.posterminal/js/model/order.js b/web/org.openbravo.retail.posterminal/js/model/order.js
--- a/web/org.openbravo.retail.posterminal/js/model/order.js
+++ b/web/org.openbravo.retail.posterminal/js/model/order.js
@@ -817,6 +817,11 @@
             }
             if (args.line) {
               args.receipt.addUnit(args.line, args.qty);
+              if (!_.isUndefined(args.attrs)) {
+                _.each(_.keys(args.attrs), function (key) {
+                  args.line.set(key, attrs[key]);
+                });
+              }
               args.line.trigger('selected', args.line);
             } else {
               args.receipt.createLine(args.p, args.qty, args.options, args.attrs);
@@ -1144,6 +1149,7 @@
         }
       }
       var newline = new OrderLine({
+        id: OB.Dal.get_uuid(),
         product: p,
         uOM: p.get('uOM'),
         qty: OB.DEC.number(units),
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
@@ -70,6 +70,7 @@
     onRightToolDisabled: 'rightToolbarDisabled',
     onSelectCharacteristicValue: 'selectCharacteristicValue',
     onSelectBrand: 'selectBrand',
+    onSelectFilter: 'selectFilter',
     onShowLeftHeader: 'doShowLeftHeader',
     onWarehouseSelected: 'warehouseSelected',
     onClearUserInput: 'clearUserInput'
@@ -182,6 +183,9 @@
     }, {
       kind: 'OB.UI.ModalProductBrand',
       name: "modalproductbrand"
+    }, {
+      kind: 'OB.UI.ModalSearchFilterBuilder',
+      name: 'modalsearchfilterbuilder'
     }]
   }, {
     name: 'mainSubWindow',
@@ -822,6 +826,9 @@
       value: inEvent
     });
   },
+  selectFilter: function (inSender, inEvent) {
+    this.waterfall('onCustomFilterUpdate', inEvent);
+  },
   warehouseSelected: function (inSender, inEvent) {
     this.waterfall('onModifyWarehouse', inEvent);
   },
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-right.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-right.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-right.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-right.js
@@ -311,6 +311,7 @@
   tap: function () {
     OB.MobileApp.view.scanningFocus(false);
     if (this.disabled === false) {
+      OB.UI.SearchProductCharacteristic.prototype.filtersCustomClear();
       this.doTabChange({
         tabPanel: this.tabPanel,
         keyboard: false,
