diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py
index 131e9ff..edaf63b 100644
--- a/stock/doctype/stock_entry/stock_entry.py
+++ b/stock/doctype/stock_entry/stock_entry.py
@@ -279,7 +279,7 @@
 						
 	def validate_return_reference_doc(self):
 		"""validate item with reference doc"""
-		ref = get_return_reference_details(self.doc.fields)
+		ref = get_return_doclist_and_details(self.doc.fields)
 		
 		if ref.doclist:
 			# validate docstatus
@@ -703,7 +703,7 @@
 def query_return_item(doctype, txt, searchfield, start, page_len, filters):
 	txt = txt.replace("%", "")
 
-	ref = get_return_reference_details(filters)
+	ref = get_return_doclist_and_details(filters)
 			
 	stock_items = get_stock_items_for_return(ref.doclist, ref.parentfields)
 	
@@ -737,7 +737,7 @@
 
 	return stock_items
 	
-def get_return_reference_details(args):
+def get_return_doclist_and_details(args):
 	ref = webnotes._dict()
 	
 	# get ref_doclist
@@ -768,7 +768,7 @@
 	if not se.doc.purpose in ["Sales Return", "Purchase Return"]:
 		return
 	
-	ref = get_return_reference_details(se.doc.fields)
+	ref = get_return_doclist_and_details(se.doc.fields)
 	
 	if ref.doclist[0].doctype == "Delivery Note":
 		result = make_return_jv_from_delivery_note(se, ref)
@@ -794,8 +794,6 @@
 			"doctype": "Journal Voucher Detail",
 			"parentfield": "entries",
 			"account": r.get("account"),
-			"debit": r.get("debit"),
-			"credit": r.get("credit"),
 			"against_invoice": r.get("against_invoice"),
 			"against_voucher": r.get("against_voucher"),
 			"balance": get_balance_on(r.get("account"), se.doc.posting_date)
@@ -807,42 +805,32 @@
 	# customer account entry
 	parent = {
 		"account": ref.doclist[0].debit_to,
-		"credit": 0.0,
 		"against_invoice": ref.doclist[0].name,
 	}
 	
 	# income account entries
-	children = {}
+	children = []
 	for se_item in se.doclist.get({"parentfield": "mtn_details"}):
 		# find item in ref.doclist
 		ref_item = ref.doclist.getone({"item_code": se_item.item_code})
 		
-		account, debit = get_sales_account_and_amount_from_item(ref.doclist, ref_item,
-			se_item.transfer_qty)
+		account = get_sales_account_from_item(ref.doclist, ref_item)
 		
 		if account not in children:
-			children[account] = 0
-		children[account] += debit
-		parent["credit"] += debit
+			children.append(account)
 			
-	# find tax account and value and add corresponding rows
+	return [parent] + [{"account": account} for account in children]
 	
-	return [parent] + [{"account": account, "debit": debit} for account, debit in children.items()]
-	
-def get_sales_account_and_amount_from_item(doclist, ref_item, transfer_qty):
-	account = debit = None
+def get_sales_account_from_item(doclist, ref_item):
+	account = None
 	if not ref_item.income_account:
 		if ref_item.parent_item:
 			parent_item = doclist.getone({"item_code": ref_item.parent_item})
-			packing_ratio = parent_item.qty / ref_item.qty
-
-			debit = parent_item.basic_rate * transfer_qty * packing_ratio
 			account = parent_item.income_account
 	else:
-		debit = ref_item.basic_rate * transfer_qty
 		account = ref_item.income_account
 	
