diff -r 8b3152242eb8 web/org.openbravo.mobile.core/source/component/ob-commonbuttons.js
--- a/web/org.openbravo.mobile.core/source/component/ob-commonbuttons.js	Mon Jul 15 15:25:59 2013 +0200
+++ b/web/org.openbravo.mobile.core/source/component/ob-commonbuttons.js	Tue Jul 16 18:17:18 2013 +0200
@@ -548,10 +548,21 @@
   attributes: {
     'x-webkit-speech': 'x-webkit-speech'
   },
+
   events: {
     onFiltered: ''
   },
+
   minLengthToSearch: 0,
+
+  handlers: {
+    onblur: 'blur'
+  },
+  blur: function () {
+    // blurring from input: check if it needed to set focus keeper in order
+    // focus not to be out of an input tag
+    OB.MobileApp.view.scanningFocus();
+  },
   input: function () {
     var temp = this.getValue(),
         me = this;
diff -r 8b3152242eb8 web/org.openbravo.mobile.core/source/component/ob-keyboard.js
--- a/web/org.openbravo.mobile.core/source/component/ob-keyboard.js	Mon Jul 15 15:25:59 2013 +0200
+++ b/web/org.openbravo.mobile.core/source/component/ob-keyboard.js	Tue Jul 16 18:17:18 2013 +0200
@@ -266,7 +266,7 @@
   globalKeypressHandler: function (inSender, inEvent) {
     var which = inEvent.keyboardEvent.which,
         actualStatus = null,
-        actualChar;
+        actualChar, keeper;
 
     if (which >= 96 && which <= 105) {
       which -= 48;
@@ -310,8 +310,24 @@
 
     if (actualChar && actualChar.match(this.keyMatcher)) {
       this.writeCharacter(actualChar);
-    } else if (which === 13 && this.$.editbox.getContent()) { //Handle ENTER key if there is something in the display
+    } else if (which === 13) { //Handle ENTER key
       actualStatus = this.getStatus();
+      keeper = document.getElementById('_focusKeeper');
+      if (OB.MobileApp.view.scanMode) {
+        // scanning using focusKeeper, take the value in the focusKeeper
+        // some scanners do not send events for each character, that's why
+        // the whole contents of focusKeeper are taken
+        if (keeper) {
+          this.$.editbox.setContent(keeper.value);
+          keeper.value = '';
+        }
+      } else {
+        if (keeper) {
+          keeper.value = '';
+          this.$.editbox.setContent(keeper.value);
+          return true;
+        }
+      }
       if (this.$.editbox.getContent() === '0') {
         this.doCommandFired({
           key: "OK"
diff -r 8b3152242eb8 web/org.openbravo.mobile.core/source/component/ob-menu.js
--- a/web/org.openbravo.mobile.core/source/component/ob-menu.js	Mon Jul 15 15:25:59 2013 +0200
+++ b/web/org.openbravo.mobile.core/source/component/ob-menu.js	Tue Jul 16 18:17:18 2013 +0200
@@ -33,6 +33,7 @@
           element.parentNode.removeChild(element);
         }
       },
+
       kind: 'onyx.Menu',
       classes: 'dropdown',
       name: 'menu',
@@ -52,11 +53,16 @@
     }]
   }],
   onButtonTap: function () {
+    // disable focus keeper while showing the menu 
+    this.originalSanMode = OB.MobileApp.view.scanMode;
+    OB.MobileApp.view.scanningFocus(false, true);
+
     if (this.$.toolbarButton.hasClass('btn-over')) {
       this.$.toolbarButton.removeClass('btn-over');
     }
   },
 
+
   disabledChanged: function () {
     this.$.toolbarButton.setDisabled(this.disabled);
   },
@@ -91,6 +97,9 @@
     if (this.disabled) {
       return true;
     }
+
+    // restore focus keeper to its previous status
+    OB.MobileApp.view.scanningFocus(this.parent.parent.parent.parent.parent.parent.originalSanMode);
     this.parent.parent.parent.parent.hide(); // Manual dropdown menu closure
     if (this.eventName) {
       this.bubble(this.eventName);
diff -r 8b3152242eb8 web/org.openbravo.mobile.core/source/component/ob-terminal-component.js
--- a/web/org.openbravo.mobile.core/source/component/ob-terminal-component.js	Mon Jul 15 15:25:59 2013 +0200
+++ b/web/org.openbravo.mobile.core/source/component/ob-terminal-component.js	Tue Jul 16 18:17:18 2013 +0200
@@ -142,7 +142,7 @@
   /**
    * Checks whether focus should be places on focusKeeper and puts it there if needed
    */
-  scanningFocus: function (scanMode) {
+  scanningFocus: function (scanMode, forced) {
     var keeper;
     if (!OB.MobileApp.model.get('useBarcode')) {
       return;
@@ -152,13 +152,23 @@
       this.scanMode = scanMode;
     }
 
-    if (this.scanMode) {
-      keeper = document.getElementById('_focusKeeper');
-      keeper.disabled = false;
-      keeper.focus();
-      //if the textbox is disabled some adroid browsers doesn't put the focus
-      //keeper.disabled = true;
+    if (!this.scanMode && forced) {
+      return;
     }
+
+    // using timeout due problems in android stock browser because of 2 reasons:
+    //   1. need to set the focus back to keeper even if not in scanMode, if not,
+    //      when in a non scanMode tab using scanner writes in the URL tab. So 
+    //      it is not keep in keeper only in case the destination element is a input
+    //      to know the destination timeout is needed
+    //   2. if timeout is not used, on-screen keyboard is shown when settin focus in
+    //      keeper
+    setTimeout(function () {
+      if (this.scanMode || document.activeElement.tagName !== 'INPUT') {
+        keeper = document.getElementById('_focusKeeper');
+        keeper.focus();
+      }
+    }, 500);
   },
 
   /**
