diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 497192d..c1d7d83 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -34,8 +34,7 @@
 			warehouse_account = get_warehouse_account()
 
 		stock_ledger = self.get_stock_ledger_details()
-		voucher_details = self.get_voucher_details(stock_ledger, default_expense_account,
-			default_cost_center)
+		voucher_details = self.get_voucher_details(default_expense_account, default_cost_center)
 
 		gl_list = []
 		warehouse_with_no_account = []
@@ -73,12 +72,15 @@
 
 		return process_gl_map(gl_list)
 
-	def get_voucher_details(self, stock_ledger, default_expense_account, default_cost_center):
+	def get_voucher_details(self, default_expense_account, default_cost_center):
 		details = self.get(self.fname)
-		if default_expense_account:
+
+		if default_expense_account or default_cost_center:
 			for d in details:
-				d.expense_account = default_expense_account
-				d.cost_center = default_cost_center
+				if default_expense_account and not d.get("expense_account"):
+					d.expense_account = default_expense_account
+				if default_cost_center and not d.get("cost_center"):
+					d.cost_center = default_cost_center
 
 		return details
 
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index 0b014ba..ba7b275 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -62,7 +62,7 @@
 		if (doc.status == 'Submitted' || doc.status == 'Material Transferred' || doc.status == 'In Process'){
 			cur_frm.add_custom_button(__('Transfer Raw Materials'), cur_frm.cscript['Transfer Raw Materials']);
 			cur_frm.add_custom_button(__('Update Finished Goods'), cur_frm.cscript['Update Finished Goods']);
-		} 
+		}
 	}
 }
 
@@ -102,7 +102,7 @@
 		filters:[
 			['Project', 'status', 'not in', 'Completed, Cancelled']
 		]
-	}	
+	}
 }
 
 cur_frm.set_query("bom_no", function(doc) {
@@ -112,4 +112,4 @@
 			filters: {item: cstr(doc.production_item)}
 		}
 	} else msgprint(__("Please enter Production Item first"));
-});
\ No newline at end of file
+});
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 8026a3e..7fc686b 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -420,7 +420,7 @@
 						item["to_warehouse"] = ""
 
 				# add raw materials to Stock Entry Detail table
-				idx = self.add_to_stock_entry_detail(item_dict)
+				self.add_to_stock_entry_detail(item_dict)
 
 			# add finished good item to Stock Entry Detail table -- along with bom_no
 			if self.production_order and self.purpose == "Manufacture/Repack":
@@ -437,7 +437,7 @@
 						"expense_account": item.expense_account,
 						"cost_center": item.buying_cost_center,
 					}
-				}, bom_no=pro_obj.bom_no, idx=idx)
+				}, bom_no=pro_obj.bom_no)
 
 			elif self.purpose in ["Material Receipt", "Manufacture/Repack"]:
 				if self.purpose=="Material Receipt":
@@ -457,7 +457,7 @@
 						"expense_account": item[0].expense_account,
 						"cost_center": item[0].buying_cost_center,
 					}
-				}, bom_no=self.bom_no, idx=idx)
+				}, bom_no=self.bom_no)
 
 		self.get_stock_and_rate()
 
@@ -519,14 +519,12 @@
 
 		return issued_item_qty
 
-	def add_to_stock_entry_detail(self, item_dict, bom_no=None, idx=None):
-		if not idx:	idx = 1
+	def add_to_stock_entry_detail(self, item_dict, bom_no=None):
 		expense_account, cost_center = frappe.db.get_values("Company", self.company, \
 			["default_expense_account", "cost_center"])[0]
 
 		for d in item_dict:
-			se_child = self.append('mtn_details', {})
-			se_child.idx = idx
+			se_child = self.append('mtn_details')
 			se_child.s_warehouse = item_dict[d].get("from_warehouse", self.from_warehouse)
 			se_child.t_warehouse = item_dict[d].get("to_warehouse", self.to_warehouse)
 			se_child.item_code = cstr(d)
@@ -545,10 +543,6 @@
 			# to be assigned for finished item
 			se_child.bom_no = bom_no
 
-			# increment idx by 1
-			idx += 1
-		return idx
-
 	def validate_with_material_request(self):
 		for item in self.get("mtn_details"):
 			if item.material_request:
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 1c5458e..526b7c2 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -49,6 +49,7 @@
 		bin_obj.insert()
 	else:
 		bin_obj = frappe.get_doc('Bin', bin)
+	bin_obj.ignore_permissions = True
 	return bin_obj
 
 def update_bin(args):
@@ -82,6 +83,7 @@
 				get_fifo_rate(previous_stock_queue, args.get("qty") or 0) or 0
 		elif valuation_method == 'Moving Average':
 			in_rate = previous_sle.get('valuation_rate') or 0
+
 	return in_rate
 
 def get_avg_purchase_rate(serial_nos):
@@ -120,8 +122,9 @@
 				outgoing_cost += flt(qty_to_pop) * flt(batch[1])
 				batch[0] -= qty_to_pop
 				qty_to_pop = 0
+
 		# if queue gets blank and qty_to_pop remaining, get average rate of full queue
-		return outgoing_cost / abs(qty) - qty_to_pop
+		return outgoing_cost / (abs(qty) - qty_to_pop)
 
 def get_valid_serial_nos(sr_nos, qty=0, item_code=''):
 	"""split serial nos, validate and return list of valid serial nos"""
