diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 2773d69..8978a3b 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -92,3 +92,4 @@
 erpnext.patches.v4_2.recalculate_bom_costs
 erpnext.patches.v4_2.discount_amount
 erpnext.patches.v4_2.update_landed_cost_voucher
+erpnext.patches.v4_2.set_item_batch
diff --git a/erpnext/patches/v4_2/set_item_batch.py b/erpnext/patches/v4_2/set_item_batch.py
new file mode 100644
index 0000000..3e84a59
--- /dev/null
+++ b/erpnext/patches/v4_2/set_item_batch.py
@@ -0,0 +1,65 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.db.sql("update tabItem set has_batch_no = 'No' where ifnull(has_batch_no, '') = ''")
+	frappe.db.sql("update tabItem set has_serial_no = 'No' where ifnull(has_serial_no, '') = ''")
+	
+	item_list = frappe.db.sql("""select name, has_batch_no, has_serial_no from tabItem 
+		where ifnull(is_stock_item, 'No') = 'Yes'""", as_dict=1)
+		
+	sle_count = get_sle_count()
+	sle_with_batch = get_sle_with_batch()
+	sle_with_serial = get_sle_with_serial()
+	
+	batch_items = get_items_with_batch()
+	serialized_items = get_items_with_serial()
+		
+	for d in item_list:	
+		if d.has_batch_no == 'Yes':
+			if d.name not in batch_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_batch.get(d.name):
+					frappe.db.set_value("Item", d.name, "has_batch_no", "No")
+		else:
+			if d.name in batch_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_batch.get(d.name)):
+				frappe.db.set_value("Item", d.name, "has_batch_no", "Yes")
+		
+		if d.has_serial_no == 'Yes':
+			if d.name not in serialized_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_serial.get(d.name):
+				frappe.db.set_value("Item", d.name, "has_serial_no", "No")
+		else:
+			if d.name in serialized_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_serial.get(d.name)):
+				frappe.db.set_value("Item", d.name, "has_serial_no", "Yes")
+		
+				
+def get_sle_count():
+	sle_count = {}
+	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` group by item_code""", as_dict=1):
+		sle_count.setdefault(d.item_code, d.cnt)
+		
+	return sle_count
+	
+def get_sle_with_batch():
+	sle_with_batch = {}
+	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` 
+		where batch_no != '' group by item_code""", as_dict=1):
+			sle_with_batch.setdefault(d.item_code, d.cnt)
+		
+	return sle_with_batch
+	
+
+def get_sle_with_serial():
+	sle_with_serial = {}
+	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` 
+		where serial_no != '' group by item_code""", as_dict=1):
+			sle_with_serial.setdefault(d.item_code, d.cnt)
+	
+	return sle_with_serial
+	
+def get_items_with_batch():
+	return frappe.db.sql_list("select item from tabBatch")
+	
+def get_items_with_serial():
+	return frappe.db.sql_list("select item_code from `tabSerial No`")
\ No newline at end of file
