diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index 8444dbe..64168b2 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -421,19 +421,25 @@
 		}
 
 		key = this.search.$input.val().toLowerCase();
+		search_status = true
 
 		if(key){
 			return $.grep(window.items, function(item){
-				if(in_list(item.batch_nos, me.search.$input.val())){
-					return me.item_batch_no[item.item_code] = me.search.$input.val()
-				} else if((item.item_code.toLowerCase().match(key)) ||
-				(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key))){
-					return true
-				}else if(item.barcode == me.search.$input.val()){
-					return item.barcode == me.search.$input.val();
-				} else if (in_list(Object.keys(item.serial_nos), me.search.$input.val())){
-					me.item_serial_no[item.item_code] = [me.search.$input.val(), item.serial_nos[me.search.$input.val()]]
-					return true
+				if(search_status){
+					if(in_list(item.batch_nos, me.search.$input.val())){
+						search_status = false;
+						return me.item_batch_no[item.item_code] = me.search.$input.val()
+					} else if(in_list(Object.keys(item.serial_nos), me.search.$input.val())) {
+						search_status = false;
+						me.item_serial_no[item.item_code] = [me.search.$input.val(), item.serial_nos[me.search.$input.val()]]
+						return true
+					} else if(item.barcode == me.search.$input.val()) {
+						search_status = false;
+						return item.barcode == me.search.$input.val();
+					} else if((item.item_code.toLowerCase().match(key)) ||
+						(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key))) {
+						return true
+					}
 				}
 			})
 		}else{
