diff --git a/patches/august_2013/p06_fix_sle_against_stock_entry.py b/patches/august_2013/p06_fix_sle_against_stock_entry.py
index 4413eea..dbc2c94 100644
--- a/patches/august_2013/p06_fix_sle_against_stock_entry.py
+++ b/patches/august_2013/p06_fix_sle_against_stock_entry.py
@@ -1,23 +1,119 @@
 import webnotes
+
+cancelled = []
+uncancelled = []
+
 def execute():
 	from stock.stock_ledger import update_entries_after
-	
-	stock_entries = webnotes.conn.sql("""select name from `tabStock Entry` 
-		where docstatus < 2  and modified >= '2013-08-15' 
-		and ifnull(production_order, '') != '' and ifnull(bom_no, '') != ''""")
-		
+
+	stock_entries = webnotes.conn.sql("""select * from `tabStock Entry` 
+		where docstatus >= 1 and date(modified) >= "2013-08-16" and date(modified) <= "2013-08-21" 
+		and ifnull(production_order, '') != '' and ifnull(bom_no, '') != '' 
+		order by modified desc, name desc""", as_dict=True)
+
 	for entry in stock_entries:
-		webnotes.conn.sql("""update `tabStock Ledger Entry` set is_cancelled = 'Yes' 
-			where voucher_type = 'Stock Entry' and voucher_no = %s""", entry[0])
+		if not webnotes.conn.sql("""select name from `tabStock Entry Detail` 
+			where parent=%s""", entry.name):
+				res = webnotes.conn.sql("""select * from `tabStock Ledger Entry`
+					where voucher_type='Stock Entry' and voucher_no=%s
+					and is_cancelled='No'""", entry.name, as_dict=True)
+				if res:
+					print entry
+					make_stock_entry_detail(entry, res)
+				
+	if cancelled or uncancelled:
+		send_email()
 			
-		item_warehouse = webnotes.conn.sql("""select distinct item_code, warehouse 
-			from `tabStock Ledger Entry` 
-			where voucher_type = 'Stock Entry' and voucher_no = %s""", entry[0], as_dict=1)
-			
-		for d in item_warehouse:
-			update_entries_after({
-				"item_code": d.item_code,
-				"warehouse": d.warehouse,
-				"posting_date": "2013-08-15",
-				"posting_date": "01:00"
-			})
\ No newline at end of file
+def make_stock_entry_detail(entry, res):
+	global cancelled, uncancelled
+	
+	fg_item = webnotes.conn.get_value("Production Order", entry.production_order,
+		"production_item")
+	voucher_detail_entries_map = {}
+	for sle in res:
+		voucher_detail_entries_map.setdefault(sle.voucher_detail_no, []).append(sle)
+	
+	for i, voucher_detail_no in enumerate(sorted(voucher_detail_entries_map.keys())):
+		sl_entries = voucher_detail_entries_map[voucher_detail_no]
+		# create stock entry details back from stock ledger entries
+		stock_entry_detail = webnotes.doc({
+			"doctype": "Stock Entry Detail",
+			"parentfield": "mtn_details",
+			"parenttype": "Stock Entry",
+			"parent": entry.name,
+			"__islocal": 1,
+			"idx": i+1,
+			"docstatus": 1,
+			"owner": entry.owner,
+			"name": voucher_detail_no,
+			"transfer_qty": abs(sl_entries[0].actual_qty),
+			"qty": abs(sl_entries[0].actual_qty),
+			"stock_uom": sl_entries[0].stock_uom,
+			"uom": sl_entries[0].stock_uom,
+			"conversion_factor": 1,
+			"item_code": sl_entries[0].item_code,
+			"description": webnotes.conn.get_value("Item", sl_entries[0].item_code,
+				"description"),
+			"incoming_rate": sl_entries[0].incoming_rate,
+			"batch_no": sl_entries[0].batch_no,
+			"serial_no": sl_entries[0].serial_no
+		})
+		
+		if sl_entries[0].item_code == fg_item:
+			stock_entry_detail.bom_no = entry.bom_no
+		
+		for sle in sl_entries:
+			if sle.actual_qty < 0:
+				stock_entry_detail.s_warehouse = sle.warehouse
+			else:
+				stock_entry_detail.t_warehouse = sle.warehouse
+				
+		stock_entry_detail.save()
+		
+	if entry.docstatus == 2:
+		webnotes.conn.set_value("Stock Entry", entry.name, "docstatus", 1)
+		
+		# call for cancelled ones
+		se = webnotes.bean("Stock Entry", entry.name)
+		controller = se.make_controller()
+		controller.update_production_order(1)
+		
+		res = webnotes.conn.sql("""select name from `tabStock Entry`
+			where amended_from=%s""", entry.name)
+		if res:
+			cancelled.append(res[0][0])
+			if res[0][0] in uncancelled:
+				uncancelled.remove(res[0][0])
+				
+			webnotes.bean("Stock Entry", res[0][0]).cancel()
+
+		uncancelled.append(se.doc.name)
+		
+def send_email():
+	from webnotes.utils.email_lib import sendmail_to_system_managers
+	global cancelled, uncancelled
+	uncancelled = "we have undone the cancellation of the following Stock Entries through a patch:\n" + \
+		"\n".join(uncancelled) if uncancelled else ""
+	cancelled = "and cancelled the following Stock Entries:\n" + "\n".join(cancelled) \
+		if cancelled else ""
+
+	subject = "[ERPNext] [Important] Cancellation undone for some Stock Entries"
+	content = """Dear user, 
+
+An error got introduced into the code that cleared the item table in Stock Entry associated to a Production Order.
+
+Hence, 
+%s
+
+%s
+
+You will have to edit them again.
+
+Sorry for the inconvenience this has caused.
+
+Regards,
+Team ERPNext.""" % (uncancelled, cancelled)
+
+	print subject, content
+
+	# sendmail_to_system_managers(subject, content)
\ No newline at end of file
