diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 9792da1..cd172f1 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -12,13 +12,14 @@
 
 @frappe.whitelist()
 def get_party_details(party=None, account=None, party_type="Customer", company=None,
-	posting_date=None, price_list=None, currency=None):
+	posting_date=None, price_list=None, currency=None, doctype=None):
 
-	return _get_party_details(party, account, party_type, company, posting_date, price_list, currency)
+	return _get_party_details(party, account, party_type,
+		company, posting_date, price_list, currency, doctype)
 
 def _get_party_details(party=None, account=None, party_type="Customer", company=None,
-	posting_date=None, price_list=None, currency=None, ignore_permissions=False):
-	out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date))
+	posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False):
+	out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date, doctype))
 
 	party = out[party_type.lower()]
 
@@ -106,8 +107,8 @@
 	out["selling_price_list" if party.doctype=="Customer" else "buying_price_list"] = price_list
 
 
-def set_account_and_due_date(party, account, party_type, company, posting_date):
-	if not posting_date:
+def set_account_and_due_date(party, account, party_type, company, posting_date, doctype):
+	if doctype not in ["Sales Invoice", "Purchase Invoice"]:
 		# not an invoice
 		return {
 			party_type.lower(): party
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 40db97f..c9b1206 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -25,6 +25,7 @@
 
 	args.currency = frm.doc.currency;
 	args.company = frm.doc.company;
+	args.doctype = frm.doc.doctype;
 	frappe.call({
 		method: method,
 		args: args,
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index a42a865..9597392 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -241,14 +241,14 @@
 	customer: function() {
 		return this.frm.call({
 			method: "erpnext.accounts.party.get_party_details",
-			args: { party: this.frm.doc.customer, party_type:"Customer" }
+			args: { party: this.frm.doc.customer, party_type:"Customer", doctype: this.frm.doc.doctype }
 		});
 	},
 
 	supplier: function() {
 		return this.frm.call({
 			method: "erpnext.accounts.party.get_party_details",
-			args: { party: this.frm.doc.supplier, party_type:"Supplier" }
+			args: { party: this.frm.doc.supplier, party_type:"Supplier", doctype: this.frm.doc.doctype }
 		});
 	},
 
@@ -359,16 +359,17 @@
 
 cur_frm.cscript.s_warehouse = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	args = {
-		'item_code'		: d.item_code,
-		'warehouse'		: cstr(d.s_warehouse) || cstr(d.t_warehouse),
-		'transfer_qty'	: d.transfer_qty,
-		'serial_no'		: d.serial_no,
-		'bom_no'		: d.bom_no,
-		'qty'			: d.s_warehouse ? -1* d.qty : d.qty
+	if(!d.bom_no) {
+		args = {
+			'item_code'		: d.item_code,
+			'warehouse'		: cstr(d.s_warehouse) || cstr(d.t_warehouse),
+			'transfer_qty'	: d.transfer_qty,
+			'serial_no'		: d.serial_no,
+			'qty'			: d.s_warehouse ? -1* d.qty : d.qty
+		}
+		return get_server_fields('get_warehouse_details', JSON.stringify(args),
+			'mtn_details', doc, cdt, cdn, 1);
 	}
-	return get_server_fields('get_warehouse_details', JSON.stringify(args),
-		'mtn_details', doc, cdt, cdn, 1);
 }
 
 cur_frm.cscript.t_warehouse = cur_frm.cscript.s_warehouse;
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 38c7521..297542b 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -239,29 +239,25 @@
 
 	def get_incoming_rate(self, args):
 		incoming_rate = 0
-		if self.purpose == "Sales Return" and \
-				(self.delivery_note_no or self.sales_invoice_no):
-			sle = frappe.db.sql("""select name, posting_date, posting_time,
-				actual_qty, stock_value, warehouse from `tabStock Ledger Entry`
-				where voucher_type = %s and voucher_no = %s and
-				item_code = %s limit 1""",
-				((self.delivery_note_no and "Delivery Note" or "Sales Invoice"),
-				self.delivery_note_no or self.sales_invoice_no, args.item_code), as_dict=1)
-			if sle:
-				args.update({
-					"posting_date": sle[0].posting_date,
-					"posting_time": sle[0].posting_time,
-					"sle": sle[0].name,
-					"warehouse": sle[0].warehouse,
-				})
-				previous_sle = get_previous_sle(args)
-				incoming_rate = (flt(sle[0].stock_value) - flt(previous_sle.get("stock_value"))) / \
-					flt(sle[0].actual_qty)
+		if self.purpose == "Sales Return":
+			incoming_rate = self.get_incoming_rate_for_sales_return(args)
 		else:
 			incoming_rate = get_incoming_rate(args)
 
 		return incoming_rate
 
+	def get_incoming_rate_for_sales_return(self, args):
+		incoming_rate = 0.0
+		if (self.delivery_note_no or self.sales_invoice_no) and args.get("item_code"):
+			incoming_rate = frappe.db.sql("""select abs(ifnull(stock_value_difference, 0) / actual_qty)
+				from `tabStock Ledger Entry`
+				where voucher_type = %s and voucher_no = %s and item_code = %s limit 1""",
+				((self.delivery_note_no and "Delivery Note" or "Sales Invoice"),
+				self.delivery_note_no or self.sales_invoice_no, args.item_code))
+			incoming_rate = incoming_rate[0][0] if incoming_rate else 0.0
+
+		return incoming_rate
+
 	def validate_incoming_rate(self):
 		for d in self.get('mtn_details'):
 			if d.t_warehouse:
