diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 21656c6..ea10054 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -193,3 +193,4 @@
 erpnext.patches.v5_7.item_template_attributes
 erpnext.patches.v4_2.repost_reserved_qty #2015-08-20
 erpnext.patches.v5_4.update_purchase_cost_against_project
+erpnext.patches.v5_7.update_order_reference_in_return_entries
\ No newline at end of file
diff --git a/erpnext/patches/v5_7/update_order_reference_in_return_entries.py b/erpnext/patches/v5_7/update_order_reference_in_return_entries.py
new file mode 100644
index 0000000..c957242
--- /dev/null
+++ b/erpnext/patches/v5_7/update_order_reference_in_return_entries.py
@@ -0,0 +1,76 @@
+# 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():
+	# sales return
+	return_entries = list(frappe.db.sql("""
+		select dn.name as name, dn_item.name as row_id, dn.return_against, 
+			dn_item.item_code, "Delivery Note" as doctype
+		from `tabDelivery Note Item` dn_item, `tabDelivery Note` dn
+		where dn_item.parent=dn.name and dn.is_return=1 and dn.docstatus < 2
+	""", as_dict=1))
+	
+	return_entries += list(frappe.db.sql("""
+		select si.name as name, si_item.name as row_id, si.return_against, 
+			si_item.item_code, "Sales Invoice" as doctype
+		from `tabSales Invoice Item` si_item, `tabSales Invoice` si
+		where si_item.parent=si.name and si.is_return=1 and si.update_stock=1 and si.docstatus < 2
+	""", as_dict=1))
+	
+	for d in return_entries:
+		ref_field = "against_sales_order" if d.doctype == "Delivery Note" else "sales_order"
+		order_details = frappe.db.sql("""
+			select {0} as sales_order, so_detail 
+			from `tab{1} Item` item
+			where 
+				parent=%s and item_code=%s 
+				and ifnull(so_detail, '') !=''
+			order by
+				(select transaction_date from `tabSales Order` where name=item.{3}) DESC
+		""".format(ref_field, d.doctype, ref_field, ref_field), (d.return_against, d.item_code), as_dict=1)
+		
+		if order_details:
+			frappe.db.sql("""
+				update `tab{0} Item`
+				set {1}=%s, so_detail=%s
+				where name=%s
+			""".format(d.doctype, ref_field), 
+			(order_details[0].sales_order, order_details[0].so_detail, d.row_id))
+			
+			doc = frappe.get_doc(d.doctype, d.name)
+			doc.update_reserved_qty()
+			
+	
+	#--------------------------
+	# purchase return
+	return_entries = frappe.db.sql("""
+		select pr.name as name, pr_item.name as row_id, pr.return_against, pr_item.item_code
+		from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr
+		where pr_item.parent=pr.name and pr.is_return=1 and pr.docstatus < 2
+	""", as_dict=1)
+	
+	for d in return_entries:
+		order_details = frappe.db.sql("""
+			select prevdoc_docname as purchase_order, prevdoc_detail_docname as po_detail 
+			from `tabPurchase Receipt Item` item
+			where 
+				parent=%s and item_code=%s 
+				and ifnull(prevdoc_detail_docname, '') !='' 
+				and ifnull(prevdoc_doctype, '') = 'Purchase Order' and ifnull(prevdoc_detail_docname, '') != ''
+			order by
+				(select transaction_date from `tabPurchase Order` where name=item.prevdoc_detail_docname) DESC
+		""", (d.return_against, d.item_code), as_dict=1)
+		
+		if order_details:
+			frappe.db.sql("""
+				update `tabPurchase Receipt Item`
+				set prevdoc_doctype='Purchase Order', prevdoc_docname=%s, prevdoc_detail_docname=%s
+				where name=%s
+			""", (order_details[0].purchase_order, order_details[0].po_detail, d.row_id))
+			
+			pr = frappe.get_doc("Purchase Receipt", d.name)
+			pr.update_ordered_qty()
+	
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 2e57a11..4f9d54d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -214,15 +214,15 @@
 
 	def stop_sales_order(self):
 		self.check_modified_date()
-		self.update_reserved_qty()
 		frappe.db.set(self, 'status', 'Stopped')
+		self.update_reserved_qty()
 		frappe.msgprint(_("{0} {1} status is Stopped").format(self.doctype, self.name))
 		self.notify_modified()
 
 	def unstop_sales_order(self):
 		self.check_modified_date()
-		self.update_reserved_qty()
 		frappe.db.set(self, 'status', 'Submitted')
+		self.update_reserved_qty()
 		frappe.msgprint(_("{0} {1} status is Unstopped").format(self.doctype, self.name))
 				
 	def update_reserved_qty(self, so_item_rows=None):
