diff -r 4a5588e09d63 web/org.openbravo.mobile.core/source/component/ob-keyboard.js
--- a/web/org.openbravo.mobile.core/source/component/ob-keyboard.js	Fri Feb 19 12:06:52 2016 +0100
+++ b/web/org.openbravo.mobile.core/source/component/ob-keyboard.js	Mon Feb 22 18:43:57 2016 +0100
@@ -721,7 +721,7 @@
     this.buttons = {}; // must be intialized before calling super, not after.
     this.activekeypads = [];
     this.namedkeypads = {};
-
+    OB.MobileApp.view.keyReceivers.push(this);
     this.inherited(arguments);
     // setting labels
     this.$.btnQty.$.button.setContent(OB.I18N.getLabel('OBMOBC_KbQuantity'));
@@ -1004,9 +1004,22 @@
     }
     var me = this;
     OB.debug("AbstractBarcodeActionHandler - txt: " + txt);
-    this.findProductByBarcode(txt, function (product) {
-      me.addProductToReceipt(keyboard, product);
-    }, keyboard);
+    var timeoutBarcodeId;
+    if (!this.units) {
+      this.units = 1;
+    } else {
+      this.units++;
+    }
+    timeoutBarcodeId = setTimeout(function () {
+      if (me.timeoutBarcodeId === timeoutBarcodeId) {
+        var numUnits = me.units;
+        me.units = 0;
+        me.findProductByBarcode(txt, function (product) {
+          me.addProductToReceipt(keyboard, product, numUnits);
+        }, keyboard);
+      }
+    }, 300);
+    this.timeoutBarcodeId = timeoutBarcodeId;
   }
 });
 
diff -r 4a5588e09d63 web/org.openbravo.mobile.core/source/component/ob-terminal-component.js
--- a/web/org.openbravo.mobile.core/source/component/ob-terminal-component.js	Fri Feb 19 12:06:52 2016 +0100
+++ b/web/org.openbravo.mobile.core/source/component/ob-terminal-component.js	Mon Feb 22 18:43:57 2016 +0100
@@ -155,6 +155,7 @@
     kind: 'OB.Modals.ModalItemsToSynch',
     name: 'modalItemsToSynch'
   }],
+  keyReceivers: [],
 
   /**
    * When using focus keeper for barcode scanners, keep always the focus there
@@ -170,16 +171,20 @@
    */
   keeperKey: function (k) {
     OB.debug('keeperKey - keyCode: ' + k.keyCode + " - keyIdentifier: " + k.keyIdentifier + " - charCode: " + k.charCode + " - which: " + k.which);
-    OB.MobileApp.view.waterfall('onGlobalKeypress', {
-      keyboardEvent: k
+    _.each(this.keyReceivers, function (receiver) {
+      receiver.waterfall('onGlobalKeypress', {
+        keyboardEvent: k
+      });
     });
   },
 
   enterEvent: function (k) {
     OB.debug('ENTER event for iOS');
-    OB.MobileApp.view.waterfall('onGlobalKeypress', {
-      keyboardEvent: k,
-      enterEvent: true
+    _.each(this.keyReceivers, function (receiver) {
+      receiver.waterfall('onGlobalKeypress', {
+        keyboardEvent: k,
+        enterEvent: true
+      });
     });
   },
 
@@ -245,9 +250,10 @@
     if (OB.MobileApp.model.get('useBarcode') && OB.MobileApp.keyPressProcessed) {
       delete OB.MobileApp.keyPressProcessed;
     }
-
-    this.waterfall('onGlobalKeypress', {
-      keyboardEvent: inEvent
+    _.each(this.keyReceivers, function (receiver) {
+      this.waterfall('onGlobalKeypress', {
+        keyboardEvent: inEvent
+      });
     });
   },
diff -r 7c388d2db6de web/org.openbravo.mobile.core/source/model/ob-terminal-model.js
--- a/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js   Wed Feb 24 09:39:45 2016 +0100
+++ b/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js   Wed Feb 24 10:01:07 2016 +0100
@@ -350,6 +350,7 @@

   navigate: function (route) {
     OB.debug("Navigating to '" + route + "'");
+    OB.MobileApp.view.keyReceivers.splice(0,OB.MobileApp.view.keyReceivers.length);
     this.router.navigate(route, {
       trigger: true,
       replace: true

 