-	return account, debit	
+	return account
 	
 def make_return_jv_from_delivery_note(se, ref):
 	invoices_against_delivery = get_invoice_list("Sales Invoice Item", "delivery_note",
@@ -854,11 +842,14 @@
 		
 		invoices_against_delivery = get_invoice_list("Sales Invoice Item", "sales_order",
 			sales_orders_against_delivery)
+			
+	if not invoices_against_delivery:
+		return []
 	
-	against_invoice = {}
+	parent = {}
+	children = []
 	
 	for se_item in se.doclist.get({"parentfield": "mtn_details"}):
-		pending = se_item.transfer_qty
 		for sales_invoice in invoices_against_delivery:
 			si = webnotes.bean("Sales Invoice", sales_invoice)
 			si.run_method("make_packing_list")
@@ -866,44 +857,24 @@
 			
 			if not ref_item:
 				continue
-			
+				
 			ref_item = ref_item[0]
 			
-			if ref_item.qty < pending:
-				transfer_qty = ref_item.qty
-				pending -= ref_item.qty
-			else:
-				transfer_qty = pending
-				pending = 0
+			account = get_sales_account_from_item(si.doclist, ref_item)
 			
-			account, debit = get_sales_account_and_amount_from_item(si.doclist, ref_item,
-				transfer_qty)
-				
-			if si.doclist[0].name not in against_invoice:
-				against_invoice[sales_invoice] = {
-					"parent": {"account": si.doclist[0].debit_to, "credit": 0},
-					"children": {}
-				}
-				
-			against_invoice[sales_invoice]["parent"]["credit"] += debit
+			if account not in children:
+				children.append(account)
 			
-			if account not in against_invoice[sales_invoice]["children"]:
-				against_invoice[sales_invoice]["children"][account] = 0
+			if not parent:
+				parent = {"account": si.doc.debit_to}
+
+			break
 			
-			against_invoice[sales_invoice]["children"][account] += debit
-			
-			# find tax account and value and add corresponding rows
-			
-			if pending <= 0:
-				break
+	if len(invoices_against_delivery) == 1:
+		parent["against_invoice"] = invoices_against_delivery[0]
 	
-	result = []
-	for sales_invoice, opts in against_invoice.items():
-		parent = opts["parent"]
-		parent.update({"against_invoice": sales_invoice})
-		children = [{"account": account, "debit": debit} 
-			for account, debit in opts["children"].items()]
-		result += [parent] + children
+	result = [parent] + [{"account": account} for account in children]
+	
 	return result
 	
 def get_invoice_list(doctype, link_field, value):
@@ -925,53 +896,36 @@
 		invoice_against_receipt = get_invoice_list("Purchase Invoice Item", "purchase_order",
 			purchase_orders_against_receipt)
 			
-	against_voucher = {}
+	if not invoice_against_receipt:
+		return []
+	
+	parent = {}
+	children = []
 	
 	for se_item in se.doclist.get({"parentfield": "mtn_details"}):
-		pending = se_item.transfer_qty
 		for purchase_invoice in invoice_against_receipt:
 			pi = webnotes.bean("Purchase Invoice", purchase_invoice)
 			ref_item = pi.doclist.get({"item_code": se_item.item_code})
 			
 			if not ref_item:
 				continue
-			
+				
 			ref_item = ref_item[0]
 			
-			if ref_item.qty < pending:
-				transfer_qty = ref_item.qty
-				pending -= ref_item.qty
-			else:
-				transfer_qty = pending
-				pending = 0
-			
-			credit = ref_item.rate * transfer_qty
 			account = ref_item.expense_head
 			
-			if pi.doclist[0].name not in against_voucher:
-				against_voucher[purchase_invoice] = {
-					"parent": {"account": pi.doclist[0].credit_to, "debit": 0},
-					"children": {}
-				}
+			if account not in children:
+				children.append(account)
 			
-			against_voucher[purchase_invoice]["parent"]["debit"] += credit
+			if not parent:
+				parent = {"account": pi.doc.credit_to}
 
-			if account not in against_voucher[purchase_invoice]["children"]:
-				against_voucher[purchase_invoice]["children"][account] = 0
-				
-			against_voucher[purchase_invoice]["children"][account] += credit
+			break
 			
-			# find tax account and value and add corresponding rows
-			
-			if pending <= 0:
-				break
+	if len(invoice_against_receipt) == 1:
+		parent["against_voucher"] = invoice_against_receipt[0]
 	
-	result = []
-	for purchase_invoice, opts in against_voucher.items():
-		parent = opts["parent"]
-		parent.update({"against_voucher": purchase_invoice})
-		children = [{"account": account, "credit": credit} 
-			for account, credit in opts["children"].items()]
-		result += [parent] + children
+	result = [parent] + [{"account": account} for account in children]
+	
 	return result
 		
\ No newline at end of file
diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py
index 049b0e6..322fcfa 100644
--- a/stock/doctype/stock_entry/test_stock_entry.py
+++ b/stock/doctype/stock_entry/test_stock_entry.py
@@ -309,7 +309,7 @@
 	def test_delivery_note_return_of_packing_item(self):
 		self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
 		
-	def _test_sales_return_jv(self, se, returned_value):
+	def _test_sales_return_jv(self, se):
 		from stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
 		
@@ -320,35 +320,27 @@
 		self.assertEqual(jv_list[2].get("account"), "Sales - _TC")
 		self.assertTrue(jv_list[1].get("against_invoice"))
 		
-		# debit == credit
-		debit = sum([flt(d.get("debit")) for d in jv_list])
-		credit = sum([flt(d.get("credit")) for d in jv_list])
-		self.assertEqual(debit, credit)
-		
-		# validate value of debit
-		self.assertEqual(debit, returned_value)
-		
 	def test_make_return_jv_for_sales_invoice_non_packing_item(self):
 		se = self._test_sales_invoice_return("_Test Item", 5, 2)
-		self._test_sales_return_jv(se, 1000)
+		self._test_sales_return_jv(se)
 		
 	def test_make_return_jv_for_sales_invoice_packing_item(self):
 		se = self._test_sales_invoice_return("_Test Sales BOM Item", 25, 20)
-		self._test_sales_return_jv(se, 2000)
+		self._test_sales_return_jv(se)
 		
 	def test_make_return_jv_for_delivery_note_non_packing_item(self):
 		se = self._test_delivery_note_return("_Test Item", 5, 2)
-		self._test_sales_return_jv(se, 200)
+		self._test_sales_return_jv(se)
 		
 		se = self._test_delivery_note_return_against_sales_order("_Test Item", 5, 2)
-		self._test_sales_return_jv(se, 200)
+		self._test_sales_return_jv(se)
 		
 	def test_make_return_jv_for_delivery_note_packing_item(self):
 		se = self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
-		self._test_sales_return_jv(se, 400)
+		self._test_sales_return_jv(se)
 		
 		se = self._test_delivery_note_return_against_sales_order("_Test Sales BOM Item", 25, 20)
-		self._test_sales_return_jv(se, 400)
+		self._test_sales_return_jv(se)
 		
 	def _test_delivery_note_return_against_sales_order(self, item_code, delivered_qty, returned_qty):
 		self._insert_material_receipt()
@@ -477,7 +469,7 @@
 		
 		self.assertRaises(StockOverReturnError, se.insert)
 		
-	def _test_purchase_return_jv(self, se, returned_value):
+	def _test_purchase_return_jv(self, se):
 		from stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
 		
@@ -488,20 +480,12 @@
 		self.assertEqual(jv_list[2].get("account"), "_Test Account Cost for Goods Sold - _TC")
 		self.assertTrue(jv_list[1].get("against_voucher"))
 		
-		# debit == credit
-		debit = sum([flt(d.get("debit")) for d in jv_list])
-		credit = sum([flt(d.get("credit")) for d in jv_list])
-		self.assertEqual(debit, credit)
-		
-		# validate value of credit
-		self.assertEqual(credit, returned_value)
-		
 	def test_make_return_jv_for_purchase_receipt(self):
 		se, pr_name = self.test_purchase_receipt_return()
-		self._test_purchase_return_jv(se, 250)
+		self._test_purchase_return_jv(se)
 		
 		se, pr_name = self._test_purchase_return_return_against_purchase_order()
-		self._test_purchase_return_jv(se, 250)
+		self._test_purchase_return_jv(se)
 		
 	def _test_purchase_return_return_against_purchase_order(self):
 		self._clear_stock()
